51单片机串口通讯波特率9600的代码
时间: 2023-11-08 13:04:19 浏览: 225
串口通讯_串口通讯c_51单片机串口程序9600波特率_bottomyr1_源码
5星 · 资源好评率100%
以下是51单片机串口通讯波特率9600的代码:
```c
#include<reg51.h>
#define FOSC 11059200L // 定义晶振频率
#define BAUD 9600 // 定义波特率
sbit LED = P1^0; // LED 引脚
void init_uart() // 串口初始化函数
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, enable 接收
TMOD &= 0x0F; // TMOD: 定时器 1 模式设为 8-bit 自动重装载
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD); // 设置波特率重装载值
TR1 = 1; // 启动定时器 1
ES = 1; // 使能串口中断
EA = 1; // 使能总中断
}
void uart_send_char(unsigned char c) // 发送字符函数
{
SBUF = c; // 将要发送的字符存入 SBUF
while(!TI); // 等待发送完成
TI = 0; // 清除发送完成标志
}
void main()
{
init_uart(); // 初始化串口
while(1)
{
LED = !LED; // LED 闪烁
uart_send_char('H'); // 发送字符 'H'
uart_send_char('e'); // 发送字符 'e'
uart_send_char('l'); // 发送字符 'l'
uart_send_char('l'); // 发送字符 'l'
uart_send_char('o'); // 发送字符 'o'
uart_send_char('\r'); // 发送回车符
uart_send_char('\n'); // 发送换行符
Delay(1000); // 延时 1 秒
}
}
void uart_interrupt() interrupt 4 using 1 // 串口中断函数
{
if(RI) // 判断是否接收到数据
{
RI = 0; // 清除接收中断标志
unsigned char c = SBUF; // 读取接收到的数据
uart_send_char(c); // 将接收到的数据发回去
}
}
```
需要注意的是,以上代码使用了中断方式进行串口通讯,需要在使用之前开启中断。另外,发送字符时需要等待发送完成,否则会导致数据错误。
阅读全文