接着昨天,继续说按键的事。昨天说的是扫描检测,今个说一下中断检测。先插播一个小故事~~ 当年我和凯凯学单片机的时候,我用扫描检测的方法做的项目,他用中断检测的方法做的项目。当我俩坐一起交流按键检测的方式时,他火了,直接跳起来跟我吼:你不用中断怎么检测? 当时我就意识到他可能陷入了只能用中断的误区,然后就乐呵呵的说:用扫描啊~ 他继续吼,我继续乐,我俩就这样陷入了死循环。终于都累了,然后把程序和原理给他看,了解~ 在STC89C52单片机上,具有外部中断功能的引脚有两个:P3.2 –INT0 和 P3.3-INT1。上电默认的情况下,他们是普通IO引脚;当配置好相关寄存器之后,他们就变成了具有中断检测功能的引脚。 外部中断相关的寄存器有两个:TCON 和 IE。图示如下: 特殊功能寄存器IE IT0和IE0对应P3.2引脚的中断功能配置,IT1 和 IE1对应P3.3 引脚的中断功能配置。 当IT0 = 0 的时候,该中断的触发方式为低电平触发。 当IT0 = 1 的时候,该中断的触发方式为下降沿触发。 当中断被触发时,IE0 被自动置一,当CPU相应中断,处理中断程序时,IE0 自动清零。 IT1 和 IE1 同理,不做解释。 EA是什么?它是这个单片机中断功能的总开关!只有当它等于1的时候,各个中断的请求才可以被允许,不然的话都是被屏蔽的。 ES是串口中断允许位。 ET1是定时/计数器1溢出中断允许位。 ET0是定时/计数器0溢出中断允许位。 EX1是外部中断1允许位。 EX0是外部中断0允许位。 就是说,当我们想用外部中断0的时候,必须总中断(EA)和外部中断(EX0)同时打开才能用,缺一不可! 这些寄存器的资料那里来的? 上官网找器件手册,这是最权威的文档。找的过程中,既锻炼了查找资料的能力,又锻炼了阅读资料的能力,这在以后的工作中是必备的。 好了,上程序。依旧是按键控制LED翻转,这次是用中断触发的方式,下降沿触发。 |