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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機一個按鍵立馬控制呼吸燈亮滅,為什么中斷服務程序里面不能執行掉電模式?

[復制鏈接]
跳轉到指定樓層
樓主
ID:863657 發表于 2022-10-20 09:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void main()
{
Timer0Init;
while(1)
        {
                PWM_huxi ();
  }
}

void T0 () interrupt 1
{
        TL0 = 0xCD;                //設置定時初值
        TH0 = 0xD4;                //設置定時初值
        num++;
        if(num==10)   //10ms
                {
               
         
         if(!K1)
         {
                  Delayms(20);
                 if(!K1)
                 {
                  
                  while(!K1);
            INT_CLKO |= 0x40; //打開INT4 外部中斷 喚醒功能
                        num=0;
                        PCON=0X02;//進入掉電模式
                        Delayms(5);
                  
                 }
         }
         else num=0;
}
}
void Int4()  interrupt 16
{
        
                INT_CLKO &= 0xBF;        //中斷清零
                        EA=0;
        IAP_CONTR=0X20; //直接復位程序重新執行
        
        }

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

使用道具 舉報

沙發
ID:198189 發表于 2022-10-20 09:57 | 只看該作者
當它運行到10毫秒時,你的按鍵要正好按下,請問你的手速有這么快嗎?還是說你以什么方法實現的?如果你的“!K1”是人工操作的,這個要進入掉電模式就和你中獎的幾乎也差不多了。
回復

使用道具 舉報

板凳
ID:863657 發表于 2022-10-20 10:04 | 只看該作者
xia20 發表于 2022-10-20 09:57
當它運行到10毫秒時,你的按鍵要正好按下,請問你的手速有這么快嗎?還是說你以什么方法實現的?如果你的“ ...

人工按得,想法是 相當于是每10ms 掃描一次按鍵狀態,好像怎么改時間中斷服務函數里 都進不去 掉電
回復

使用道具 舉報

地板
ID:624769 發表于 2022-10-20 10:11 | 只看該作者
既然,啥都沒有所有都靠猜,那就瞎猜一下,你的K1  剛好接在 P3.0,
回復

使用道具 舉報

5#
ID:863657 發表于 2022-10-20 10:20 來自手機 | 只看該作者
188610329 發表于 2022-10-20 10:11
既然,啥都沒有所有都靠猜,那就瞎猜一下,你的K1  剛好接在 P3.0,

是的 就是p3.0,掉電模式放主函數里就可以掉電,但是不能立即掉電,得等呼吸燈跑完,
放中斷里想著應該可以立即掉電了吧又不能執行
回復

使用道具 舉報

6#
ID:624769 發表于 2022-10-20 10:39 | 只看該作者
zhaomin253 發表于 2022-10-20 10:20
是的 就是p3.0,掉電模式放主函數里就可以掉電,但是不能立即掉電,得等呼吸燈跑完,
放中斷里想著應該 ...

按鍵按下,又抬起后, (你要想穩定工作,必須抬起后。。)設置一個標志, 比如 Poweroff = 1;
PWM函數,中檢測到  if(Poweroff)  break;   跳出PWM函數。
最后,主函數中,
if(Poweroff)
{
   Poweroff  = 0;
   PCON      = 0x02;
}
回復

使用道具 舉報

7#
ID:384109 發表于 2022-10-20 10:41 | 只看該作者
按鍵釋放后再掉電
回復

使用道具 舉報

8#
ID:401564 發表于 2022-10-20 14:50 | 只看該作者
不能在中斷函數中進入掉電模式
掉電模式喚醒過程:在掉電模式執行之后,被中斷觸發,程序馬上進入中斷
如果在中斷模式中進入掉電模式:中斷本身還沒有返回,你就在當前模式進入了掉電模式,等到你再按下按鍵,又一次進入中斷,而之前的中斷并沒有返回
整個過程都斷套了.......至于會出什么問題,不知道,也不重要,你只要知道單片機亂了就行了
回復

使用道具 舉報

9#
ID:863657 發表于 2022-10-20 15:25 | 只看該作者
Y_G_G 發表于 2022-10-20 14:50
不能在中斷函數中進入掉電模式
掉電模式喚醒過程:在掉電模式執行之后,被中斷觸發,程序馬上進入中斷
如果 ...

哦原來如此,受教了,請問下,
那不用中斷,如何才能控制一個程序在運行中途突然關機呢,(不切斷電源,只軟關斷,比如一個信號),
回復

使用道具 舉報

10#
ID:161164 發表于 2022-10-20 16:26 | 只看該作者
zhaomin253 發表于 2022-10-20 15:25
哦原來如此,受教了,請問下,
那不用中斷,如何才能控制一個程序在運行中途突然關機呢,(不切斷電源, ...

用標志位,不要用1ms以上的delay
回復

使用道具 舉報

11#
ID:863657 發表于 2022-10-20 16:56 | 只看該作者
lkc8210 發表于 2022-10-20 16:26
用標志位,不要用1ms以上的delay

請問 標志位是需要用 if判斷的么,如果程序已經在一個if 語句里執行了,這時候標志位變化了,那還是得等到當前if語句執行完才能判斷 標志位變化的if吧
回復

使用道具 舉報

12#
ID:863657 發表于 2022-10-20 17:25 來自手機 | 只看該作者
lkc8210 發表于 2022-10-20 16:26
用標志位,不要用1ms以上的delay

好像明白了,每執行一段程序就判斷一下標志位,這樣就可以比較快的關機了
回復

使用道具 舉報

13#
ID:401564 發表于 2022-10-20 19:08 | 只看該作者
zhaomin253 發表于 2022-10-20 15:25
哦原來如此,受教了,請問下,
那不用中斷,如何才能控制一個程序在運行中途突然關機呢,(不切斷電源, ...

參考一下:
sbit        KEY=P3^2;                //按鍵開關
bit                ON;                                //開機狀態標志位
unsigned char        time_10ms=0x00;        //按鍵10mS延時變

while(1)
        {                                                                                                                                                
                if((time_10ms>=5)&&KEY)                                        //按鍵沒有按下,50mS進行一次處理
                {
                        if(!key_press)
                       {
                           ON=!ON;                                        //按鍵有效按下就開/關機
                           key_press=0;
                        }
                        if(!ON&&!key_press)                                                  //ON標志位補清除,按鍵已經處理,關機
                        {
                                PCON=0x02;                                                        //進入掉電模式
                                _nop_();_nop_();_nop_();_nop_();        //4個空指令
                                Mcu_Awaken();                                                  //單片機喚醒,自己可以寫一些自己需要的功能                       
                        }
                        time_10ms=0x00;                                                        //清除時間
                }       
        }

void Int0_isr() interrupt 0        //外部中斷0
{       
        key_press=1;                          //按下按鍵
        time_10ms=0x00;                          //從最后一次退出中斷開始計時
        IE0=0;
}

void T0_isr() interrupt        1
{
        if(time_10ms<250)time_10ms++;        //每10mS,time_10ms++一次
}
time_10ms是定時器中斷中++的全局變量.按鍵按下就清除
key_press是一個標示,按鍵中斷按下就標志,隨便按鍵怎么抖動,中斷只做這兩件事
主程序中的相關程序執行,永遠是在if((time_10ms>=5)&&KEY)        這個條件下才會被執行的,這就是一個去抖動的效果



回復

使用道具 舉報

14#
ID:123289 發表于 2022-10-21 08:46 | 只看該作者
只問一個問題:
在中斷服務程序中,執行了【掉電模式】之后。如何喚醒呢?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产a级毛毛片 | 欧美一级免费看 | 欧美在线观看免费观看视频 | 久色 | 久热精品在线观看视频 | 九九亚洲| 91色在线 | www.久久影视 | 日本在线播放一区二区 | 欧美日韩三级在线观看 | 本道综合精品 | 精品成人av | 日韩久久久久 | 日韩av成人在线观看 | 亚洲码欧美码一区二区三区 | 成人免费福利 | 国产ts人妖系列高潮 | 91精品国产色综合久久不卡蜜臀 | 国产激情偷乱视频一区二区三区 | 天天色天天射天天干 | 久久精品久久精品久久精品 | 亚洲国产高清在线观看 | 亚洲国产日韩欧美 | 国产精品日产欧美久久久久 | 中文字幕视频在线观看 | 国产精品一区二区久久 | 久久精品国产免费一区二区三区 | 久久骚| 精品国产乱码久久久久久影片 | 成人在线黄色 | 亚洲v日韩v综合v精品v | 欧美精品一区二区在线观看 | 欧美精品91爱爱 | 999久久久 | 久久这里只有精品首页 | 成人在线一区二区 | 中文天堂在线观看 | 一级免费在线视频 | 成人h动漫亚洲一区二区 | 在线中文字幕视频 | 男女在线网站 |