EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
继续说按键的事。昨天说的是扫描检测,今个说一下中断检测。先插播一个小故事~~ 当年我和凯凯学 单片机的时候,我用扫描检测的方法做的项目,他用中断检测的方法做的项目。当我俩坐一起交流按键检测的方式时,他火了,直接跳起来跟我吼:你不用中断怎么检测? 当时我就意识到他可能陷入了只能用中断的误区,然后就乐呵呵的说:用扫描啊~ 他继续吼,我继续乐,我俩就这样陷入了死循环。终于都累了,然后把程序和原理给他看,了解~ 在STC89C52单片机上,具有外部中断功能的引脚有两个:P3.2 –INT0 和 P3.3-INT1。上电默认的情况下,他们是普通IO引脚;当配置好相关寄存器之后,他们就变成了具有中断检测功能的引脚。 外部中断相关的寄存器有两个:TCON 和 IE。图示如下: 9 Y. \3 J! ~, N* R! [' \
特殊功能寄存器IE / g2 `# ]. G8 b( \3 F
IT0和IE0对应P3.2引脚的中断功能配置,IT1 和 IE1对应P3.3 引脚的中断功能配置。 当IT0 = 0 的时候,该中断的触发方式为低电平触发。 当IT0 = 1 的时候,该中断的触发方式为下降沿触发。 当中断被触发时,IE0 被自动置一,当CPU相应中断,处理中断程序时,IE0 自动清零。 2 h3 T- k4 C8 x( O+ y) _& _
IT1 和 IE1 同理,不做解释。
$ W/ c a& C* K& I* x EA是什么?它是这个单片机中断功能的总开关!只有当它等于1的时候,各个中断的请求才可以被允许,不然的话都是被屏蔽的。 ES是串口中断允许位。 ET1是定时/计数器1溢出中断允许位。 ET0是定时/计数器0溢出中断允许位。 EX1是外部中断1允许位。 EX0是外部中断0允许位。 3 L: R0 ~0 R) Q( z! y
就是说,当我们想用外部中断0的时候,必须总中断(EA)和外部中断(EX0)同时打开才能用,缺一不可! 这些寄存器的资料那里来的? 上官网找器件手册,这是最权威的文档。找的过程中,既锻炼了查找资料的能力,又锻炼了阅读资料的能力,这在以后的工作中是必备的。 " l1 U3 x' D2 l- o9 ^& s
好了,上程序。依旧是按键控制LED翻转,这次是用中断触发的方式,下降沿触发。 对了,留个思考题 interrupt 后面的0 和using 后面的1分别是什么意思?
2 q' T6 z- L4 L4 f
( K) _% g) g, K2 ~4 [9 | % Y) G2 H5 P2 o: d
|