×
单片机 > 单片机程序设计 > 详情

51学习之外部中断

发布时间:2020-09-01 发布时间:
|
学习外部中断,因为不了解,直接粘了程序来执行。
void ISR0_Key() interrupt 0 using 1
{
 Speak1=~Speak1;            
}
 
 void ISR1_Key() interrupt 2 using 2
{
 Speak2=~Speak2;            
}  
 
void Main()
{    
     EA=1;          //全局中断开
     EX0=1;         //外部中断0开
     EX1=1;         //外部中断1开
     IT0=1;         //边沿触发,为0则为低电平触发
     IT1=0;         //边沿触发,为0则为低电平触发
     while(1);
}
 
执行结果好像有点乱。不太了解,边沿和电平触发的区别。从网上看了,能理解,可实际执行是不一样的。
1、在第1次扫描到键盘按下时,结果如前面我们说的一样,不论是低电平触发还是下降沿触发结果都会触发事件,这里触发时即指示灯点亮。然后程序继续运行……
2、当程序继续运行到第2次扫描键盘时按键还没放开,结果就不一样了。
低电平触发:触发条件依然为低电平,触发条件成立,那么执行事件,指示灯状态改变,此时指示灯由亮变灭;
下降沿触发:触发条件依然为低电平,下降沿触发条件不成立,那么不执行事件,指示灯维持原来的亮的状态。
 
呵呵,明天再研究吧!
还有就是中断处理程序的一些问题。
中断服务程序通过使用 interrupt 关键字和中断号(0 到 31)来实现中断服务程序处理的是哪一个中断。
using 关键字用来指定中断服务程序使用的寄存器组。用法是:using 后跟一个0 到3 的数,对应着 4 组工作寄存器。一旦指定工作寄存器组,默认的工作寄存器组就不会被压栈,这将节省 32 个处理周期,因为入栈和出栈都需要 2 个处理周期。

今天只试了进入中断这种方式。明天试下查询的方式,应该和定时器是一样的。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法