写一个51单片机串口接收字符串的代码
时间: 2024-05-10 16:16:01 浏览: 210
以下是一个简单的51单片机串口接收字符串的代码示例:
```c
#include <reg51.h>
void UART_Init(void);
void UART_SendByte(unsigned char dat);
void UART_SendString(unsigned char *buf);
void UART_ReceiveString(unsigned char *buf);
void main()
{
unsigned char buf[20];
UART_Init();
while (1) {
UART_ReceiveString(buf);
UART_SendString(buf);
}
}
void UART_Init(void)
{
TMOD = 0x20; // 8位自动重装载定时器1
TH1 = 0xFD; // 波特率为9600,时钟频率为11.0592MHz
TL1 = 0xFD;
TR1 = 1; // 启动定时器1
SM0 = 0; // 串口工作方式1
SM1 = 1;
REN = 1; // 允许接收
EA = 1; // 打开总中断
ES = 1; // 打开串口中断
}
void UART_SendByte(unsigned char dat)
{
SBUF = dat;
while (!TI); // 等待发送完成
TI = 0; // 清除发送完成标志
}
void UART_SendString(unsigned char *buf)
{
while (*buf != '\0') {
UART_SendByte(*buf++);
}
}
void UART_ReceiveString(unsigned char *buf)
{
unsigned char c;
unsigned char i = 0;
do {
while (!RI); // 等待接收完成
c = SBUF; // 读取接收到的字符
RI = 0; // 清除接收完成标志
if (c == '\r' || c == '\n') {
break; // 遇到回车或换行停止接收
}
*buf++ = c;
i++;
} while (i < 19); // 最多接收19个字符,留一个位置存放'\0'
*buf = '\0'; // 添加字符串结束标志
}
```
在该代码中,UART_Init() 函数用于初始化串口,UART_SendByte() 函数用于发送单个字符,UART_SendString() 函数用于发送字符串,UART_ReceiveString() 函数用于接收字符串。在主函数中,程序将不断接收串口发送的字符串,并将其原样发送回去。
需要注意的是,该代码中的串口波特率为9600,如果需要修改波特率,需要修改 TH1 和 TL1 寄存器的值,并重新计算波特率。
阅读全文