实验:串口通信

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

* 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> "); // 发送提示符

}

}

相关推荐
周周记笔记7 小时前
ESP32 初识:WiFi MCU 新时代与国产芯片生态(一)
单片机·嵌入式硬件
驴友花雕9 小时前
【花雕学编程】Arduino BLDC 之群体机器人协同探索
c++·单片机·嵌入式硬件·arduino bldc·群体机器人协同探索
驴友花雕9 小时前
【花雕学编程】Arduino BLDC 之仿人机器人膝关节稳定系统
c++·单片机·嵌入式硬件·arduino bldc·仿人机器人膝关节稳定系统
linweidong14 小时前
嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
stm32·单片机·算法
Zero_Era14 小时前
高性价比安全MCU——LKT6830C
单片机·嵌入式硬件·安全
国科安芯15 小时前
卫星通讯导航FPGA供电单元DCDC芯片ASP4644S2B可靠性分析
单片机·嵌入式硬件·fpga开发·架构·安全性测试
易水寒陈17 小时前
单片机实现的工厂模式
单片机
点灯小铭19 小时前
双积分AD转换电路
单片机·毕业设计·课程设计·期末大作业
youcans_19 小时前
【动手学STM32G4】(8)STM32G431之 DAC进阶
stm32·单片机·嵌入式硬件·dma·定时器
hqwest19 小时前
码上通QT实战14--监控页面06-串口设备数据初始化-
单片机·rs232·serialport·波特率·串口设备·虚拟串口设备软件·qt项目配置文件