下面是一个简单的 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的工作模式和波特率,以确保串口通信正常。

STC89C52 串口收发功能 C 语言实现 - 简单易懂教程

原文地址: https://www.cveoy.top/t/topic/pfHQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录