编写程序,完成单片机与PC之间的 通信,要求单片机收到PC发送的数据时进行判别。如果是宇符“#” 则回送宇符串“OK”;如果是其他宇符则回送宇符“*”。通信速率 为4800bps,单片机外接晶振频率为22.1184MHZ。
时间: 2024-02-03 12:15:19 浏览: 110
以下是基于STC89C52单片机的C语言代码,实现单片机与PC之间的通信:
```c
#include <reg52.h>
#define FOSC 22118400L
#define BAUDRATE 4800L
#define TH1_VALUE (256 - FOSC / BAUDRATE / 32)
void init_serial() {
TMOD &= 0x0F;
TMOD |= 0x20; // Timer 1, mode 2: 8-bit auto-reload
TH1 = TH1_VALUE;
TL1 = TH1_VALUE;
TR1 = 1; // Start timer 1
SM0 = 0; SM1 = 1; // Serial port mode 1: 8-bit asynchronous
REN = 1; // Enable receiver
}
unsigned char recv_serial() {
while (!RI); // Wait until a byte is received
RI = 0; // Clear receive interrupt flag
return SBUF; // Return received byte
}
void send_serial(unsigned char c) {
SBUF = c; // Send a byte
while (!TI); // Wait until the byte is sent
TI = 0; // Clear transmit interrupt flag
}
void main() {
unsigned char c;
init_serial();
while (1) {
c = recv_serial();
if (c == '#') {
send_serial('O');
send_serial('K');
} else {
send_serial('*');
}
}
}
```
该程序使用定时器1实现波特率发生器,将串口设置为异步模式1,启用接收和发送中断。在主循环中,通过 `recv_serial()` 函数接收PC发送的数据,判断是否为“#”字符,如果是则通过 `send_serial()` 函数发送“OK”字符串,否则发送“*”字符。
阅读全文