编程完成⼀个串口的收发数据程序。要求,单片机与 PC 机进行串口通 信,PC 机发送字符给单片机,单片机统计收到的'A'字符的个数,在数码 管上显示个数。当收到 10 个'A'时发送字 符串 Test OK。';当收到 20 个 'A'时发送字符串'Uart OK !'。通信速率为 4800bps,单片机外接晶振频 率为 11.0592MHz。
时间: 2024-01-22 08:19:14 浏览: 125
这里给出一个基于8051单片机的串口收发数据程序的代码,供参考:
```
#include <reg51.h>
#include <stdio.h>
#define FREQ_OSC 11059200L
#define BAUD_RATE 4800L
sbit LED = P2^0; // 用于测试
sbit D0 = P1^0; // 数码管显示位
sbit D1 = P1^1;
sbit D2 = P1^2;
sbit D3 = P1^3;
unsigned char count_A = 0; // 统计'A'字符的个数
void init_serial() {
TMOD |= 0x20; // 设置定时器1为模式2
TH1 = 256 - FREQ_OSC / (BAUD_RATE * 32); // 波特率计算公式
TL1 = TH1;
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置串口为模式1
EA = 1; // 开总中断
ES = 1; // 开串口中断
}
void serial_isr() interrupt 4 {
if (RI) { // 接收中断
RI = 0; // 清除接收标志位
if (SBUF == 'A') { // 如果收到'A'字符
count_A++; // 计数器加1
if (count_A == 10) {
printf("Test OK\r\n"); // 发送字符串
} else if (count_A == 20) {
printf("Uart OK !\r\n"); // 发送字符串
}
}
}
}
void main() {
init_serial(); // 初始化串口
LED = 0;
while (1) { // 进入主循环
// 数码管显示代码省略
}
}
```
这段代码中,我们使用了定时器1和串口中断来实现收发数据的功能。在收到'A'字符时,我们使用计数器来统计'A'字符的个数,并且在计数器达到10或20时发送相应的字符串。注意,在8051单片机中,我们需要使用printf函数来向串口发送字符串,因为8051没有像PC机那样的标准输出流。
阅读全文