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

2024-12-27 12:11:18
推荐回答(5个)
回答1:

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

#include  // 单片机1

#define uchar unsigned char

#include  

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 // 单片机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;

}

}

回答2:

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

回答3:

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

回答4:

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

回答5:

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