 //4800bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=0; //串口中断关闭,用查询模式
TI = 0;
}
void main()
{
char status;
UartInit();
while(1){
status = 0;
if(K1 == 0) status += 1; //把开关状态编码,bit0代表K1是否按下,bit1代表K2是否按下
if(K2 == 0) status +=2;
SBUF = status; //发送状态
while(TI == 0); //等待发送完成
TI = 0;
}
}
2号单片机程序:
#include <reg51.h>
#define D1 P2^0
#define D2 P2^1
//串口初始化,和1号单片机串口完全一样的工作模式和速率
void UartInit() //4800bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=0; //串口中断关闭,用查询模式
TI = 0;
}
void main()
{
char status;
UartInit();
while(1){
if(RI){//判断是否收到
status = RI;//读取串口数据
RI = 0;
if(status& 0x01) // 根据收到的数据决定LED的亮灭,bit0决定LED1的亮灭,bit1决定LED2的亮灭
D1 = 0;
else
D1 = 1;
if(status& 0x02)
D2 = 0;
else
D2 = 1;
}
}
}
51单片机入门——Proteus上流水灯的实现
可以参考下
https://blog.csdn.net/weixin_64313535/article/details/130141133