keil编程用proteus中仿真外部中断问题

proteus中仿真外部中断信号持续低电平时,程序仍然在继续执行,只是速度变慢了,是怎么回事

程序:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar num;
uchar code table[]={
0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d,
0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c,
0x39 , 0x5e , 0x79 , 0x71 , 0x00};
sbit dula=P2^6;
sbit wela=P2^7;

void delay();
void main()
{
EA=1;
EX0=1;
wela=1;
P0=0x00;
wela=0;
while(1)
{

for(num=0;num<16;++num)
{
P1=0xff;
dula=1;
P0=table[num];
dula=0;
delay();

}
}

}
void delay()
{
uint x,y;
for(x=150;x>1;x--)
for(y=450;y>1;y--);
}
void exter0() interrupt 0
{
P1=0x00;
}

仿真主要部件:其中csda是连接的外部中断0.。。

主程序运行正常,但是中断后,主程序数字还在慢慢的跳,速度很慢
我那个去。。。。
自己弄出来了。。。。
在外部中断中加一个无线循环就行了
while(1);
但是为什么呢。。。。
中断程序运行完之后,是进行了什么
持续的中断信号起了什么作用,对有限的中断程序有什么用。。。
难道是在主程序了中断程序之间不停的跳转??
我去。。。
我太有才了
又自己搞明白了。。。

还是不行啊。。。。。改了之后又跳不出中断了。。。

你这是在自问自答啊,还来这里提问什么呀!可最后还是解决不了吧。
类似的用按钮作外部中断信号的,一定要用下降沿有效申请中断才行的,这样才保证按下按钮只中断一次。而你用电平中断,只要按钮不释放就会不断地中断,这样在主程序和中断程序之间不停的转换,当然主程序速度就要慢了。
而在中断程序中加无限循环是削足适履的作法,肯定是不行的,这样会只执行一次中断,但也跳不出中断了吧。
设置用下降沿中断,在
EA=1;
EX0=1;
后面加一条就可以了,IT0=1。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-09-21
要实现你的目的,可在中断这样写:
void inter() interrupt 0
{
while(csda==0){
XXXXXX(想执行的语句);
}
}
通过检测P3.2口电平高低,判断按键是否弹起。
相似回答