51单片机串口通信代码
时间: 2023-11-07 12:05:04 浏览: 88
以下是51单片机串口通信代码,其中包括串口初始化、发送数据和接收数据的函数:
```c
#include <reg51.h>
#define FOSC 11059200L //晶振频率
#define BAUD 9600 //波特率
#define TH1_VALUE 256 - FOSC / 12 / BAUD //计算TH1初值
sbit led = P0^0; //测试用LED
void uart_init() //串口初始化函数
{
TMOD &= 0xF0; //清零T1模式位
TMOD |= 0x20; //设定T1为8位自动重载定时器
TH1 = TH1_VALUE; //设定初值
TL1 = TH1_VALUE; //设定初值
TR1 = 1; //启动T1
SM0 = 0; //设定串口工作方式
SM1 = 1; //设定串口工作方式
SM2 = 0; //设定串口工作方式
REN = 1; //使能接收
EA = 1; //打开总中断
ES = 1; //打开串口中断
}
void uart_send(char dat) //发送数据函数
{
SBUF = dat; //将待发送数据写入SBUF
while(!TI); //等待发送完成
TI = 0; //清除发送标志位
}
char uart_receive() //接收数据函数
{
while(!RI); //等待接收完成
RI = 0; //清除接收标志位
return SBUF; //读取接收到的数据
}
void main()
{
uart_init(); //串口初始化
while(1)
{
uart_send('A'); //发送字符'A'
led = !led; //LED翻转
delay(1000); //延时1s
}
}
void uart_isr() interrupt 4 //串口中断服务函数
{
char dat;
if(RI) //接收中断
{
dat = uart_receive(); //读取接收到的数据
//处理接收到的数据
}
if(TI) //发送中断
{
TI = 0; //清除发送标志位
}
}
```
说明:
- `uart_init()` 函数用于初始化串口,包括设定波特率、工作方式、启动定时器等。
- `uart_send()` 函数用于发送数据,需要传入一个字符参数,将其写入 SBUF 寄存器并等待发送完成。
- `uart_receive()` 函数用于接收数据,等待接收完成后读取 SBUF 寄存器中的数据并返回。
- `main()` 函数中发送字符 'A' 并翻转测试用 LED,然后延时 1 秒。
- `uart_isr()` 函数为串口中断服务函数,处理接收和发送中断。其中,接收中断会读取接收到的数据并进行处理,发送中断只需要清除发送标志位即可。
阅读全文