|
你用的IT=1(下降沿出發(fā)中斷),且中斷程序時讓全部8個led亮,上板試驗效果是P3^2接地,8個led閃爍一下。程序沒有問題。
但是我想問的是用IT0=0 (低電平出發(fā)中斷),為何P3^2接地,且接地沒有斷開的過程中,數(shù)碼管的顯示還是會變化。
依照你的建議 我把程序稍稍該了一點(diǎn)
想要的試驗結(jié)果是:
P3^2一直接地的過程中主程序停止在斷點(diǎn)前的一步不動,一直執(zhí)行中斷程序(8個led全亮),當(dāng)斷開P3^2的接地,跳出中斷(8個led熄滅,繼續(xù)執(zhí)行主程序)
程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lodu=P2^6;
sbit lowi=P2^7;
sbit q1=P1^4;
uint a;
uchar code table[]={0x37,0x37,0x6d,0x5b,0x3f,0x06,0x4f,0x06,0x66};
void delay(uint);
void main()
{
EA=1;
EX0=1;
IT0=0;
while(1)
{
//EA=1;//開總中斷
//EX0=1;//開外部中斷0
for(a=0;a<9;a++)
{
q1=1;//LED 電源關(guān)閉
lowi=1;//位鎖存器直通
P0=0xaa;//給位鎖存器賦值(片選1 3 5 7 數(shù)碼管)
lowi=0;//位鎖存器鎖存
lodu=1;//段鎖存器直通
P0=table[a];//給段鎖存器賦值,
lodu=0;//段鎖存器鎖存
delay(380);//延時1s
lodu=1;//段鎖存器直通
P0=0x00;//給段鎖存器賦值
lodu=0;//段鎖存器鎖存
delay(170);//延時0.5s
};
}
}
void delay(uint z)//延時程序
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=200;y>0;y--)
{
};
};
}
void exter0()interrupt 0//中斷子程序
{
q1=0;
//P0=0x7f;
}
試驗結(jié)果: P3^2 接地8個led無序變化,數(shù)碼管1 3 5 7 繼續(xù)執(zhí)行主程序,只是延時時間變長了 |
|