51单片机利用串行口通信方式1实现两个单片机通信,单片机1在P1口的共阳极八段数码管显示数字6,单片机2 也在P1口的共阳极八段数码管跟着显示相同数字的代码和proteus电路图
时间: 2024-05-29 22:15:41 浏览: 64
单片机1代码:
```c
#include <reg51.h>
sbit TX = P3^1; // 设置TX引脚为P3.1
sbit LED = P1^0; // 设置LED引脚为P1.0
void UART_Init() {
TMOD = 0x20; // 设置计时器1为模式2
TH1 = 0xFD; // 波特率为9600
SCON = 0x50; // 8位数据,可变波特率
TR1 = 1; // 启动计时器1
}
void UART_Send(char data) {
SBUF = data; // 将数据写入发送缓冲区
while(TI == 0); // 等待发送完毕
TI = 0; // 清除发送完成标志位
}
void main() {
UART_Init(); // 初始化串口
LED = 1; // 点亮LED
while(1) {
UART_Send(0x06); // 发送数据6
}
}
```
单片机2代码:
```c
#include <reg51.h>
sbit RX = P3^0; // 设置RX引脚为P3.0
sbit LED = P1^0; // 设置LED引脚为P1.0
void UART_Init() {
TMOD = 0x20; // 设置计时器1为模式2
TH1 = 0xFD; // 波特率为9600
SCON = 0x50; // 8位数据,可变波特率
TR1 = 1; // 启动计时器1
}
char UART_Receive() {
while(RI == 0); // 等待接收数据
RI = 0; // 清除接收完成标志位
return SBUF; // 返回接收到的数据
}
void main() {
UART_Init(); // 初始化串口
LED = 0; // 熄灭LED
while(1) {
if(UART_Receive() == 0x06) { // 接收到数据6
P1 = 0xFC; // 显示数字6,共阳极八段数码管P1口
}
}
}
```
Proteus电路图:
![51单片机串口通信](https://img-blog.csdnimg.cn/20211015165241597.png)
阅读全文