51单片机串口通信代码
时间: 2023-09-28 10:13:22 浏览: 63
51单片机串口通讯汇编代码
以下是基于51单片机的串口通信代码,以串口1为例:
```c
#include <reg52.h>
#define FOSC 18432000UL // 定义晶振频率
#define BAUD 9600 // 定义波特率
#define TIMER_1 (65536UL - (FOSC / 4 / BAUD))
sbit LED = P1^0; // 用LED测试串口通信是否成功
void UART_init() {
TMOD |= 0x20; // 定时器1工作在方式2
TH1 = TH1 = TIMER_1 >> 8; // 初始化定时器1的初值
TL1 = TIMER_1 & 0xff;
SCON = 0x50; // 配置串口1为工作方式1
ES = 1; // 打开串口中断
EA = 1; // 打开总中断
TR1 = 1; // 启动定时器1
}
void UART_send_char(unsigned char c) {
SBUF = c; // 将要发送的字符存入SBUF
while(!TI); // 等待发送完成
TI = 0; // 清除发送完成标志位
}
void UART_send_string(char *str) {
while(*str != '\0') {
UART_send_char(*str); // 逐个发送字符串中的字符
str++;
}
}
void UART_receive() interrupt 4 {
unsigned char c;
if(RI) { // 判断是否收到数据
c = SBUF; // 读取接收到的数据
RI = 0; // 清除接收标志位
if(c == 'H') {
LED = 1; // 接收到'H'时,点亮LED
} else if(c == 'L') {
LED = 0; // 接收到'L'时,熄灭LED
}
}
}
void main() {
UART_init(); // 初始化串口
while(1) {
UART_send_string("Please input 'H' or 'L':\r\n"); // 提示用户输入
}
}
```
在此示例中,我们使用了串口1和一个LED灯来测试串口通信是否成功。当接收到字符'H'时,LED灯亮起;当接收到字符'L'时,LED灯熄灭。
如果要使用串口2,只需将SCON和ES改为S2CON和ES2即可。
阅读全文