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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教51單片機中斷程序 多謝

[復制鏈接]
跳轉到指定樓層
樓主
ID:918409 發表于 2023-4-25 12:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問可否實現如下功能:在單片機外部中斷服務程序里首先修改其自己的優先級,然后在執行這個外部中斷服務程序里的代碼時,再次觸發這個外部中斷

請問能實現么?

我遇到一個有點想不明白的問題:
我定義一個全局變量k,用于檢測是低級的外部中斷還是高級的外部中斷,k為0時執行低級代碼,k為1時執行高級代碼
void int0( )  interrupt 0  using 1        
{        if(k==0)
        {
                PX0=1;
                k=1;               
                                                                                                        
                while(1)         
                {                        
                   P1=0xf0;               
                }               
        }
        else
        {        
                P1=0xff        ;                                       
                Delay( ) ;                                       

                P1=0x00;                                                
                Delay( );        
         }
}

以上代碼在Proteus仿真沒問題。在低級中斷無限循環時可以觸發其自身高級中斷,并能執行完一次閃爍再次返回低級中斷無限循環
但是如果代碼改成這樣:低級外部中斷時只執行一次,高級部分不變
void int0( )  interrupt 0  using 1               
{        
        if(k==0)
        {
                PX0=1;
                k=1;
               
                P1=0xf0;                                                        
                Delay() ;                                                
                Delay() ;                                                
                P1=0x0f;
                Delay() ;                                                
                Delay() ;                                                

                PX0=0;
                k=0;        
        }
        else
        {        
                P1=0xff        ;                                       
                Delay() ;                                       

                P1=0x00;                                                
                Delay();
        }
}

以上代碼仿真時,則一直留在了高級代碼,不再返回低級繼續執行了。
這是為什么呢?請求高人解惑!多謝多謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:883242 發表于 2023-4-25 14:27 | 只看該作者
你都k=0了,那么k==0只要滿足一次永遠滿足,自然不會執行k!=0的代碼了。
回復

使用道具 舉報

板凳
ID:807182 發表于 2023-4-25 14:33 | 只看該作者
對,你在K=0的代碼里面先給K賦值1,在賦值0,那就不會進下面那個代碼了
回復

使用道具 舉報

地板
ID:998389 發表于 2023-4-25 14:40 | 只看該作者
while(1)         
                {                       
                   P1=0xf0;               
                }       程序會一直死在這里把
回復

使用道具 舉報

5#
ID:291668 發表于 2023-4-25 14:54 | 只看該作者
代碼錯誤,仔細檢查一下
回復

使用道具 舉報

6#
ID:918409 發表于 2023-4-25 15:46 | 只看該作者
Hephaestus 發表于 2023-4-25 14:27
你都k=0了,那么k==0只要滿足一次永遠滿足,自然不會執行k!=0的代碼了。

怪我沒說明白。當執行k==0代碼段時,其實時間挺長,有2秒鐘。在這段代碼最開始的地方,通過PX0=1修改了外部中斷0的優先級,因此在這兩秒鐘器件,可以再次觸發一次外部中斷0(因為優先級已經改成高了,從而中斷了過去那個低優先級的外部中斷0程序)。
回復

使用道具 舉報

7#
ID:918409 發表于 2023-4-25 15:50 | 只看該作者
暖西夏 發表于 2023-4-25 14:33
對,你在K=0的代碼里面先給K賦值1,在賦值0,那就不會進下面那個代碼了

還是可以的。我沒等低優先級的外部中斷0服務程序執行完,就馬上觸發了高優先級外部中斷0(通過修改PX0=1改變了外部中斷0的優先級),因此按理說還沒執行到k=0呢
回復

使用道具 舉報

8#
ID:918409 發表于 2023-4-25 15:51 | 只看該作者
byyw 發表于 2023-4-25 14:40
while(1)         
                {                       
                   P1=0xf0;            ...

這是我想要的結果。第一段嘗試用無限循環,而第二段只是短時間顯示
回復

使用道具 舉報

9#
ID:123289 發表于 2023-4-26 17:07 | 只看該作者
在中斷未返回時,不會響應再次中斷。直到返回時,才會被響應。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩av免费在线电影 | 久久亚洲国产精品 | 九九热免费在线观看 | 国产精品大片在线观看 | 免费毛片网站在线观看 | 国产精品高潮呻吟久久 | 青青久久| 久久成人一区 | 久久久久久亚洲 | 国产日韩久久 | 二区欧美| av在线免费播放 | 欧美成年网站 | 中文字幕乱码一区二区三区 | 国产一区二区精品在线 | 欧美成人手机视频 | 自拍 亚洲 欧美 老师 丝袜 | www久久爱| 欧美成视频| 欧美国产日本一区 | www久久99 | 99热热热| 成人片免费看 | 久久免费香蕉视频 | 国产在线观看一区二区 | 国产精品免费在线 | 精品成人免费一区二区在线播放 | 久久久久久久久久久91 | 特一级毛片 | 午夜久久久久久久久久一区二区 | 9porny九色视频自拍 | 亚洲精品久久久久中文字幕二区 | 一本一道久久a久久精品蜜桃 | 精品一区二区在线视频 | 国产免费拔擦拔擦8x高清 | 久久亚洲一区 | 网色 | 亚洲精品国产第一综合99久久 | 欧美日韩亚洲成人 | 国产精品污www一区二区三区 | 爱爱爱av |