两个单片机之间的串行通信

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

两个单片机之间的串行通信

一、设计要求

在某个控制系统中有U1、U2这两个单片机,U1单片机首先将P1端口指拨开关数据载入SBUF,然后经由TXD将数据传送给U2单片机,U2单片机将接收数据存入SBUF,再由SBUF载入累加器,并输出至P1端口,点亮相应端口的LED。

二、实验所需元器件

单片机AT89C51 瓷片电容CAP-22pF 晶振CRYSTAL 电解电容CAP-ELEC

电阻RES 按扭BUTTON 发光二极管

LED-YELLOW 发光二极管LED-RED

开关SWITCH 拨码开关DIPSW-S 发光二极管LED-

GREEN 发光二极管LED-RED

三、电路原理图:

两个单片机之间的串行通信电路图

四、程序设计

这两个单片机均工作在半工状态,U1将P1端口的状态通过TXD发半空给U2,而U2接收U1的数据,然后控制P1端口的LED显示。因此,需编写两个不同的程序,其程序流程图如下所示:

五、C语言程序:

U1的C语言程序:

#include "reg51.h"

#define uint unsigned int #define uchar unsigned char

void send(uchar state)

{

SBUF=state;

while(TI==0);

TI=0;

}

void SCON_init(void)

{

SCON=0x50;

TMOD=0x20;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

TI=0;

TR1=1;

ES=1;

}

void main()

{

P1=0xff;

SCON_init();

while(1)

{

send(P1);

}

} U2的C语言程序:

#include "reg51.h"

#define uint unsigned int #define uchar unsigned char uchar state;

void receive()

{

while(RI==0)

state=SBUF;

RI=0;

}

void SCON_init(void)

{

SCON=0x50;

TMOD=0x20;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

RI=0;

TR1=1;

}

void main()

{

SCON_init();

while(1)

{

receive();

P1=state;

}

}

六、调试与仿真:

相关文档
最新文档