|
大家好,我最近在學(xué)習(xí)51單片機(jī)相關(guān)知識(shí),在化學(xué)行業(yè),基礎(chǔ)知識(shí)相對(duì)比較薄弱。現(xiàn)在自己做了一個(gè)小程序,進(jìn)入中斷程序如下:目標(biāo)是讓單片機(jī)控制一個(gè)LED燈閃爍兩次后,進(jìn)行Power Down模式,使用外部中斷1進(jìn)行激活恢復(fù)到正常工作模式,并記錄激活次數(shù)。
現(xiàn)在程序遇到一個(gè)問(wèn)題,我通過(guò)導(dǎo)線連接GND與P3^3(EX1的IO口),假設(shè)導(dǎo)線一直連著GND不松開(kāi),那么應(yīng)該一直在中斷程序中的while(!P3^3)死循環(huán),出不來(lái),一直停在中斷程序這里,我用debug調(diào)試也是這個(gè)結(jié)果;但實(shí)際用練習(xí)板調(diào)試,會(huì)出中斷,且串口發(fā)出的Flag標(biāo)志位一直在自增,程序一直在跑,單片機(jī)也一直在正常模式和掉電模式來(lái)回切換,百思不得其解,是不是有什么低級(jí)錯(cuò)誤?
謝謝各位了!
void IntSystemInit()
{
IT1=1;
EX1=1;
}
void EX_INT1() interrupt 2
{
if(IsPowerDown)
{
IsPowerDown=0;
PCON=0x00;
P1=0x7E;
while(!P3^3)
{
if(P3^3)
{
Flag++;
break;
}
}
delay(500);
P1=0xfe;
delay(500);
}
}
void main()
{
uint j=0;
boardinit();
write_byte_74hc595(0x40); //控制鎖存器
P1=0xfe;
IntSystemInit();
TMOD=0x20; //定時(shí)器1作波特率發(fā)生器
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0; //配置串口
SM1=1;
REN=1;
ES=1;
EA=1;
while(1)
{
for(j=0;j<2;j++)
{
NormalWorkFlashing(); //讓LED閃爍兩次
}
IsPowerDown=1;
PCON=0x02; //進(jìn)入PD模式
ES=0; //串口發(fā)送恢復(fù)激活次數(shù)
SBUF=Flag;
while(!TI);
TI=0;
ES=1;
}
}
|
|