您好请问一下,两个单片机互相传数据的程序怎么写

作者&投稿:佘骨 (若有异议请与网页底部的电邮联系)
两个51单片机通过24c02传输数据的程序怎么写?~

http://www.zzwmcu.com/fenlei/4--AT24Cxx1.html是我做的资料,里面讲的很详细。
数据传输的话可以这样,02里第一个存储地址为1号机的读写标志,第二格地址为2号机的读取标志。约定第一个地址为01h时,表示1号机没有写数据给c02中,为02h时表示1号机写了数据给c02,2号机去读取c02的第一个地址,若读到的数据为01h,表示数据没有新数据,读到02h则有新数据,把c02中约定的数据存储区中的数据读取过来,并把c02第一个地址中的数据写为01h。这是1号机传给2号机的方法,2号机把数据给1号机的方式也一样,将上面的换一下就好了。
还要注意,向数据区写数据时要判断一下刚才写入的数据是否被另外的机器读取了。
你也不一定要用上面的方式。

术语叫“多机通信”,不仅可以两个单片机互相传输,还可以多个单片机传输,其中一个为主机,其他的为从机。
51系列单片机还可以叫“串口通信”,就是通过TXD,RXD,两个引脚互相传输,一个单片机的发送端TXD连接另一个单片机的接收端RXD,通过编写传输程序就可以达到数据的传输。
具体的程序要根据传输的内容来编写,建议先学习下“串口通信”的原理和各个寄存器的设置。2016年10月29日12:29:14

两个单片机互相传数据,其实很简单的 就是两个单片机的串口通信,当然需要一个串口通信的协议,如指令码、数据长度、数据等等,就是什么指令需要怎么操作、操作数据是什么。如这是两个单片机简单通信操作的仿真实例可以作为参考。

#include <reg52.h>  // 单片机1

#define uchar unsigned char

#include <stdio.h> 

unsigned char* c;   

sbit  k0=P3^2;

sbit  k1=P3^3;  

sbit  led1=P3^5;

uchar  k;

bit  y0,y1;     

bit  t,s;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c)  //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

void SendString(char *st)  //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

void main()

{

SCON = 0x50;    //SCON: mode 1, 8-bit UART, enable rcvr

TMOD = 0x20;    //TMOD: timer 1, mode 2, 8-bit reload

PCON = 0x80;     // 数据位8、停止位1。效验位无 (11.0592M) 

TH1 = 0xF4;     //TH1:  reload value for 2400@11.0592MHz

TR1 = 1;        //启动定时器1

ES = 1;         //允许串口中断位

EA = 1;         //允许总中断位

c=0;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1; 

c = "az";

SendString(c);              //发送字符串

}

if(k0==1 ) { y0=0; }

if(k1==0 && y1==0) 

{

y1=1; 

c = "as";

SendString(c);              //发送字符串

}

if(k1==1 ) { y1=0; }

//  for(i = 0; i < 4000; i++);  //延迟一小段时间

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') { k++;led1=~led1; }

s=1; t=0;

if(k==10) { k=0;}

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

------------------

#include <reg51.h> // 单片机2

#define uchar unsigned char

unsigned char* c; 

sbit   led1=P3^2;     //  接收 az  , P.2 输出低电平, P3.3  输出高电平。

sbit   led2=P3^3;     //  接收 aa  , P.2 输出高电平, P3.3   输出低电平。

sbit   k0=P3^5;

bit  y0,t,s;

uchar  k;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c)  //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

void SendString(char *st)  //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

void main (void)

{

SCON = 0x50;     // REN=1允许串行接受状态,串口工作模式1  

TMOD = 0x21;     // 定时器工作方式2  

PCON = 0x80;     // 数据位8、停止位1。效验位无 (11.0592M)  

TH1 = 0xF4;      // TH1 = 0xFD; 波特率 2400  

TH0=(65536-54253)/256;  // 50 mS

TL0=(65536-54253)%256;

TR1  = 1;  

ES   = 1;        // 开串口中断

EA   = 1;        // 开总中断

//  ET0=1;

//  TR0=1;

s=1;

k=0;

P1 =~table[k];

while(1)

if(k0==0 && y0==0)

{

y0=1; 

c = "az";

SendString(c);              //发送字符串

}

if(k0==1 ) { y0=0; }

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') {led1=0;led2=1; k++; }

if(SBUF=='s') {led1=1;led2=0; k--; }

s=1; t=0;

if(k==10) { k=0;}

if(k==255) { k=9; }

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

void T0_time()interrupt 1

{

TH0=(65536-54253)/256;  // 50 mS

TL0=(65536-54253)%256;

k++;

if(k==10)  // 这里修改时间

{

k=0;

led1=1;

led2=1;

}

}



两个单片机互相传数据,其实很简单的 就是两个单片机的串口通信,当然需要一个串口通信的协议,如指令码、数据长度、数据等等,就是什么指令需要怎么操作、操作数据是什么。

双机传数据有很多方式,比如串口,蓝牙,wifi模块,还有一些无线通信模块。有很多是基于串行通信协议的,个人建议小学基于穿行口的双机通信,只需要配置几个寄存器,如SCON.

可以百度,或者在程序猿网站上找,上面都是一些资源交换,一般都是能找到的!可能还需要根据自己的需求进行稍微的更改,不过主题思路都是一致的!

可以百度,或者在程序猿网站上找,上面都是一些资源交换,一般都是能找到的!可能还需要根据自己的需求进行稍微的更改,不过主题思路都是一致的!可以百度,或者在程序猿网站上找,上面都是一些资源交换,一般都是能找到的!可能还需要根据自己的需求进行稍微的更改,不过主题思路都是一致的!


你好,请问一下,我用两个单开的开关可以装双联双控吗?
双控开关就是用两个双控开关控制一个灯,如楼梯间一般用双联双控开关控制本层及上层或下层的灯具。单控开关就是普通的开关。一个大顶灯上有8只灯,用同一个开关,按一次亮一只,再按一次亮4只,再按一次另4只亮,再按一次全都亮。用的是普通开关即单联单控开关,只是在灯具上加了一个分配器而已...

你好,请问一下,我用两个单开的开关可以装双联双控吗?
不可以,你可以再去买个单开双控的

您好请问一下,两个单片机互相传数据的程序怎么写
sbit led2=P3^3; \/\/ 接收 aa , P.2 输出高电平, P3.3 输出低电平。sbit k0=P3^5;

拼饭能自己一个人下两个订单吗?
3. 从实际操作的角度来看,拼好饭的平台设计通常也不允许一个人下两单。一般来说,平台会限制每个用户在一定时间内只能发起或参与一次团购。这是为了确保团购的公平性和有效性。综上所述,拼好饭不可以自己下两单。这种做法既不符合团购模式的基本原理,也不符合拼好饭平台的使用规则。

...尼康的d3000和索尼的a290价格差不多,定位也差不多,请问两台...
1400万的ccd,成像质量是没得说,还是典型的索尼和美能达成像风格,最好出raw. 套头素质较高,对焦安静准确,星芒美丽,焦外效果还可以,尼康d3000的话像素只要1020万像素,这点上来讲尼康不占优势,但是尼康的成像十分锐利,大部分场景下成像艳丽,清晰,单从相片感觉不出差距,待机五百张,...

...计生委还是省科技厅发愁。请问这两个单位哪个好些?详细说一下...
两个单位都是省直单位,我想选择去哪个单位,应该按以下几个条件进行选择:1、去了之后编制情况如何,就是说你去了是行政编,还是事业编,这个很重要,必须是第一选择行政编,也就是公务员;2、你进这个单位想干什么,想干什么?这个自己要选择一下,其实就是说你转业到地方以后想要一个怎么样的发展...

请问一下信用证能一票货出两个提单么
如果信用证规定不允许部分(分批)装运,且两份提单不是同一航次的同一条船,那么,这等于是部分(分批)装运,即不符合信用证的规定,所以,是不可以的。但是,如果是同一航次的同一条船的两份提单,则不属于部分(分批)装运,是可以的。如果信用证规定允许部分(分批)装运,那么,可以是两份提单...

大家好,想问一下家里的德力西两开单控五孔插座怎样接线?需要用两个开...
图中L接进火线,同时与L1A和L1B相连,L2A,L2B分别作为灯1,灯2火线,灯1和灯2另一端接零线。进零接N,黄绿花线接插座地线口。

两个单位一起的宣传条幅落款时两个单位写在一行上还是两行上?
两个单位一起的宣传条幅落款时两个单位写在一行上还是两行上?按职权类别盖章,即主办单位左边,协办单位右边。1、2个单位署名应将成文日期拉开,左右空7字,主办机关印章在前,两个印章均压成文日期,印章用红色。

你好 请问一下 惠普主板装双硬盘怎样装 我用两个硬盘单独装都可以正常启...
1-确认一下机器是不是支持双硬盘 (1)如果支持双硬盘,接口引导顺序可以bios下设置,带系统的硬盘可以设置在第一启动项,就可以正常设置和引导使用了。(2)如果是机器不支持双硬盘,首先光驱位置不建议升级硬盘,如果您已经升级了,将带系统的硬盘放在笔记本的主硬盘位置测试,看看是不是可行,因为不...

泸县13961888670: 单片机与单片机之间如何进行串行通信 -
朝庆正大: 1、将两个单片机的RXD与TXD相连2、根据需要传输的数据编写传输协议3、编写串行通信程序,将自己需要发送的数据按照协议进行发送4、编写接收程序,按照协议进行接收5、将两个程序分别写入两个单片机,运行.

泸县13961888670: 单片机的串口数据怎么远程传输到另一个单片机上 -
朝庆正大: 一般都是用串口的 或者试着用SPI或者IIC试试 那就不是串行通信了吧 我一般都是用串口

泸县13961888670: 两个单片机之间怎么实现通信 -
朝庆正大: 很近距离的话可以TTL电平直接通信.稍远一些建议用RS232通信.

泸县13961888670: 两个单片机之间的无线传输 -
朝庆正大: 选择通讯模块完成传输1:用rf905进行数据传输,两块单片机都通过串口将数据发送给905,然后通过905发送出去.2:用PT2262发也可以,如果你不考虑成本的话,你可以用51的一个端口控制一个继电器当按键用 建议nrf24l01这个模块,spi协议,程序不是很难写

泸县13961888670: 两个单片机做一个系统,单片机之间用什么方式通信最好啊!! -
朝庆正大: 1、一般采用单片机串口通讯就可以.2、串口通讯采用什么信号,要根据实际情况确定.3、如果单片机之间通讯距离远的话,可以采用RS485通讯方式;如果单片机之间通讯距离近的话,两个单片机串口可以直接通讯.4、如果对通讯速度要求不高的话,也可以用单片机的普通口做,通过外搭电路,实现两个单片机的通讯.5、不论采用什么方式的通讯,通讯协议都是自己定义.

泸县13961888670: 两个不同型号的单片机可以双机通讯吗 -
朝庆正大: 可以通过串口通信.51跟ARM都有串口 调整好波特率就可以直接通信了 电平兼容串联一个电阻就可以了.

泸县13961888670: 两个单片机进行互相发送数据的汇编程序怎样编写? -
朝庆正大: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV TMOD,#20H MOV TH1,#0FDH MOV TL1,#0FDH SETB TR1 MOV SCON,#50H LOOP: JNB RI,$ CLR RI MOV A,SBUF MOV P1,A MOV SBUF,A JNB TI,$ CLR TI SJMP LOO END

泸县13961888670: 关于两个89s52单片机之间通信的问题 -
朝庆正大: 两个单片机可以共地,当然,如果有必要的话可以用光耦隔离一下就不用共地了(看你对干扰要求高不高了),两个单片机通信可以直接用串口通信(也可以用SPI,看你用什么单片机了),通信倒是很简单,制定一个通信协议就行了,32个传感器和电机控制稍有点难度,不过只要你用心搞,应该也不成什么问题

泸县13961888670: 两个单片机之间串口通信 -
朝庆正大: 这个通讯需要数据传输的一种协议,就是发送方对数据编码,接收方再解码.如:AA 55 DATA1 DATA2 DATA3 DATA4 DATA5 CRC 其中CRC=DATA1+……+DATA5

泸县13961888670: 单片机A机与B机传输数据 -
朝庆正大: 发送程序没什么问题.接收程序有点毛病.#include<reg52.h> char a; void get() { if(RI) { RI=0; a=SBUF; } } void main() { SCON = 0x50; TMOD = 0x20; PCON = 0x00; TH1 = 0xfd; TL1 = 0xfd; TI = 0; while(1) { get(); P0=a; } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网