用户工具

站点工具


侧边栏

抱歉,您没有权限增加页面
4.单片机入门教程:6.外部中断触发

单片机入门教程之外部中断触发

一:实验现象
程序正常执行中,流水灯正常流动,通过按键触发外部中断后,流水灯暂停工作,进入中断灯闪烁一次,然后继续接着刚刚暂停的那个灯继续正常流动。

二:实验原理
当CPU正在处理某件事的时候,外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断,请示CPU中断的请求源称为中断源。图解:

微型机的中断系统一般允许多个中断源,当几个中断同时向CPU请求中断,这就存在了CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每个中断源有一个优先级别。CPU总是先响应优先级别最高的终端请求。
当CPU正在处理一个中断源请求时(执行相应的中断服务程序),发声了另一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程成为中断嵌套。在这里,我们只演示一级中断请求。对于中断嵌套,优先级问题,以后你写一些项目遇到的时候再具体琢磨吧。

STC12C5A系列单片机提供了10个中断请求源,中断源名称及优先级如下表:

我们首先来看下外部中断,上图可以看到,外部中断源有两个,一个是外部中断0(INT0)和外部中断1(INT1)。外部触发方式可以为下降沿或低电平触发,INT0触发管脚P3.2,INT1触发管脚为P3.3,就是说,程序中把外部中断相关寄存器设置好以后,在此管脚上出现低电平就会触发中断进入程序中的中断服务函数去执行里面的内容。

再看程序之前,先看原理图,我们把两个外部中断的管脚连在了五向按键的上键和中键

三:代码演示(外部中断INT0,低电平触发,按五向按键的中键接通低电平即触发)

注:本代码工程文件在stc51 discovery开发板【实验例程】【入门实验】【实验十六】

四:关键解说
先来看看和外部中断相关的寄存器有哪些,要使用外部中断就得先找到和外部中断相关的寄存器,然后往寄存器中写初始化值配置外部中断。

图中可以看到,和中断有关的寄存器有好几个,中断的优先级寄存器先不去理会,我们要配置的只有两个,IE和TCON寄存器,这两个寄存器控制着外部中断开关和触发类型。
来看中断初始化的部分,第38行,IT0=0;此句为配置中断的触发类型。图中看出IT0属于TCON寄存器中的最低位B0,打开手册156页找到TCON寄存器相关位的功能如下:

我们把IT0=0则设为外部低电平触发,同样如果IT0=1为下降沿触发。这些都配置好了,还得需要把外部中断功能给打开才能工作,看第39行:EX0=1;这句为允许外部中断0中断。EX0=0则为禁止外部中断0中断。第40行:EA=1;打开全局中断,EA=0;关闭所有中断。EA是MCU所有中断的总开关,EX和EA在中断使能寄存器IE中,IE寄存器功能如下:

外部中断初始化只需要这几步就可以了,再看第46行:void INT0() interrupt 0 这个为外部中断0入口函数,其中INT0(),可以自己定义名字,interrupt 0,这是中断查询号为固定格式,中断查询号就是中断优先级的次序号,各中断查询号分别如下:

上面为外部中断0实验,外部中断1怎么使用呢?很简单,只要把上面外部中断0的初始化中的语句IT0和EX0,修改为IT1和EX1,中断入口改成void INT0() interrupt 2就可以了。具体请看IE和TCON寄存器中的IT1和EX1配置位。关键代码如下:

注:本代码工程文件在stc51 discovery开发板【实验例程】【入门实验】【实验十七】

小结:想打开并使用单片机内部功能模块,如:定时器,ADC,串口等。无非就是找到相关功能的寄存器然后配置一下,那个功能就可以使用了,这些寄存器在芯片数据手册中都可以分析找到。用单片机控制外围芯片也是如此。

4.单片机入门教程/6.外部中断触发.txt · 最后更改: 2017/03/05 22:16 由 wawooo