为什么gnd和P3.2连接就会停止程序
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dx=P2^6;
sbit wx=P2^7;
sbit d1=P1^0; //定义小灯
uchar aa;
uchar code numtable[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
void main()
{
EA=1; //开总中断
EX0=1; //开外部中断0
while(1)
{
if (aa==16)
aa=0; //当加到16时,从新加
wx=1; //开位选
P0=0xea; //开135位
wx=0; //关位选
dx=1; //开段选
P0=numtable[aa]; //0~F
dx=0; //关段选
aa++;
delayms(500);
d1=1;
}
}
void delayms(uint z)
{
uint i,j;
for (i=z;i>0;i--)
for(j=114;j>0;j--);
}
void exter0() interrupt 0
{
d1=0; // 灯亮
}
而且当P3.2和gnd接通时,只是变化的速度变慢而已, 程序没有真正停下! 为什么!? 求解!
#define uint unsigned int
#define uchar unsigned char
sbit dx=P2^6;
sbit wx=P2^7;
sbit d1=P1^0; //定义小灯
uchar aa;
uchar code numtable[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
void main()
{
EA=1; //开总中断
EX0=1; //开外部中断0
while(1)
{
if (aa==16)
aa=0; //当加到16时,从新加
wx=1; //开位选
P0=0xea; //开135位
wx=0; //关位选
dx=1; //开段选
P0=numtable[aa]; //0~F
dx=0; //关段选
aa++;
delayms(500);
d1=1;
}
}
void delayms(uint z)
{
uint i,j;
for (i=z;i>0;i--)
for(j=114;j>0;j--);
}
void exter0() interrupt 0
{
d1=0; // 灯亮
}
而且当P3.2和gnd接通时,只是变化的速度变慢而已, 程序没有真正停下! 为什么!? 求解!
你应该好好看看书 学学外部中断 以及中断的触发方式 和中断响应的过程和执行过程!
你没有选定是哪种的中断模式啊
有低电平触发。下降沿触发。两种
你这个实验的具体情况是什么的。包括数码管的
因为当你选用低电平触发是 必须保证低电平时间是2个系统周期才会被识别。因此 。当你把那个接到gnd时。读到低电平和下一次在采集到低电平的时间是两个系统中期。在此期间又跳到主函数中。所以你才会看到那种现象
嗯。我补充下。如果你中断函数里面程序运行的时间大于两系统周期。那就不会跳回主函数