亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 新手求助STC89C52單片機 EX1外部中斷問題 [打印本頁]

作者: cjjdemon    時間: 2020-2-18 22:39
標(biāo)題: 新手求助STC89C52單片機 EX1外部中斷問題
大家好,我最近在學(xué)習(xí)51單片機相關(guān)知識,在化學(xué)行業(yè),基礎(chǔ)知識相對比較薄弱。現(xiàn)在自己做了一個小程序,進(jìn)入中斷程序如下:目標(biāo)是讓單片機控制一個LED燈閃爍兩次后,進(jìn)行Power Down模式,使用外部中斷1進(jìn)行激活恢復(fù)到正常工作模式,并記錄激活次數(shù)。
現(xiàn)在程序遇到一個問題,我通過導(dǎo)線連接GND與P3^3(EX1的IO口),假設(shè)導(dǎo)線一直連著GND不松開,那么應(yīng)該一直在中斷程序中的while(!P3^3)死循環(huán),出不來,一直停在中斷程序這里,我用debug調(diào)試也是這個結(jié)果;但實際用練習(xí)板調(diào)試,會出中斷,且串口發(fā)出的Flag標(biāo)志位一直在自增,程序一直在跑,單片機也一直在正常模式和掉電模式來回切換,百思不得其解,是不是有什么低級錯誤?
謝謝各位了!

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; //定時器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;
               
        }
}



作者: csmyldl    時間: 2020-2-19 01:17
閃2次→掉電(中斷在運行)→觸發(fā)→上電(P33變?yōu)楦唠娖?程序運行)→掉電(中斷在運行)→觸發(fā) ………………
仿真為什么是對的,因為仿真時不象實物一樣有這個上電過程
作者: wulin    時間: 2020-2-19 07:37
樓主錯誤確實夠低級的。程序中的P3^3并不是表示IO口的P3.3,而是邏輯運算符“異或”。要想位操作P3.3得自定義一個名稱:sbit key=P3^3;,使用while(!key)。
作者: banalsheep    時間: 2020-2-19 08:15
MCS51的外部中斷是下降沿沿觸發(fā)或低電平觸發(fā),觸發(fā)后PC壓棧后立即切換到中斷入口,中斷程序執(zhí)行過程中,不再判斷中斷輸入引腳,有效退出后恢復(fù)中斷判斷機制,所以如果低電平觸發(fā)模式且中斷輸入引腳保持低電平,會持續(xù)進(jìn)入中斷
作者: cjjdemon    時間: 2020-2-19 08:49
明白了,P3^3是不是要用sbit進(jìn)行特殊寄存位進(jìn)行定義?如果直接用P3^3,要編譯的時候會把^作為異或運算?
作者: cjjdemon    時間: 2020-2-19 13:27
wulin 發(fā)表于 2020-2-19 07:37
樓主錯誤確實夠低級的。程序中的P3^3并不是表示IO口的P3.3,而是邏輯運算符“異或”。要想位操作P3.3得自定 ...

非常感謝,確實是這個問題。
作者: cjjdemon    時間: 2020-2-19 13:40
banalsheep 發(fā)表于 2020-2-19 08:15
MCS51的外部中斷是下降沿沿觸發(fā)或低電平觸發(fā),觸發(fā)后PC壓棧后立即切換到中斷入口,中斷程序執(zhí)行過程中,不 ...

我已選擇下降沿觸發(fā);如果是低電平觸發(fā)是會一直進(jìn)中斷程序。
問題已找到,很低級的錯誤,我把P3^3直接表示IO口了,應(yīng)該要用sbit先定義P3^3,再在程序中引用。
直接使用P3^3的話,在編譯的時候會被當(dāng)作異或處理。




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1