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

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

作者: zhaomin253    時間: 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; //直接復位程序重新執行
        
        }


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

人工按得,想法是 相當于是每10ms 掃描一次按鍵狀態,好像怎么改時間中斷服務函數里 都進不去 掉電
作者: 188610329    時間: 2022-10-20 10:11
既然,啥都沒有所有都靠猜,那就瞎猜一下,你的K1  剛好接在 P3.0,
作者: zhaomin253    時間: 2022-10-20 10:20
188610329 發表于 2022-10-20 10:11
既然,啥都沒有所有都靠猜,那就瞎猜一下,你的K1  剛好接在 P3.0,

是的 就是p3.0,掉電模式放主函數里就可以掉電,但是不能立即掉電,得等呼吸燈跑完,
放中斷里想著應該可以立即掉電了吧又不能執行
作者: 188610329    時間: 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;
}
作者: 人中狼    時間: 2022-10-20 10:41
按鍵釋放后再掉電
作者: Y_G_G    時間: 2022-10-20 14:50
不能在中斷函數中進入掉電模式
掉電模式喚醒過程:在掉電模式執行之后,被中斷觸發,程序馬上進入中斷
如果在中斷模式中進入掉電模式:中斷本身還沒有返回,你就在當前模式進入了掉電模式,等到你再按下按鍵,又一次進入中斷,而之前的中斷并沒有返回
整個過程都斷套了.......至于會出什么問題,不知道,也不重要,你只要知道單片機亂了就行了
作者: zhaomin253    時間: 2022-10-20 15:25
Y_G_G 發表于 2022-10-20 14:50
不能在中斷函數中進入掉電模式
掉電模式喚醒過程:在掉電模式執行之后,被中斷觸發,程序馬上進入中斷
如果 ...

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

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

用標志位,不要用1ms以上的delay
作者: zhaomin253    時間: 2022-10-20 16:56
lkc8210 發表于 2022-10-20 16:26
用標志位,不要用1ms以上的delay

請問 標志位是需要用 if判斷的么,如果程序已經在一個if 語句里執行了,這時候標志位變化了,那還是得等到當前if語句執行完才能判斷 標志位變化的if吧
作者: zhaomin253    時間: 2022-10-20 17:25
lkc8210 發表于 2022-10-20 16:26
用標志位,不要用1ms以上的delay

好像明白了,每執行一段程序就判斷一下標志位,這樣就可以比較快的關機了
作者: Y_G_G    時間: 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)        這個條件下才會被執行的,這就是一個去抖動的效果




作者: yzwzfyz    時間: 2022-10-21 08:46
只問一個問題:
在中斷服務程序中,執行了【掉電模式】之后。如何喚醒呢?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一区二区三区视频在线观看 | 日本一道本视频 | 自拍偷拍第一页 | 国产ts人妖一区二区三区 | caoporn免费| 国产精品99久久久久久动医院 | 精品久久久久久亚洲精品 | japan21xxxxhd美女 日本欧美国产在线 | 黄色一级视频免费 | 日日夜夜精品免费视频 | 日韩综合一区 | 欧洲视频一区二区 | 国产在线一区观看 | 日本又色又爽又黄的大片 | 午夜天堂精品久久久久 | 国产欧美一区二区三区另类精品 | 精品福利在线 | 成人免费看片 | 日本三级网址 | 激情欧美一区二区三区中文字幕 | 二区在线视频 | 久久这里只有精品首页 | 国产日韩欧美 | 伊人在线 | 激情欧美一区二区三区中文字幕 | 亚洲社区在线 | 国产精品视频网站 | 国产在线一区观看 | 久久天天综合 | 爱操影视 | 草久久免费视频 | 中文字幕精品视频 | 看片地址 | 亚洲第1页 | 日韩在线免费观看视频 | 中文视频在线 | 99re视频在线 | 国产精品亚洲一区二区三区在线 | 夜夜摸夜夜操 | 高清视频一区二区三区 | 国产精品久久精品 |