写一个51单片机串口驱动函数
时间: 2023-05-30 11:06:48 浏览: 132
以下是一个简单的51单片机串口驱动函数:
#include<reg51.h>
#define BAUD_RATE 9600 //波特率
#define FREQ 11059200UL //晶振频率
void init_uart(void)
{
//设置波特率
TMOD |= 0x20; //使用定时器1的模式2
TH1 = 256 - FREQ / 12 / BAUD_RATE; //计算定时器初值
TL1 = TH1; //初值相同
TR1 = 1; //启动定时器1
//配置串口
SCON = 0x50; //使用模式1,启用接收
ES = 1; //启用串口中断
EA = 1; //启用总中断
}
void putchar(char c)
{
SBUF = c; //发送字符
while(!TI); //等待发送完成
TI = 0; //清除发送完成标志
}
char getchar(void)
{
char c;
while(!RI); //等待接收完成
c = SBUF; //读取接收数据
RI = 0; //清除接收完成标志
return c;
}
void interrupt_uart(void) interrupt 4
{
if(RI) //接收中断
{
RI = 0; //清除接收完成标志
//处理接收到的数据
}
if(TI) //发送中断
{
TI = 0; //清除发送完成标志
}
}
int main()
{
init_uart(); //初始化串口
while(1)
{
//主程序逻辑
}
return 0;
}
阅读全文