| 谢谢各位 |
| 楼上说的对,就是没有理解中断在硬件上面的意义,才会写出这么不符合逻辑的软件。 |
|
中断,当启动位打开,CNT计数溢出的时候,会触发溢出标志位置位,进而送入中断系统(比如日常生活中,我们在做一件事,突然烧水壶开了,我们即要先暂时放弃做目前的事,转而去处理烧开水这个中断事件,当处理完成过后,又返回来继续处理之前的事) 而这里的举例:处理烧开水即中断程序;之前所做的事即main函数里面的主程序#include<reg52.h> sbit LED=P1^0; sbit buzzer=P2^0; void delay(void); void main(void) { IT0=1;//设置外部中断触发方式为下降沿触发 EX0=1;//对应的中断允许位打开 EA=1;//总中断打开 PX0=0;//IE0低优先级 buzzer=0;//开启蜂鸣 delay(); buzzer=1;//关闭蜂鸣 while(1) { LED=0;//点亮LED delay(); LED=1;//熄灭LED delay(); } } //中断服务程序 void INT0_ISR(void) interrupt 0 { //IE0=0;对应的中断标志位是硬件自动清零,所以无需再软件清零 buzzer=0;//开启蜂鸣 delay(); buzzer=1;//关闭蜂鸣 } void delay(void) { unsigned char i,j; for(i=0;i<200;i++) { for(j=0;j<200;j++){;} } } |
|
定时器初始化里面开启中断即可,程序主循环里面不需要调用中断服务函数。换句话说,需要调用,那么中断还有什么意义? |
|
中断不用声明; 中断不应该放在main中,更不应该放在while(1)里。 |