STC89C52 串口收发功能 C 语言实现 - 简单易懂教程
下面是一个简单的 C 语言程序,实现了 STC89C52 单片机的串口收发功能:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0; // LED 灯连接到 P1.0 引脚
sbit KEY = P3^2; // 按键连接到 P3.2 引脚
void UART_Init() {
TMOD = 0x20; // 设置定时器1为模式2,用于串口通信
TH1 = 0xFD; // 波特率设置为9600
TL1 = 0xFD;
TR1 = 1; // 启动定时器1
SM0 = 0; // 设置串口为模式1,8位数据位,可变波特率
SM1 = 1;
REN = 1; // 允许串口接收数据
EA = 1; // 允许总中断
ES = 1; // 允许串口中断
}
void UART_Send(uchar dat) {
SBUF = dat; // 将数据写入发送缓冲区
while(!TI); // 等待数据发送完成
TI = 0; // 清除发送完成标志位
}
void UART_Receive() interrupt 4 {
uchar dat;
if (RI) { // 接收到数据
dat = SBUF; // 读取接收缓冲区的数据
RI = 0; // 清除接收标志位
LED = !LED; // 翻转LED灯状态
UART_Send(dat); // 发送接收到的数据
}
}
void main() {
LED = 0; // 初始化LED灯状态为关闭
KEY = 1; // 初始化按键状态为释放
UART_Init(); // 初始化串口
while(1) {
if (KEY == 0) { // 按键被按下
UART_Send('H');
UART_Send('e');
UART_Send('l');
UART_Send('l');
UART_Send('o');
UART_Send('
');
while(!KEY); // 等待按键释放
}
}
}
这个程序中,UART_Init 函数用于初始化串口,设置波特率和串口工作模式。UART_Send 函数用于发送数据,将数据写入发送缓冲区,并等待数据发送完成。UART_Receive 函数是串口中断服务函数,当接收到数据时,读取接收缓冲区的数据,并发送回复数据,同时翻转 LED 灯的状态。在 main 函数中,通过检测按键的状态,当按键被按下时,发送 'Hello\n' 字符串。
需要注意的是,STC89C52 单片机的串口通信是通过定时器1来实现的,所以需要在程序中设置好定时器1的工作模式和波特率,以确保串口通信正常。
原文地址: https://www.cveoy.top/t/topic/pfHQ 著作权归作者所有。请勿转载和采集!