您的当前位置:首页正文

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

2023-12-28 来源:汇智旅游网


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

一、设计要求

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

二、实验所需元器件 单片机AT89C51 电阻RES 瓷片电容CAP-22pF 晶振CRYSTAL 按扭BUTTON 发光二极管LED-YELLOW 开关SWITCH 拨码开关DIPSW-S 发光二极管LED-GREEN

三、电路原理图:

1

电解电容CAP-ELEC 发光二极管LED-RED 发光二极管LED-RED

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

四、程序设计

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

2

单片机1开始

设置波特率 单片机2开始 设置波特率 串行寄存器设置 启动 TR 串行寄存器设置 启动 TR 读拨入键值 键值是否与前次相同 是否接收到数据? Y 载入SBUF发送 N

结束 N 是否发送完毕? 载入SBUF发送 数据暂存 数据输出到P1 清除RI 3

五、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; 4

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;

}

}

5

6

因篇幅问题不能全部显示,请点此查看更多更全内容