51单片机串口通信代码
时间: 2023-11-09 22:08:46 浏览: 30
以下是基于51单片机的串口通信代码示例:
```c
#include <reg52.h>
// 定义波特率常量
#define BAUDRATE 9600
// 定义串口常量
#define UART_RX P3_0
#define UART_TX P3_1
// 定义全局变量
char received_data; // 用于存储接收到的数据
// 初始化函数
void init(void)
{
TMOD = 0x20; // 定时器1,工作模式2
TH1 = TL1 = -(FOSC/12/16/BAUDRATE); // 设置波特率
TR1 = 1; // 启动定时器1
SCON = 0x50; // 串口模式1,允许接收
EA = ES = 1; // 允许中断
}
// 串口发送函数
void send_char(char c)
{
SBUF = c;
while (!TI); // 等待发送完成
TI = 0; // 清除发送完成标志
}
// 中断服务函数,用于接收数据
void uart_isr(void) interrupt 4
{
if (RI) { // 接收数据中断
received_data = SBUF; // 存储接收到的数据
RI = 0; // 清除接收中断标志
}
}
// 主函数
void main(void)
{
init(); // 初始化
while (1) {
// 接收数据
if (UART_RX == 0) {
send_char(received_data); // 发送接收到的数据
}
}
}
```
以上代码实现了串口的初始化、发送和接收操作,并在接收到数据时将其发送回去。注意,串口通信需要注意波特率、数据位、停止位、校验位等参数的设置,具体设置可以参考相关文档。