实验:串口通信

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

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

}

}

相关推荐
芯联智造几秒前
【stm32简单外设篇】- 震动传感器
c语言·stm32·单片机·嵌入式硬件
Hello_Embed5 分钟前
LVGL 入门(八):标签控件 lv_label
前端·笔记·stm32·单片机·嵌入式
海阔天空任鸟飞~10 小时前
蓝汛-BT897-添加按键提示音
c语言·单片机·蓝汛
yrx02030710 小时前
stm32单线串口(空闲中断+DMA接收+阻塞式发送)模式控制舵机
stm32·单片机·嵌入式硬件·单线串口
雾削木10 小时前
STM32HAL输入捕获定时器测量PWM频率和占空比
stm32·单片机·嵌入式硬件
FreakStudio10 小时前
一行命令搞定驱动安装!MicroPython 开发有了自己的 “PyPI”包管理平台!
python·stm32·单片机·嵌入式·arm·电子diy
forAllforMe11 小时前
基于STM32+LAN9252的ether CAT 开发环境搭建
stm32·单片机·嵌入式硬件
半空扫地僧一枚11 小时前
10期:转速模式 (Speed Mode) 和 扭矩模式 (Torque Mode)
单片机·嵌入式硬件·汽车
线束线缆组件品替网11 小时前
Adam Tech NPC-6-007-BU网线组件详解
服务器·网络·数码相机·智能路由器·电脑·51单片机·电视盒子
敬畏_上帝14 小时前
PCtolLCD2002完美版下载以及教程
单片机·嵌入式硬件