使用半双工通信
/************************************
使用硬件UART模块和串口中断
************************************/
#include <reg52.h>
typedef unsigned int uint;
void configUART(uint baud);
void main() {
EA = 1;
configUART(9600);
while (1) ;
}
void configUART(uint baud) {
SCON = 0x50; //配置串口为模式1,并使能串行接收
TMOD &= 0x0F; //清零T1的控制位
TMOD |= 0x20; //配置T1为模式2(自动重装模式)
TH1 = 256 - 11059200 / 12 / 16 / 2 / baud;
TL1 = TH1;
ET1 = 0; //!!!禁止T1中断(因为做了波特率发生器)
ES = 1; //使能串口中断
TR1 = 1;
}
//中断类型码为4,中断向量的地址 = 中断类型码 * 8 + 3
void interruptUART() interrupt 4 {
if (RI) { //如果接收到了字节
RI = 0; //手动清零
SBUF++; //可以自己设置接收到后数据的处理方式
}
if (TI) { //如果字节发送完毕
TI = 0; //手动清零
}
}
下面的程序把书上的代码做了点优化,加了一个isNewInfo,在主循环里

本文介绍了51单片机如何进行UART串口通信,特别强调了优化措施,通过添加isNewInfo标志位确保仅在接收到新数据时更新显示缓冲区,实现了更高效的半双工通信方式。

3256

被折叠的 条评论
为什么被折叠?



