编程完成一个串口的基本收发数据程序,要求单片机收到PC发送过来的数据后,将该数据直接回送给PC,通信速率为9600bps,单片机外接晶振频率为11.0592MHz。
时间: 2023-11-27 14:50:03 浏览: 141
单片机和计算机的串口通信[1]
5星 · 资源好评率100%
这是一个简单的串口通信程序,使用C语言编写,仅供参考:
```c
#include <reg52.h>
#define BAUDRATE 9600
#define FREQ_OSC 11059200
void init_serial() {
TMOD &= 0x0F; // 设置定时器1为16位自动重装载模式
TMOD |= 0x20;
TH1 = 256 - FREQ_OSC / 32 / BAUDRATE; // 设置波特率
TL1 = TH1;
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置串口为工作模式1,允许接收
ES = 1; // 开启串口中断
EA = 1; // 开启总中断
}
void send_serial(char ch) {
SBUF = ch; // 发送数据
while (!TI); // 等待发送完成
TI = 0; // 清除发送完成标志
}
void main() {
init_serial();
while (1) {
if (RI) { // 如果接收到数据
char ch = SBUF;
RI = 0; // 清除接收标志
send_serial(ch); // 发送回复
}
}
}
void serial_isr() interrupt 4 {
if (TI) { // 如果发送完成
TI = 0; // 清除发送完成标志
}
if (RI) { // 如果接收到数据
RI = 0; // 清除接收标志
}
}
```
这个程序使用定时器1实现波特率的设置,使用串口中断处理接收和发送数据。在主函数中,程序不断地检测是否接收到数据,如果接收到数据,则发送回复。在中断服务程序中,程序清除发送和接收标志位。
阅读全文