任务三,串口知识,电脑给单片机发消息,单片机的lcd屏上显示ok。单片机给电脑发消息,在stc-isp上显示ok 普中五一单片机(#include <REGX52.H>)实行上述代码的程序
时间: 2024-10-24 09:08:20 浏览: 19
在使用STC-ISP单片机通过串口通信实现双向信息交换的C语言程序中,我们需要使用到Serial Port(串口)功能。以下是基本步骤:
1. **头文件** (`header.h`):
```c
#include <REGX52.H>
#include <USART.h> // STC-ISP串口库
#define LED_PIN P1.0 // LCD显示OK时的LED状态
```
2. **初始化串口函数** (`uart_init.c`):
```c
// uart_init.c
void init_uart(void) {
SCON = 0b00000010; // 设置SM0=1开启串行工作方式1
BRGH = 1; // 设置波特率较高位
SPBRG = Fosc / (baud_rate * 2) - 1; // 根据需要调整波特率
}
```
3. **发送接收函数** (`serial_communication.c`):
```c
// serial_communication.c
void send_data(char data[]) {
while (!TI); // 等待发送缓冲区空闲
TH1 = (uint8_t)(((unsigned char)data[0] << 8) & 0xFF00);
TL1 = (uint8_t)(data[0]);
TI = 1; // 发送中断标志置位
}
void receive_data(char* data) {
while (!RI); // 等待接收缓冲区中有数据
*data = (char)TH1;
RI = 0; // 接收中断标志清零
}
```
4. **LCD显示和LED控制函数** (`lcd_led.c`):
```c
// lcd_led.c
void display_OK(void) {
LCD_Init(); // 初始化LCD并显示"OK"
toggle_LED();
}
void toggle_LED(void) {
if (LED_PIN)
LED_PIN = 0;
else
LED_PIN = 1;
}
```
5. **主函数** (`main.c`):
```c
// main.c
init_uart(); // 初始化串口
while (1) {
if (receive_data("OK")) { // 从电脑接收到"OK"
display_OK();
send_data("From MCU"); // 单片机回复"From MCU"
} else if (send_data("To Computer")) { // 单片机向电脑发送"To Computer"
while (!receive_data("Received")); // 等待确认收到
display_OK();
}
}
```
阅读全文