在PROTEUS上采用双单片机A和B,采取TXD连接另一个单片机的RXD,建立一对一通信A外接4个按键,编号1~3;B外接一个数码管,平时显示0。 A按键后,B显示相应键号0.3秒;
进阶要求1:A的TXD与B的RXD间加入按键开关K,通过K的ON/OFF来控制通信连接的有效和无效;
运行中,K由ON改为OFF,通信无效时,B不响应A的按键表示通信未建立;
进阶2:通信无效时,B显示9,表示通信无效;运行中K由OFF改为ON,系统自动回复正常
1,首先考虑资源分配
波特率设置要用定时器1自动重装载模式。
定时器1用于产生10ms中断
定时器2用来产生20ms中断
故可选用89c52单片机
2:主函数完成3个定时器初始化函数,之后在while(1)休眠或啥也不干。
3:定时器2中断服务函数:
自动重装载模式不需要重置本定时器
按键扫描函数获取键号,若无按键键号为0
重置并启动超时定时器(tim0)
根据S_OK状态点亮LED(S_OK=0时点亮)
4:接收中断模块
S_OK置1
关闭超时定时器
5:10ms定时中断模块
S_OK=0
关闭超时定时器
接收B板模块
同样需要3个定时器
1:main函数中三个定时器初始化
2:接收中断
直接显示键号,开启0.3s定时器
重置启动超时定时器
发送信息给A板
3:0.3s定时中断
关闭本定时器
显示0
4:超时中断函数
S_OK=0
数码管显示9
关闭本定时器
关闭0.3s定时器
发送A板主函数文件程序示例。完整程序和proteus图见附件。
单片机源程序如下:
|