分类: LINUX
2010-12-08 11:19:26
关于51外部中断的几点说明
1
2、当然,P3口除了作为普通的I/O口线之外,他还可具有更有价值的第二功 能,例如,P3.2/P3.3对应外部中断0,INT0/1,INT1。
3、外部输入中断源INT0和INT1,由中断控制寄存器TCON的 IT1(TCON.2)和IT0(TCON.1)分别控制外部输入中断1和中断0的中断触发方式。若为0,则外部输入中断控制为电平触发方式;若为1,则 控制为边沿触发方式。
4、我们这里只谈谈电平触发的方式。在引脚上的电平变化也会触发外部中断的发生。上面已经说过,外部中断可选择采用上升沿触发、下降沿触发以及电平变化(由高变低或由低变高)和低电平触发等方式,无外部高电平触发方式。
5、如果选择低电平方式触发外部中断时应特别注意:引脚上的低电平必须一直保持到当前一条指令执行完成后才能触发中断,只要中断引脚的输入引脚保持低电平,那么将一直触发产生中断;低电平中断并不置位中断标志位,即外部低电平中断 的触发不是由于中断标志位引起的,而是外部引脚上电平取反后直接触发中断(当然需要开放全局中断允许)。因此,在使用低电平触发方式时,中断请求将一直保持到引脚上的低电平消失为止。正因为如此,那么在低电平中断服务程序中,应有相应的操作命令,控制外部器件释放或取消加在外部引脚上的低电平。
下面是本人使用51单片机的一点经验,写出来分享,请批评指正。
51单片机的外部中断有两种触发方式可选:电平触发和边沿触 发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期 检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。
这个原理很好理 解。但应用时需要特别注意的几点:
1) 电平触发方式时,中断标志寄存器不锁存中断请求 信号。也就是说,单片机把每个机器周期的S5P2采 样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源 (产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执 行。
2) 边沿触发方式时,中断标志寄存器锁存了中断请 求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响 应并转向该中断服务程序时,由硬件自动清除。因此当CPU正 在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。
3) 中断标志可以手工清除。一个中断如果在没有得到 响应之前就已经被手工清除,则该中断将被CPU忽 略。就如同没有发生一样。
4) 选择电平触发还是边沿触发方式应从系统使用外部中断的目的上去考虑,而不是如许多资料上说的根据中断源信号的特性来取舍。比如,有的书上说(《Keil C51使 用技巧及实战》),就有类似的观点。