用Keil实现甲乙两机串口通信:数据正误决定指示灯亮灭
要实现甲乙两机的通信,并在乙机接收到正确数据时点亮绿灯并向甲机发送信号,甲机接收到信号时亮起指示灯,如果乙机接收到错误数据则亮起红灯,甲机指示灯熄灭,可以按照以下步骤进行操作: 1. 准备好两个单片机开发板,分别作为甲乙两机,并使用串口通信进行数据传输。 2. 在甲机上编写程序,发送数据给乙机,代码示例: ```c #include <reg51.h> void send_data(unsigned char data){ SBUF = data; // 将数据放入串口缓存寄存器发送 while(!TI); // 等待发送完成 TI = 0; // 清除发送完成标志位 } void main(){ unsigned char data = 0xA5; // 要发送的数据 // 初始化串口 TMOD |= 0x20; // 设置定时器1为工作方式2 TH1 = 0xFD; // 波特率9600 TCON = 0x40; // 启动定时器1 SCON = 0x50; // 设置串口为模式1,允许接收 ES = 1; // 允许串口中断 send_data(data); // 发送数据给乙机 while(1); } void UART_ISR() interrupt 4{ if(RI){ // 串口接收到数据 unsigned char received_data = SBUF; // 获取接收到的数据 if(received_data == 0x55){ // 接收到正确的数据,点亮绿灯 P1 = 0xFE; // 向甲机发送信号 send_data(0x66); } else{ // 接收到错误的数据,点亮红灯 P1 = 0xFD; } RI = 0; // 清除接收完成标志位 } } ``` 3. 在乙机上编写程序,接收甲机发送的数据并进行判断,代码示例: ```c #include <reg51.h> void send_data(unsigned char data){ SBUF = data; // 将数据放入串口缓存寄存器发送 while(!TI); // 等待发送完成 TI = 0; // 清除发送完成标志位 } void main(){ // 初始化串口 TMOD |= 0x20; // 设置定时器1为工作方式2 TH1 = 0xFD; // 波特率9600 TCON = 0x40; // 启动定时器1 SCON = 0x50; // 设置串口为模式1,允许接收 ES = 1; // 允许串口中断 while(1); } void UART_ISR() interrupt 4{ if(RI){ // 串口接收到数据 unsigned char data = SBUF; // 获取接收到的数据 if(data == 0x66){ // 接收到甲机发送的信号,点亮指示灯 P1 = 0xFE; // 向甲机发送确认信号 send_data(0x55); } RI = 0; // 清除接收完成标志位 } } ``` 4. 在甲机上连接一个灯到P1.0引脚,用于指示灯;在乙机上连接一个绿灯到P1.0引脚,用于接收正确数据指示;连接一个红灯到P1.1引脚,用于接收错误数据指示。 通过上述步骤,就可以实现甲乙两机的通信,并根据接收到的数据点亮相应的指示灯。 ######[AI写代码神器 | 1547点数解答 | 2024-05-26 21:15:46]
- Keil编译报错:找不到core_cm3.h文件的原因及解决办法(字节豆包 | 666点数解答 | 2025-11-12 18:26:21)240
- Keil MDK编译报错“无法打开 core_cm3.h”,解决办法及注意事项全揭秘!(字节豆包 | 560点数解答 | 2025-11-12 18:31:47)93
- Java代码实现从JSON数据中提取ID,涉及“数据”与“项目 - 知识库”结构(字节豆包 | 603点数解答 | 2025-04-15 22:48:51)252
- C++ 实现:计算一排鹅与最高、最矮鹅的身高差及代码详解(字节豆包 | 549点数解答 | 2025-11-16 20:19:06)102
- 编程揭秘:计算 𝑛! 在 𝑃 进制下末尾零个数的方法与代码实现(DeepSeek | 549点数解答 | 2026-01-11 17:49:54)61
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)369
- Python 字典基本操作全解析:创建、查找与遍历示例( | 313点数解答 | 2024-05-06 09:52:01)389
- C++ 高精度算法:求解 2+2*2+… 累加之和,末项 2 的个数由输入 n 决定 (字节豆包 | 441点数解答 | 2025-09-26 19:35:18)106
- 贵州鑫盛科技:人才现状、困境与未来发展之路(字节豆包 | 851点数解答 | 2025-09-28 15:57:57)107
- 蛐蛐国蚯蚓问题的C++解决方案(字节豆包 | 1271点数解答 | 2026-03-29 19:26:12)14
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)340
- Visual C++ 6.0:实现 n×n 矩阵最大最小元素所在行对调及输出(字节豆包 | 648点数解答 | 2024-11-02 10:23:57)318