微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51学习之外部中断

51学习之外部中断

时间:11-23 来源:互联网 点击:
学习外部中断,因为不了解,直接粘了程序来执行。

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 个处理周期。

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


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top