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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用過STC15單片機的幫看一下,掉電模式

[復制鏈接]
跳轉到指定樓層
樓主
ID:562338 發表于 2019-11-27 09:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
原來用來控制燈的程序
發現關機狀態下電流實在太大了,電池沒幾天就用完了。規格書沒看明白,加了掉電程序。但沒敢下載,聽說如果錯了可能連再下載都難的。
那們大神幫看一下,主要是進入掉電和叫醒部份。1.實現定時關機后進入掉電模式和主動關機進入掉電模式,2.長按按鍵喚醒功能
#include "stc15w.h"                       
#include <intrins.h>                     
#define uint unsigned int               
#define uchar unsigned char              
#define     MAIN_Fosc       11059200L   
#define key_S 80                           //短按(約20ms)
#define key_L key_S*100                    //長按(約2s)
sbit out=P1^5;                           //mos_pin_p15
sbit key = P3^2;                         //key_INTO
sbit ledL = P3^5;                        //led
sbit ledH = P3^6;                        //led            
uint Cnt250us=0,Cnt1s;                  //set_times
bit  ON=0;                              //on_off
uchar n=0;
/*pin_mode*/
void port_mode()                        
{
        P1M1 = 0x01;                    
        P1M0 = 0x20;               
                P3M0 = 0x00;
        P3M1 = 0x00;
        out=0;                    
}
void readkey(void)                                       
{
        static uint count=0;                        
        if(!key)   
        {  
                count++;  
                if(count==key_L)                  //long_key
                        ON=~ON;                        
                if(count>key_L)                       
                        count=key_L+1;           
        }  
        else                                          
        {  
                if(count>key_S && count<key_L)   //short_key
                {
                        if(ON==1)                       
                          n++;                        
                                                  n%=3;
                }
                count=0;                                 
        }   
}
void Timer0Init()                    //250微秒@11.0592MHz
{
        AUXR |= 0x80;                //1T_mode
        TMOD &= 0xF0;               
        TL0 = 0x33;                  
        TH0 = 0xF5;                  
        TF0 = 0;                     
        TR0 = 1;                     
}
/*
增加掉電模式,INTO P32 低電平復醒
*/
void power_low()        //掉電模式開啟
{
ET0=0; //下降沿叫醒
EX0=1; //外部中斷允許
EA=1;
PCON=0x02; //進入掉模式
_nop_();
_nop_();
_nop_();
_nop_();
}
void ex_int0()interrupt 0        //INT0_P32 長鍵或短鍵低電平時,喚醒并進入開機狀態
{
PCON=0;
ON=1;
n=1;
Cnt250us=0;
}

void main()      
{
        port_mode();   
        Timer0Init();
        while(1)      
        {
                if(TF0==1)
                {
                        TF0=0;
                        readkey();
                        if(ON==1)
                        {
                                Cnt250us++;
                                if(Cnt250us>=4000)
                                {
                                        Cnt250us=0;
                                        Cnt1s++;
                                        if(Cnt1s>=28800) //8小時自動關機
                                        {
                                                Cnt1s =0;
                                                ON=0;
                                                ledH = 1;
                                                ledL = 1;
                                                out  = 0;
                                                                                                power_low();//8小時定時自動關機后進入掉電模式
                                        }

                                 }
                                switch(n)                         //每個檔位的工作模式,三種燈工作模式
                                                                       {
                                                                            case 0 :ledH=0;ledL=1;break;
                                                                                case 1 :ledH=0;ledL=0;break;
                                                                                case 2 :ledH=1;ledL=0;break;
                                                                           }
                                                
                          }
                        else                          //關機狀態
                        {
                                Cnt250us=0;
                                Cnt1s= 0;
                                ledH = 1;
                                ledL = 1;
                                out  = 0;
                                                                power_low(); //手動長按主動關機后進入掉電模式
                        }
                }
        }
}



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

使用道具 舉報

沙發
ID:401564 發表于 2019-11-27 11:24 | 只看該作者
放心好了,
如果是用內部RC時鐘的話,進入掉電模式之后,時內部是不工作的,
鐘是下載是要時鐘的,再次下載的話,會由于時鐘已經停止而下載不了
正確的下載方法:點擊下載,然后用個鑷子或者其它東西短路一下單片機的正負電源就可以了
我一直都是這樣用的,完全沒有問題
回復

使用道具 舉報

板凳
ID:562338 發表于 2019-11-27 14:53 | 只看該作者
Y_G_G 發表于 2019-11-27 11:24
放心好了,
如果是用內部RC時鐘的話,進入掉電模式之后,時內部是不工作的,
鐘是下載是要時鐘的,再次下載的 ...

幫我看一下,這樣加對不對
回復

使用道具 舉報

地板
ID:562338 發表于 2019-11-27 16:15 | 只看該作者
void ex_int0()interrupt 0        //INT0_P32 長鍵低電平時,喚醒并進入開機狀態并進入N=1模式
{
PCON=0;
ON=1;
n=1;
Cnt250us=0;
}
是不是這里寫得不對?
掉電和喚醒功能都可以實現了。但現在不是長按,變成短按就開了,還有抖動直接跳動n=2模式
回復

使用道具 舉報

5#
ID:401564 發表于 2019-11-27 19:19 | 只看該作者
我是用匯編的,C不會
在開啟EA全局中斷之前,最好了先清除一下標志位,雖然INT0的中斷標志位是會自動清除的,但那是在程序響應中斷之后才自動清除的
如果不清除的話,可能會引起邏輯上的錯誤
回復

使用道具 舉報

6#
ID:562338 發表于 2019-11-27 19:44 | 只看該作者
試了一下,可以掉電和喚醒,但是短按就醒了(原來是長按開機的),而且有抖動,醒了后會跳到別的n=2模式。
回復

使用道具 舉報

7#
ID:401564 發表于 2019-11-28 08:26 | 只看該作者
void ex_int0()interrupt 0
在中斷函數里面還要進行檢測的,單片機只有低電平喚醒,下降沿或者上升沿喚醒,沒有長按喚醒這個功能
只能是你自行設定的
在你設定為下降沿喚醒之后,只要INT0有下降沿,程序就馬上進入void ex_int0()interrupt 0 中斷函數中,執行完這個函數的代碼就去執行 power_low()之后的語句
你可以在 power_low()再加上檢測是否是長按的語句,如果不是長按,就再次進入掉電模式.
只有長按才能返回去檢測while循環
大概就是這個樣子的了,C我只能看明白兩三成,匯編的思路就是這樣子的
回復

使用道具 舉報

8#
ID:562338 發表于 2019-11-28 09:08 | 只看該作者
Y_G_G 發表于 2019-11-28 08:26
void ex_int0()interrupt 0
在中斷函數里面還要進行檢測的,單片機只有低電平喚醒,下降沿或者上升沿喚醒, ...

謝謝你。換了一種思路,感覺效果可以了。在測試不知道有沒有BUG。
回復

使用道具 舉報

9#
ID:562338 發表于 2019-11-28 09:18 | 只看該作者
修改了一下,初步感覺可以了。
readkey()
里把 if(!key)修改成 if(key==0)
/*
增加掉電模式,INTO P32 低電平復醒
*/
void power_low()        //掉電模式開啟
{  if(ON==0&key==1)  //滿足關機狀態且沒按KEY時才進入掉電
{
ET0=0; //下降沿叫醒
EX0=1; //外部中斷允許
EA=1;
PCON=0x02; //進入掉模式
_nop_();
_nop_();
_nop_();
_nop_();readkey()  //喚醒后去執行 按鍵部份
}
}
void ex_int0()interrupt 0        //INT0_P32 長鍵或短鍵低電平時,喚醒并進入開機狀態
{
PCON=0;            //這個好像有沒有都一樣,還沒讀透規格書
Timer0Init(void)   //只做初始化一下定時,這樣改,待測定時功能正不正常
}

回復

使用道具 舉報

10#
ID:478802 發表于 2019-12-21 10:36 | 只看該作者
我按照這個方法,但是老是喚醒不了,偶爾能喚醒,哪里問題
回復

使用道具 舉報

11#
ID:562338 發表于 2019-12-30 22:56 | 只看該作者
wszx158 發表于 2019-12-21 10:36
我按照這個方法,但是老是喚醒不了,偶爾能喚醒,哪里問題

我剛開始也是,后來改了一下,正常了
回復

使用道具 舉報

12#
ID:403593 發表于 2019-12-31 09:31 | 只看該作者
沒有辦法長按喚醒,只要是按鍵按下,有上升沿或者下降沿,就會進入中斷,喚醒單片機。可以做短按開機,長按關機。
回復

使用道具 舉報

13#
ID:130230 發表于 2020-1-3 16:52 | 只看該作者
掉電和下載程序沒啥關系。。。stc由個坑爹的地方是下載軟件里面有個選項是某個引腳是低電平才能下載嗎,那個要是點上了就坑爹了。
回復

使用道具 舉報

14#
ID:586438 發表于 2020-3-8 19:21 | 只看該作者
最近在研究掉電喚醒   前來學習
回復

使用道具 舉報

15#
ID:586438 發表于 2020-3-9 16:46 | 只看該作者
樓主能不能把修改好的程序分享一下  非常感謝
回復

使用道具 舉報

16#
ID:562338 發表于 2020-3-19 20:29 | 只看該作者
如癡百感生 發表于 2020-3-9 16:46
樓主能不能把修改好的程序分享一下  非常感謝

/*
增加掉電模式,INTO P32 低電平復醒
*/
void power_low()        //掉電模式開啟
{
  if(ON==0&&key==1)
{
IT0=1;
ET0=0; //下降沿叫醒
EX0=1; //外部中斷允許
EA=1;
PCON=0x02; //進入掉模式
_nop_();
_nop_();
_nop_();
_nop_();
readkey();
}
}
void ex_int0()interrupt 0        //INT0_P32 長鍵或短鍵低電平時,喚醒并進入開機狀態
{
Timer0Init();
}
回復

使用道具 舉報

17#
ID:25310 發表于 2020-3-20 10:11 | 只看該作者
多搞幾個喚醒中斷,防止一個中斷喚不醒。INT1  ,INT0 啥的有空的都用上。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久福利一牛影视 | 国产一级片在线观看视频 | 一区二区三区免费在线观看 | 欧美精品久久久久 | 国产精品久久久一区二区三区 | 精品国产欧美一区二区 | 男女羞羞视频免费看 | 最新av在线播放 | 特级生活片 | 久久久精品网站 | 成人在线免费观看 | 97精品国产一区二区三区 | 在线色网 | 国产成人免费在线观看 | 国产精品久久久久久久久久久免费看 | 亚洲午夜在线 | 青青草精品 | 欧美日韩一区二区在线观看 | 黄色国产大片 | 免费av在线 | 亚洲欧美在线视频 | 欧美一区二区大片 | 欧美成ee人免费视频 | 狠狠干2020| 国产精品欧美一区二区三区不卡 | 久久综合一区 | 国产日韩视频在线 | 精品www| 无码国模国产在线观看 | 亚洲成人午夜电影 | 欧美一级www片免费观看 | 亚洲成人一区二区 | 五月综合激情婷婷 | 精品亚洲一区二区 | 成人国产精品久久久 | xxx国产精品视频 | 国产丝袜一区二区三区免费视频 | 99久久国产综合精品麻豆 | 国产成人精品在线 | 亚洲97| www.youjizz.com日韩 |