51单片机串口通信程序
时间: 2023-11-29 17:03:33 浏览: 47
下面是一个基本的 51 单片机串口通信程序,可以实现通过串口向电脑发送数据或者接收电脑发送过来的数据:
```
#include <reg52.h>
// 定义波特率
#define BAUDRATE 9600
// 定义计算波特率的公式
#define BDRCON ((65536UL - (FOSC / 4) / BAUDRATE) / 256)
// 定义串口发送函数
void SendData(unsigned char dat);
// 定义串口接收函数
unsigned char ReceiveData(void);
void main(void)
{
// 初始化串口
TMOD = 0x20; // 定时器1工作在模式2,用于串口波特率发生器
TH1 = BDRCON; // 定时器1初值,计算波特率
TL1 = BDRCON;
PCON = 0x00; // 波特率不加倍
SCON = 0x50; // 串口工作在模式1,允许发送和接收
ES = 1; // 开启串口中断
EA = 1; // 开启总中断
while (1)
{
// 向串口发送数据
SendData(0x55);
// 接收串口数据
unsigned char data = ReceiveData();
}
}
void SendData(unsigned char dat)
{
SBUF = dat; // 将数据放入发送缓冲区
while (!TI); // 等待数据发送完毕
TI = 0; // 清除发送标志位
}
unsigned char ReceiveData(void)
{
while (!RI); // 等待接收到数据
unsigned char data = SBUF; // 读取接收缓冲区数据
RI = 0; // 清除接收标志位
return data;
}
// 串口中断服务函数
void SerialInterrupt() interrupt 4
{
if (TI) // 发送中断
{
TI = 0; // 清除发送标志位
}
if (RI) // 接收中断
{
RI = 0; // 清除接收标志位
}
}
```
注意,这个程序的波特率为 9600,如果需要使用其他波特率,需要修改宏定义中的 `BAUDRATE` 值,并且重新计算波特率公式中的 `BDRCON` 值。