单片机外部中断设置方法及低电平中断问题的思考(2)
- UID
- 1029342
- 性别
- 男
|
单片机外部中断设置方法及低电平中断问题的思考(2)
中断允许控制 CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU中断允许(总允许)位。
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:
中断应用的具体例子:
void main()
{
EA = 1; //开总中断
EX0 = 1; //外部中断0允许位
IT0 = 0; //0为低电平触发, 1下降沿触发。单片机复位后默认该寄存器为0,故设置为 低电平 触发时此句可省略
......................
while(1)
{
}
}
void int0() interrupt 0
{
..........
中断需要做的事情
}
低电平中断,出现跳回主函数执行的问题:
当INT0设置为低电平触发时,并且该引脚一直保持低电平,则在置于低电平的时候,响应中断,点亮LED等,执行完中断服务程序后,系统返回while循环,执行响应中断前的任务,因为是电平触发,又一次进入中断、中断服务程序、返回,重复这个顺序。这种中断叫做咬尾中断,中断来临压栈、中断服务程序执行完出栈返回主循环,连续两个中断处理之间有时间间隔,这个间隔时间主程序在运行,因为主程序每次只执行很短的时间,所以你看到的现象就是缓慢变化。
也就是说,每次中断执行完毕,返回主函数会执行主函数中的一条以上指令,然后再次相应中断,进入中断,执行中断服务函数,返回,如此重复执行。主函数中的每条命令会,一次执行下去,只是执行速度会慢了很多。
外部中断边沿触发和电平触发的区别:
下降沿触发:当从高至低电平转变时,触发产生;低电平保持多久都只产生一次。所以,边沿触发适合与以负脉冲形式输入的外部中断请求。
低电平触发:那么在低电平时间内中断一直有效;因此如果在电平没有恢复之前中断程序就已经执行完成从而退出,那么会在退出后又再次进入中断;但只要中断没有退出是不会重复触发的。所以,电平触发方式适合于外部中断以低电平输入而且中断服务能清除外部中断源的情况(实际中通常采用这样的做法:在中断退出前关闭中断,等后面恰当时机再打开)。 |
|
|
|
|
|