#include <reg52.h> // 包含51单片机寄存器定义
// 定义串口通信相关寄存器
sbit LED = P1^0; // 假设LED连接到P1.0
// 串口初始化函数
void UART_Init() {
SCON = 0x50; // 模式1,8位异步串行通信,允许接收
TMOD |= 0x20; // 设置定时器1为模式2(8位自动重装)
TH1 = 0xFD; // 波特率9600(12MHz晶振)
TL1 = 0xFD;
TR1 = 1; // 启动定时器1
ES = 1; // 开启串口中断
EA = 1; // 全局中断开启
}
// 串口发送一个字符
void UART_SendChar(char c) {
SBUF = c; // 将字符写入发送缓冲区
while(!TI); // 等待发送完成
TI = 0; // 清除发送标志
}
// 串口发送字符串
void UART_SendString(char *str) {
while(*str) {
UART_SendChar(*str++);
}
}
// 串口接收中断服务程序
void UART_ISR() interrupt 4 {
if (RI) { // 接收中断标志
char received = SBUF; // 读取接收缓冲区
UART_SendChar(received); // 回传接收到的字符
RI = 0; // 清除接收标志
LED = ~LED; // 点亮/熄灭LED表示接收到数据
}
}
// 延时函数(用于测试)
void Delay(unsigned int ms) {
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 1275; j++);
}
// 主函数
void main() {
UART_Init(); // 初始化串口
UART_SendString("Hello, World!\r\n"); // 发送初始信息
while(1) {
Delay(100); // 模拟其他操作
}
}