保留发送操作,拨码按键SW对应LED灯亮灭,实现两个51单片机的串行通信
时间: 2024-02-28 18:53:51 浏览: 135
两个51单片机串口通信
5星 · 资源好评率100%
下面是实现两个51单片机的串行通信,通过拨码开关SW控制LED亮灭的程序代码:
发送端:
```
#include <reg51.h>
#define LED P1
#define SW P2
main() {
SCON = 0x50; // 设置串口模式
PCON = 0x80; // 波特率加倍
TMOD = 0x20; // 设置定时器1为模式2
TH1 = TL1 = 0xFD; // 设置波特率为9600
TR1 = 1; // 启动定时器1
EA = ET1 = ES = 1; // 开启中断
while(1) {
if(SW != 0xFF) { // 检测P2口的拨码开关是否被按下
LED = ~LED; // 取反LED的状态
SBUF = LED; // 发送LED的状态
while(TI == 0); // 等待发送完成
TI = 0; // 清除发送中断标志
while(SW != 0xFF); // 等待拨码开关释放
}
}
}
void serial(void) interrupt 4 {
if(TI == 1) {
TI = 0;
}
if(RI == 1) {
RI = 0;
}
}
```
接收端:
```
#include <reg51.h>
#define LED P1
main() {
SCON = 0x50; // 设置串口模式
PCON = 0x80; // 波特率加倍
TMOD = 0x20; // 设置定时器1为模式2
TH1 = TL1 = 0xFD; // 设置波特率为9600
TR1 = 1; // 启动定时器1
EA = ET1 = ES = 1; // 开启中断
while(1) {
while(RI == 0); // 等待接收完成
RI = 0; // 清除接收中断标志
LED = SBUF; // 将接收到的数据直接显示在LED上
}
}
void serial(void) interrupt 4 {
if(TI == 1) {
TI = 0;
}
if(RI == 1) {
RI = 0;
}
}
```
在发送端程序中,当检测到P2口的拨码开关被按下时,将LED的状态发送给接收端,并等待发送完成。在接收端程序中,当接收到数据时,将其直接显示在LED上。需要注意的是,在发送和接收数据时,需要等待相应的中断标志位被设置或清除,否则会出现数据丢失或错误的情况。
阅读全文