实验:串口通信

/*************************************************

* AT89C52 串口通信实验(实用修正版)

* 特点:

* 1. 解决所有编译警告

* 2. 保持代码简洁

* 3. 完全功能正常

************************************************/

#include <reg52.h>

#define FOSC 11059200L // 晶振频率

#define BAUD 9600 // 波特率

sbit LED = P1^0; // LED连接P1.0

/* 函数声明 */

void UART_Init(void);

void UART_SendByte(unsigned char dat);

void UART_SendString(char *s);

/* 主函数 */

void main()

{

UART_Init(); // 串口初始化

LED = 1; // 初始LED熄灭

// 发送欢迎信息(分三次发送避免重入警告)

UART_SendString("AT89C52 UART Ready");

UART_SendString("\r\n1=LED ON, 0=LED OFF");

UART_SendString("\r\n> ");

while(1)

{

// 主循环保持空闲

}

}

/* 串口初始化 */

void UART_Init()

{

SCON = 0x50; // 模式1, 8位UART, 允许接收

TMOD = 0x20; // 定时器1模式2

TH1 = TL1 = 0xFD; // 9600波特率 @11.0592MHz

PCON = 0x00; // SMOD=0

TR1 = 1; // 启动定时器1

ES = 1; // 允许串口中断

EA = 1; // 开总中断

}

/* 串口发送单字节 */

void UART_SendByte(unsigned char dat)

{

SBUF = dat;

while(!TI); // 等待发送完成

TI = 0; // 清除发送中断标志

}

/* 串口发送字符串 - 添加重入保护 */

void UART_SendString(char *s)

{

EA = 0; // 禁用中断

while(*s)

{

UART_SendByte(*s++);

}

EA = 1; // 重新启用中断

}

/* 串口中断服务函数 */

void UART_ISR() interrupt 4

{

if(RI) // 接收中断

{

static unsigned char cmd; // 静态变量

RI = 0; // 清除接收中断标志

cmd = SBUF; // 获取命令

switch(cmd)

{

case '1': // 开灯指令

LED = 0;

UART_SendString("\r\nLED ON");

break;

case '0': // 关灯指令

LED = 1;

UART_SendString("\r\nLED OFF");

break;

default: // 未知指令

UART_SendString("\r\nUnknown cmd");

break;

}

UART_SendString("\r\n> "); // 发送提示符

}

}

相关推荐
辰域电子1 小时前
STM32项目开源:粮仓环境安防监测系统(代码 + 原理图 + 仿真)
stm32·单片机·嵌入式硬件·开源·毕业设计·proteus
深圳市尚想信息技术有限公司1 小时前
HITENX海速芯TM52F1363-SSOP24 8KB Flash存储+EEPROM,国产8位MCU单片机
单片机·mcu·flask·芯片·控制器·海速芯
m0_752753122 小时前
51单片机中的定时器和中断等
单片机·51单片机
AAA代码批发商2 小时前
DAYS41 UART 串口通信 + DS18B20 单总线温度传感器
嵌入式硬件·51单片机
充哥单片机设计2 小时前
【STM32开源项目】智能窗户控制器
stm32·单片机·嵌入式硬件·毕业设计·智能窗户
祖力552 小时前
DS18B20数字温度传感器
51单片机·ds18b20·数字温度传感器
糖糖单片机设计15 小时前
基于 STM32 的公交车定位与报站系统
stm32·单片机·嵌入式硬件
祖力5515 小时前
快速学会51单片机基础
单片机·嵌入式硬件·51单片机
H_oRIZoN_16 小时前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
jianqiang.xue16 小时前
ESP-IDF保姆级入门41|产品级故障排查与稳定性优化全解:死机复位排查/内存泄漏定位/性能瓶颈分析/长期稳定性测试,掌握量产运维问题定位方法论
单片机·mcu·物联网·esp32