系统电路图如下图所示:
从图中可以看出:总共5个按键其中有四个按键(KEY1-KEY4)分别接单片机的四个中断源(INT1、INT0、T0、T1),用于抢答的按键。按键KEY5用于单片机复位。P1口接一个共阴极的七段数码管用来显示抢答的结果。当单片机开机或复位后数码管显示O表示没有人按下按键并等待中断,此时如果有选手按键单片机便响应中断执行相应的中断程序使数码管显示相应的数字。当选手开始按键时只会有一个选手最先按下按键即此时只有一个按键对单片机产生中断,所以单片机内不存在中断优先级的问题,并且单片机响应了第一个按下的按键产生的中断后马上关闭全局中断此后所有的中断单片机都不响应,只有当按下按键KEY5使单片机复位后又开始下一轮的抢答。
单片机的程序设计思想如下:
开机时给P1口赋值使数码管显示O设置定时器T0,T1的工作方式并赋初值设置INTO,INTl的触发方式(下跳延触发)打开所有的中断等待中断。当有一个按键按下时单片机响应中断,进入相应的中断服务程序,进入中断服务程序后的第一步是关闭全局中断,然后给P1赋相应的值使数码管显示相应的数字,最后中断返回。
在程序设计中有两个主要的问题
1.T0,T1中断的设置
要把定时器设置成外部中断的方式,当外部有一个下跳延时即能产生中断。因此在赋定时器初值时必须赋为:计数器最大值-1,只有这样当外部产生一个下跳延时计数器加1便计满产生中断。在本系统中将定时器T0,T1设置为工作方式1,因此计数初值为213—1=8191。
2.INT0,INTI的触发方式
INTO、INT1的触发方式主要是由按键决定的,在本系统中当没按下按键时为高电平,按下按键时为低电平,因此按按键即产生一个下跳延。所以INT0、INT1必须设置为下跳延触发方式。