EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
继续说按键的事。昨天说的是扫描检测,今个说一下中断检测。先插播一个小故事~~ 当年我和凯凯学 单片机的时候,我用扫描检测的方法做的项目,他用中断检测的方法做的项目。当我俩坐一起交流按键检测的方式时,他火了,直接跳起来跟我吼:你不用中断怎么检测? 当时我就意识到他可能陷入了只能用中断的误区,然后就乐呵呵的说:用扫描啊~ 他继续吼,我继续乐,我俩就这样陷入了死循环。终于都累了,然后把程序和原理给他看,了解~ 在STC89C52单片机上,具有外部中断功能的引脚有两个:P3.2 –INT0 和 P3.3-INT1。上电默认的情况下,他们是普通IO引脚;当配置好相关寄存器之后,他们就变成了具有中断检测功能的引脚。 外部中断相关的寄存器有两个:TCON 和 IE。图示如下: $ m# t" F+ K6 r. M( b2 d( J7 |
特殊功能寄存器IE - A( T5 t E2 z
IT0和IE0对应P3.2引脚的中断功能配置,IT1 和 IE1对应P3.3 引脚的中断功能配置。 当IT0 = 0 的时候,该中断的触发方式为低电平触发。 当IT0 = 1 的时候,该中断的触发方式为下降沿触发。 当中断被触发时,IE0 被自动置一,当CPU相应中断,处理中断程序时,IE0 自动清零。 ) ?, `+ H' h; P' E5 J' e8 c! O2 G- i6 }
IT1 和 IE1 同理,不做解释。 ( H& h% S) ]3 N" p& R
EA是什么?它是这个单片机中断功能的总开关!只有当它等于1的时候,各个中断的请求才可以被允许,不然的话都是被屏蔽的。 ES是串口中断允许位。 ET1是定时/计数器1溢出中断允许位。 ET0是定时/计数器0溢出中断允许位。 EX1是外部中断1允许位。 EX0是外部中断0允许位。 0 x0 D* G7 t* a+ ~. j- g
就是说,当我们想用外部中断0的时候,必须总中断(EA)和外部中断(EX0)同时打开才能用,缺一不可! 这些寄存器的资料那里来的? 上官网找器件手册,这是最权威的文档。找的过程中,既锻炼了查找资料的能力,又锻炼了阅读资料的能力,这在以后的工作中是必备的。 ( ?" S4 g. l4 `
好了,上程序。依旧是按键控制LED翻转,这次是用中断触发的方式,下降沿触发。 对了,留个思考题 interrupt 后面的0 和using 后面的1分别是什么意思?
5 x3 ?& r# F$ p# {, j! _; {
3 j, q9 D8 X: B: H6 v: p1 B
+ N- p* w" X$ o) | |