#include <reg52.h>

#define FOSC 11059200L //系统频率 #define BAUD 9600 //串口波特率 #define DIV 256 //定时器1分频系数

void UART_Init() { TMOD |= 0x20; //设定定时器1工作在方式2 TL1 = TH1 = -(FOSC / (DIV * 12 * BAUD)); //设定定时初值 TR1 = 1; //启动定时器1 SM0 = 0; //设置串口工作在模式1 SM1 = 1; REN = 1; //允许串口接收 EA = 1; //开总中断 ES = 1; //开串口中断 }

void UART_SendByte(unsigned char dat) { SBUF = dat; //将要发送的数据放入发送缓冲区 while (!TI); //等待发送完成 TI = 0; //清除发送完成标志位 }

void main() { UART_Init(); //初始化串口

while (1)
{
    UART_SendByte('A');    //发送字母A
    Delay(1000);           //延时1秒
}

}

//串口中断服务函数 void UART_Interrupt() interrupt 4 { unsigned char dat;

if (RI)                    //接收中断
{
    RI = 0;                //清除接收中断标志位
    dat = SBUF;            //读取接收到的数据
    //处理接收到的数据
}

if (TI)                    //发送中断
{
    TI = 0;                //清除发送中断标志位
    //处理发送完成事件
}

}


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

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