Proteus仿真51单片机串口接发数据实现单片机a按钮控制单片机b的led灯亮,单片机b按钮实现单片机a的led灯亮,c语言

时间: 2024-03-12 15:46:34 浏览: 14
下面是实现该功能的 C 语言代码示例: 单片机 A 代码: ```c #include <reg51.h> #define FOSC 11059200L // 单片机工作频率 #define BAUD 9600 // 串口波特率 #define TIMER_1MS (65536 - FOSC/12/1000) // 定时器计数初值,1ms 中断 sbit LED = P2^0; // 控制 LED 灯的引脚 sbit BTN = P3^0; // 按钮引脚 unsigned char code LED_ON = '1'; // 控制 B 单片机 LED 灯亮起的字符 unsigned char code LED_OFF = '0'; // 控制 B 单片机 LED 灯熄灭的字符 void init_timer(); // 初始化定时器 void init_serial(); // 初始化串口 void send_byte(unsigned char dat); // 发送一个字节数据 void main() { init_timer(); // 初始化定时器 init_serial(); // 初始化串口 while (1) { if (BTN == 0) // 按钮按下 { send_byte(LED_ON); // 发送控制 B 单片机 LED 亮起的字符 LED = 1; // 控制 A 单片机的 LED 灯亮起 while (BTN == 0); // 等待按钮释放 send_byte(LED_OFF); // 发送控制 B 单片机 LED 熄灭的字符 LED = 0; // 控制 A 单片机的 LED 灯熄灭 } } } // 初始化定时器 void init_timer() { TMOD |= 0x10; // 设置定时器 1 为模式 1(16 位定时器) TH1 = TIMER_1MS / 256; // 设置定时器初值 TL1 = TIMER_1MS % 256; ET1 = 1; // 允许定时器 1 中断 TR1 = 1; // 启动定时器 1 EA = 1; // 开启总中断 } // 定时器 1 中断服务程序,用于串口通信时的延时 void timer1_isr() interrupt 3 { static unsigned char cnt = 0; TH1 = TIMER_1MS / 256; // 重新设置定时器初值 TL1 = TIMER_1MS % 256; cnt++; if (cnt >= 10) // 10ms 延时 { cnt = 0; TF1 = 0; // 清除定时器 1 溢出标志 } } // 初始化串口 void init_serial() { SCON = 0x50; // 设置串口为模式 1,允许串口接收 TMOD |= 0x20; // 设置定时器 1 为模式 2(8 位自动重载定时器) TH1 = 256 - FOSC/12/32/BAUD; // 计算并设置波特率 TL1 = TH1; ES = 1; // 允许串口中断 } // 发送一个字节数据 void send_byte(unsigned char dat) { SBUF = dat; while (!TI); // 等待发送完成 TI = 0; } ``` 单片机 B 代码: ```c #include <reg51.h> #define FOSC 11059200L // 单片机工作频率 #define BAUD 9600 // 串口波特率 #define TIMER_1MS (65536 - FOSC/12/1000) // 定时器计数初值,1ms 中断 sbit LED = P2^0; // 控制 LED 灯的引脚 sbit BTN = P3^0; // 按钮引脚 unsigned char code LED_ON = '1'; // 控制 A 单片机 LED 灯亮起的字符 unsigned char code LED_OFF = '0'; // 控制 A 单片机 LED 灯熄灭的字符 void init_timer(); // 初始化定时器 void init_serial(); // 初始化串口 void send_byte(unsigned char dat); // 发送一个字节数据 void main() { init_timer(); // 初始化定时器 init_serial(); // 初始化串口 while (1) { if (BTN == 0) // 按钮按下 { send_byte(LED_ON); // 发送控制 A 单片机 LED 亮起的字符 LED = 1; // 控制 B 单片机的 LED 灯亮起 while (BTN == 0); // 等待按钮释放 send_byte(LED_OFF); // 发送控制 A 单片机 LED 熄灭的字符 LED = 0; // 控制 B 单片机的 LED 灯熄灭 } } } // 初始化定时器 void init_timer() { TMOD |= 0x10; // 设置定时器 1 为模式 1(16 位定时器) TH1 = TIMER_1MS / 256; // 设置定时器初值 TL1 = TIMER_1MS % 256; ET1 = 1; // 允许定时器 1 中断 TR1 = 1; // 启动定时器 1 EA = 1; // 开启总中断 } // 定时器 1 中断服务程序,用于串口通信时的延时 void timer1_isr() interrupt 3 { static unsigned char cnt = 0; TH1 = TIMER_1MS / 256; // 重新设置定时器初值 TL1 = TIMER_1MS % 256; cnt++; if (cnt >= 10) // 10ms 延时 { cnt = 0; TF1 = 0; // 清除定时器 1 溢出标志 } } // 初始化串口 void init_serial() { SCON = 0x50; // 设置串口为模式 1,允许串口接收 TMOD |= 0x20; // 设置定时器 1 为模式 2(8 位自动重载定时器) TH1 = 256 - FOSC/12/32/BAUD; // 计算并设置波特率 TL1 = TH1; ES = 1; // 允许串口中断 } // 发送一个字节数据 void send_byte(unsigned char dat) { SBUF = dat; while (!TI); // 等待发送完成 TI = 0; } // 串口接收中断服务程序 void serial_isr() interrupt 4 { static unsigned char dat = 0; static unsigned char cnt = 0; if (RI) // 接收到数据 { RI = 0; dat = SBUF; if (dat == LED_ON) // 收到控制 B 单片机 LED 亮起的字符 { LED = 1; // 控制 B 单片机的 LED 灯亮起 } else if (dat == LED_OFF) // 收到控制 B 单片机 LED 熄灭的字符 { LED = 0; // 控制 B 单片机的 LED 灯熄灭 } } } ```

相关推荐

最新推荐

recommend-type

基于AT89C51单片机的交通灯控制系统设计与仿真

系统除基本交通灯功能外,还具有通行时间手动设置、可倒计时显示、急车强行通过、交通特殊情况处理等相关功能,实验采用AT89C51单片机为控制芯片,采用"Proteus+KeilμVision2"对交通灯控制系统进行了仿真.
recommend-type

基于单片机的LED汉字显示屏的设计与Proteus仿真

本文 基于单片机的LED汉字显示屏的设计与Proteus仿真,虽然 只使用了一块16×16LED点阵,电路简单,但是已经包涵了LED汉字滚动显示屏的电路基本原理、基本程序和Proteus软件仿真,只要扩展单片机的10接口,并增加...
recommend-type

51单片机交通灯设计(汇编语言)

PDF报告里含有汇编代码和proteus仿真图,中断实验,参照实验电路,设计交通灯控制系统。模拟交通信号灯控制:一般情况下正常显示,东西-南北交替放行,各方向通行时间为 30 秒。有救护车或警车到达时,两个方向交通...
recommend-type

基于51单片机的超声波避障小车设计(含Proteus仿真)

超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。 这次主要给大家分享其Proteus仿真部分。 涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
recommend-type

基于AT89C51单片机的LED汉字显示屏设计方案

研究了基于AT89C51单片机16×16 LED汉字滚动显示屏的设计与运用Proteus软件的仿真实现。主要介绍了LED汉字显示屏的硬件电路、汇编程序设计与调试、Proteus软件仿真等方面的内容,本显示屏的设计具有体积小、硬件少、...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。