51单片机中断程序问题。

程序:
跟郭天祥视频教程中断那段一样。写进单片机以后除了数码管数字变换以外,led1也亮,但是没中断。P3.2口输入低电平能中断。
用Keil调试程序,程序竟然连中断服务里面的led1=0有运行。
求助,程序哪里错了?

#include<reg52.h>
sbit wela=P2^7;
sbit dula=P2^6;
sbit led1=P1^1;
sbit st=P3^2;
unsigned char num;
unsigned code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(unsigned char y)
{
unsigned int a,b;
for(a=y;a>0;a--)
for(b=0;b<500;b++);
}
void main()
{
st=0;
EA=1;
EX0=1;
IT0=1;
wela=1;
P0=0x00;
wela=0;
while(1)
{
for(num=0;num<16;num++)
{
dula=1;
P0=table[num];
dula=0;
delay(200);
}

}
}

void stop(void) interrupt 0
{
led1=0;
}
1L 2L
SORRY 那个ST是我自己后来加上去的,把那个删除,还是这样。。
而且我的情况是不中断,但是led1会亮。用调试看到运行的时候连led1=0这一条都会执行。

当IT0=0;
我的P3.2口输入低电平其实并没有一直中断只是程序运行速度变慢了。不知道怎么回事。

第1个回答  2019-11-29
interrupt

中断的意思,后面的数字是
入口,就像门牌号。
号码排序

51单片机默认中断优先级安排:
外中断0
最高,排号为
0,
定时器0
次高,排号为1,
外中断1
第三,排号为2,
定时器1
第四,排号为3,
串口中断较低,排号为4,
定时器2,排号为5(52系列单片机才有)
第2个回答  2010-12-04
程序没有错!这样问题可能是编译错误吧,有时我在写的时候用 while if时,会莫名运行出错,只要换个写法,可是多空指令,就能正确。
第3个回答  2010-12-04
你的程序一开始就把中断口拉低了,中断触发方式又是电平触发,肯定能进中断啊
第4个回答  2010-12-04
你在主函数里把ST置0了,引起中断,你把ST置1试试看。
第5个回答  2010-12-04
你这个进入中断后就只有led1=0,后面有没关闭,那么进入一次中断后led1之后不是会一直亮啊?
相似回答