分享

51学习之外部中断

 共同成长888 2016-05-28
        学习外部中断,因为不了解,直接粘了程序来执行。
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 个处理周期。

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多