用51单片机,通过串口通信,不断接收一个一组11个2位16进制的数据
时间: 2023-06-14 14:04:16 浏览: 138
51单片机串口程序,字符串16进制发送与接收
3星 · 编辑精心推荐
好的,那我来给你提供一个参考代码,帮助你实现上述功能。
```c
#include <reg52.h>
#include <stdio.h>
sbit RX = P3^0; // 串口接收引脚
void UART_init(void);
void UART_send_byte(unsigned char dat);
unsigned char UART_receive_byte(void);
void main(void)
{
unsigned char buffer[11]; // 存放接收到的11个数据
unsigned char i;
UART_init(); // 初始化串口
while (1)
{
for (i = 0; i < 11; i++)
{
buffer[i] = UART_receive_byte(); // 逐个接收数据
}
// 在这里可以对接收到的数据进行处理,比如打印到串口或LCD屏幕上
for (i = 0; i < 11; i++)
{
printf("%02x ", buffer[i]);
}
printf("\r\n");
}
}
// 串口初始化函数
void UART_init(void)
{
TMOD = 0x20; // 设置定时器1为模式2
TH1 = 0xfd; // 波特率为9600,TH1 = 256 - (11059200 / 12 / 32 / 9600) = 0xfd
TL1 = TH1; // 初始化定时器1
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置串口为模式1,允许接收
EA = 1; // 开启总中断
ES = 1; // 开启串口中断
}
// 串口发送一个字节
void UART_send_byte(unsigned char dat)
{
SBUF = dat;
while (!TI); // 等待发送完成
TI = 0; // 清除发送完成标志位
}
// 串口接收一个字节
unsigned char UART_receive_byte(void)
{
while (!RI); // 等待接收完成
RI = 0; // 清除接收完成标志位
return SBUF;
}
// 串口中断服务函数
void UART_isr(void) interrupt 4
{
if (RI)
{
RI = 0; // 清除接收完成标志位
}
if (TI)
{
TI = 0; // 清除发送完成标志位
}
}
```
这是一个简单的串口接收程序,每次接收11个字节的数据,并将其存放在一个数组中。在实际应用中,你可以根据需要对接收到的数据进行处理,比如打印到串口或LCD屏幕上。
阅读全文