久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3086|回復: 6
打印 上一主題 下一主題
收起左側

新手求助STC89C52單片機 EX1外部中斷問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:612392 發表于 2020-2-18 22:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大家好,我最近在學習51單片機相關知識,在化學行業,基礎知識相對比較薄弱。現在自己做了一個小程序,進入中斷程序如下:目標是讓單片機控制一個LED燈閃爍兩次后,進行Power Down模式,使用外部中斷1進行激活恢復到正常工作模式,并記錄激活次數。
現在程序遇到一個問題,我通過導線連接GND與P3^3(EX1的IO口),假設導線一直連著GND不松開,那么應該一直在中斷程序中的while(!P3^3)死循環,出不來,一直停在中斷程序這里,我用debug調試也是這個結果;但實際用練習板調試,會出中斷,且串口發出的Flag標志位一直在自增,程序一直在跑,單片機也一直在正常模式和掉電模式來回切換,百思不得其解,是不是有什么低級錯誤?
謝謝各位了!

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作波特率發生器
        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;  //進入PD模式
               
                ES=0;            //串口發送恢復激活次數
                SBUF=Flag;
                while(!TI);
                TI=0;
                ES=1;
               
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2020-2-19 01:17 | 只看該作者
閃2次→掉電(中斷在運行)→觸發→上電(P33變為高電平,程序運行)→掉電(中斷在運行)→觸發 ………………
仿真為什么是對的,因為仿真時不象實物一樣有這個上電過程
回復

使用道具 舉報

板凳
ID:213173 發表于 2020-2-19 07:37 | 只看該作者
樓主錯誤確實夠低級的。程序中的P3^3并不是表示IO口的P3.3,而是邏輯運算符“異或”。要想位操作P3.3得自定義一個名稱:sbit key=P3^3;,使用while(!key)。
回復

使用道具 舉報

地板
ID:168996 發表于 2020-2-19 08:15 | 只看該作者
MCS51的外部中斷是下降沿沿觸發或低電平觸發,觸發后PC壓棧后立即切換到中斷入口,中斷程序執行過程中,不再判斷中斷輸入引腳,有效退出后恢復中斷判斷機制,所以如果低電平觸發模式且中斷輸入引腳保持低電平,會持續進入中斷
回復

使用道具 舉報

5#
ID:612392 發表于 2020-2-19 08:49 | 只看該作者
明白了,P3^3是不是要用sbit進行特殊寄存位進行定義?如果直接用P3^3,要編譯的時候會把^作為異或運算?
回復

使用道具 舉報

6#
ID:612392 發表于 2020-2-19 13:27 | 只看該作者
wulin 發表于 2020-2-19 07:37
樓主錯誤確實夠低級的。程序中的P3^3并不是表示IO口的P3.3,而是邏輯運算符“異或”。要想位操作P3.3得自定 ...

非常感謝,確實是這個問題。
回復

使用道具 舉報

7#
ID:612392 發表于 2020-2-19 13:40 | 只看該作者
banalsheep 發表于 2020-2-19 08:15
MCS51的外部中斷是下降沿沿觸發或低電平觸發,觸發后PC壓棧后立即切換到中斷入口,中斷程序執行過程中,不 ...

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费在线小视频 | 春色av| 午夜视频在线观看视频 | 视频一区二区三区在线观看 | 国产色99 | 国产激情一区二区三区 | 亚州精品天堂中文字幕 | 精品国产区 | 91色网站 | 国产亚洲精品美女久久久久久久久久 | 亚洲精品视频一区二区三区 | 亚洲综合小视频 | 亚洲精品一区二区冲田杏梨 | 日日摸夜夜爽人人添av | 国产乱码精品一区二区三区五月婷 | 欧美寡妇偷汉性猛交 | 亚洲精品久久久久久久久久吃药 | av国产精品毛片一区二区小说 | 三级av在线| 中文精品视频 | 日韩欧美在线不卡 | 国产精品亚洲欧美日韩一区在线 | 精品国产一区二区三区免费 | 欧美福利久久 | 欧美一级黄色免费看 | 国产精品久久国产精品久久 | 国产区精品在线观看 | 国产精品a一区二区三区网址 | 国产日韩一区二区 | 欧美成人久久 | 亚洲二区在线观看 | 曰韩一二三区 | 国产精品毛片 | 国产精品久久 | 91色站 | 日本人和亚洲人zjzjhd | 国产精品久久久久久久久免费相片 | 欧美日韩国产精品一区 | 亚洲精品国产成人 | 欧美精品一区二区在线观看 | 一级做a爰片性色毛片 |