51单片机串口接收字符串的代码
时间: 2023-07-27 13:07:22 浏览: 121
下面是51单片机串口接收字符串的代码示例:
```c
#include <reg52.h>
#include <stdio.h>
#define FOSC 11059200L
#define BAUD 9600
#define TH1 (256 - FOSC / 12 / BAUD)
sbit LED = P1^0;
void UART_init() {
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = TH1;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
}
void UART_interrupt() interrupt 4 {
if (RI) {
RI = 0;
// 接收到数据
char data = SBUF;
// 处理数据
if (data == '1') {
LED = 1;
} else if (data == '0') {
LED = 0;
}
}
}
void main() {
UART_init();
while (1);
}
```
在上面的代码中,我们首先定义了常量 `FOSC` 和 `BAUD`,分别表示单片机的时钟频率和波特率。然后通过这两个常量计算出串口波特率发生器的初值 `TH1`。
在 `UART_init()` 函数中,我们将 TMOD 寄存器的高 4 位清零,然后设置 TMOD 寄存器的低 4 位为 0010,表示使用定时器 1 的模式 2。接着将 TH1 寄存器的值设为 `TH1`,同时启用定时器 1 和串口接收中断,并设置串口工作模式为 8 位数据位、无校验位、1 位停止位。
在 `UART_interrupt()` 函数中,我们首先判断 RI 寄存器的值,如果为 1,表示接收到了数据。我们读取 SBUF 寄存器的值,然后根据接收到的数据来控制 LED 灯的亮灭。
最后在 `main()` 函数中,我们调用 `UART_init()` 函数初始化串口,并进入一个无限循环中等待串口中断。
阅读全文