图3-14所示仿真电路实现的功能与例3.8中用K1~K5控制两位数码管的开关、加减与清零操作实现的功能相同,但在程序设计方法上却有很大差异。例3.8采用轮询法检测按键,本例所有按键均通过RB4~RB7端口电平变化中断处理。
图3-14 RB4~RB7端口电平变化中断控制数码管开关与加减显示
(一)RB7:RB4电平变化中断
PB端口的RB7:RB4引脚具有电平变化(或称状态变化)触发中断特征,要注意只有引脚方向配置为输入时才会在输入电平(状态)变化时触发此类中断。从RB7:RB4引脚输入的值将与最近的旧的锁存值进行比较,RB7:RB4中任何一个引脚输入与原锁存值不匹配都将触发端口变化中断(port change interrupt),并置位INTCON寄存器的第0位(RBIF)。RB7:RB4电平变化中断能将设备从睡眠状态唤醒。在中断服务程序中的两种动作均可清除中断:一是读/写PORTB,端口状态变化导致的“不匹配”将使RBIF置位,但读PORTB将结束“不匹配条件”;二是清除RBIF标志位。
(二)本例中断程序设计
主程序为使能PB端口电平变化中断,首先完成了如下配置:
连接在RB4~RB7的4个按键在电平变化时将触发状态变化中断,按键的每一次“Key Press”操作,包括“按下”(DOWN)与“释放”(UP),将共计触发两次电平变化中断(而不是一次中断)。可见,每次“按下”或“释放”按键都将进入中断服务程序。由于本例各项操作定义为“按下”按键时执行,“释放”后不执行,故而在进入中断服务程序后,源程序首先延时消抖,然后通过if语句检测相应按键是否按下(输入是否为0),在确认按键按下后再进入不同分支进行按键处理。虽然在判断按键是否按下时要读PORTB(RB7:RB4),它使得不匹配状态被终止,但由于中断已经进入,故不会影响程序执行。
① 设计程序实现篮球比赛的电子计分牌功能,每次可以计1分、2分或3分,且具备撤销最近一次分数输入功能。
② 完成后续有关EEPROM案例调试后,继续改进上述程序,使意外掉电后重启系统时,能从EEPROM中恢复最近保存的成绩数据。