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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于STC8G1K08A單片機用遙控器控制掉電喚醒的問題

[復制鏈接]
跳轉到指定樓層
樓主
     最近有空剛學習掉電喚醒這一塊,用遙控器能讓單片機進入掉電模式,此時能控制P54腳輸出的PWM停止不輸出,但P54腳有時為高電平,有時也為低電平。P32腳(P32腳接接收頭IR)在進入掉電模式時,立馬為低電平,此時P32腳用導線觸碰一下高電平(3—5V),可以喚醒單片機,但是再按遙控器不能進入掉電模式,關掉電源再打開,才能用遙控器能讓單片機進入掉電模式。代碼中這種用遙控器控制掉電喚醒的方法是不是行不通,因為只要P32在進入掉電模式時,立馬為低電平,這時按遙控器,用示波器測此腳波形,一點反應都沒有。有什么其它的好辦法能用遙控器控制掉電喚醒?代碼如下:

單片機源程序如下:
#include  "STC8xxxx.H"
#include  "pwm.h"
#include  "38KHZ.h"
#include  "IR.h"

#define IDL             0x01                    //PCON.0  IDLE(空閑)模式控制位
#define PD              0x02                    //PCON.1  時鐘停振模式/掉電模式/停電模式 控制位
//sfr    INTCLKO     =   0x8f;
//#define EX2             0x10
//#define EX3             0x20
//#define EX4             0x40

void IR_RX_NEC(void);

void INT1_Isr() interrupt 0
{
   P32 = !P32;                                 //測試端口
}





void  main(void)
{
    P3M0 = 0x00;
    P3M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    pwm_int() ;
        hwKHZ_int();
        //exint1Init();
        
   AUXR = 0x80;    //Timer0 set as 1T, 16 bits timer auto-reload,
   TH0 = (u8)(Timer0_Reload / 256);
   TL0 = (u8)(Timer0_Reload % 256);
   ET0 = 1;    //Timer0 interrupt enable
   TR0 = 1;    //Tiner0 run

    cnt_1ms = SysTick / 1000;
    EA = 1;     //打開總中斷
            
        
        while(1)
        {
          if(B_1ms)   //1ms到
                  {
                          B_1ms = 0;
                 if(B_IR_Press)                //有IR鍵按下
                {
                        switch(IR_code)
                        {
                                case 0x45:
                                    EX0 = 1;                                    //使能INT0中斷,用于喚醒MCU
                                    
                    EA = 1;
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                // PCON = IDL;                                 //MCU進入IDLE模式
                  PCON = PD;                                  //MCU進入掉電模式
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                                                  
                                        break;
                                
                                case 0x46:


                    IT0 = 1;                                    //使能INT1上升沿和下降沿中斷
                //  IT1 = 1;                                    //使能INT1下降沿中斷
                    EX0 = 1;                                    //使能INT1中斷

                    EA = 1;

                    PCON = 0x02;                                //MCU進入掉電模式
                    _nop_();                                    //掉電模式被喚醒后,MCU首先會執行此語句
                                                                //然后再進入中斷服務程序
                    _nop_();
                    _nop_();
                    _nop_();
                                 
                    break;
                        }
                        B_IR_Press = 0;                //清除IR鍵按下標志
                }
             }
                  if (P3^2==0)
                  {
                         pwm = PWM_DUTY *4.4/ 10;     //給PWM一個初值,這里為44%占空比
                         LoadPWM(pwm);
          }                          
                  else
                  {
                   pwm = PWM_DUTY *8.3/ 10;     //給PWM一個初值,這里為83%占空比
                   LoadPWM(pwm);                      //計算PWM重裝值
                  
                  }
                 
        
        }
}




正常工作時的P54腳輸出.jpg (2.01 MB, 下載次數: 35)

正常工作時的P54腳輸出.jpg

掉電模式下的P54腳.jpg (1.95 MB, 下載次數: 35)

掉電模式下的P54腳.jpg

掉電模式下的P32 IR腳輸入.jpg (2.04 MB, 下載次數: 33)

掉電模式下的P32 IR腳輸入.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2022-11-17 16:49 | 只看該作者
CPU掉電喚醒與遙控器控制無關!
何為【掉電】先說一說?CPU在何種情形下,是你所說的【掉電】呢?
何為【喚醒】再說一說?CPU在何種情形下,才能被喚醒呢?
弄清以上兩個問題,就解了。

回復

使用道具 舉報

板凳
ID:161164 發表于 2022-11-17 17:19 | 只看該作者
進入掉電/空閑模式前先把P32置1

回復

使用道具 舉報

地板
ID:1034262 發表于 2022-11-17 17:59 | 只看該作者
進入睡眠(掉電)模式前,先關閉PWM,并將IO輸出確定的電平,否則睡眠時關閉時鐘,PWM會停止,此時可能高也可能低。
睡眠不會影響任何IO的狀態,也不影響內存,所以睡眠前一定要處理好IO。
回復

使用道具 舉報

5#
ID:403593 發表于 2022-11-20 09:44 | 只看該作者
請教一下樓主,這個示波器用起來怎樣?
回復

使用道具 舉報

6#
ID:921294 發表于 2022-11-20 20:12 | 只看該作者
目前我覺得還可以,可以接雙探頭,測PWM波形,遙控器波形還是很方便的,可以保存波形,目前我只用到這些,也很方便攜帶。
回復

使用道具 舉報

7#
ID:921294 發表于 2022-11-23 17:19 | 只看該作者
    非常感謝以上幾位朋友能在百忙中看一下我目前遇到的問題,并給出寶貴的意見。今天由于早下班有時間將程序修改了一下,改用一個按鍵K1接P32來控制(按鍵K1一腳按P32,另一腳接地)進入掉電模式和喚醒。長按進入掉電模式,短按喚醒單片機。功能現在是能實現了,短按喚醒單片機沒有問題,一按就立馬實現。長按進入掉電模式有一點小問題,有1/3的時候不能實現,也就是3次有可能有1次不能進入掉電模式,看波形情況是按下去P54腳沒有波形,松開就有波形,再按1到2次就可以了。搞了一個多小時還沒有好,請朋友們看下問題出在哪里?
    #include  "STC8xxxx.H"
#include  "pwm.h"
#include  "38KHZ.h"
//#include  "IR.h"

#define IDL             0x01                    //PCON.0  IDLE(空閑)模式控制位
#define PD              0x02                    //PCON.1  時鐘停振模式/掉電模式/停電模式 控制位

sbit k1  =P3^2;//STC8G1K08A此腳為外部中斷INT0,在非掉電模式下做按鍵用,按一次改變一次狀態。

u16 jishu=0,ksj=0;





//void IR_RX_NEC(void);

void INT0_Isr() interrupt 0
{
//P32 = !P32;                                 //測試端口

                     EA=1;
                IT0=1;
                EX0=1;
                PCON=0x00;                             
}



void timer0 (void) interrupt 1
{
        TL0 = 0xE0;                //設置定時初始值
            TH0 = 0xB1;                //設置定時初始值
        jishu++;
}




void  main(void)
{
    P3M0 = 0x00;
    P3M1 = 0x00;
        P3PU |= 0x04;
    P5M0 = 0x00;
    P5M1 = 0x00;
    pwm_int() ;
        hwKHZ_int();

       
    AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設置定時器模式
        TL0 = 0xE0;                //設置定時初始值
        TH0 = 0xB1;                //設置定時初始值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時       
        ET0 = 1;
        EA = 1;
       
       
       
       
        while(1)
        {
            if(jishu==10) //如果到了10次,說明10ms秒時間
              {
                if(k1==0)
                        {
//                                                 
                        ksj++;
                        if(1000>ksj>200)                               //長按按鍵標志
                             
                                                                                                                   
                       
                    ksj=0;
                    IE0  = 0;                                        //將INT0中斷請求標志位清"0"                           
                    IT0 = 1;                                    //使能INT1 0 上升沿和下降沿中斷 1下降沿中斷               
                    EX0 = 1;                                    //使能INT1中斷
                    EA = 1;                 
                    PCON = 0x02;                                //MCU進入掉電模式
                    _nop_();                                    //掉電模式被喚醒后,MCU首先會執行此語句
                                                               //手冊中寫到,喚醒會執行中斷命令后一條語句之后轉向中斷
                                                               //然后再進入中斷服務

                    _nop_();
                    _nop_();
                    _nop_();
                                        _nop_();//
                                        _nop_();
                                        _nop_();
                                }                                                                                          
                                   jishu=0;                                        //重新計數       
                                             
                                }   


                               
                  if (P5^5==0)
                  {
                         pwm = PWM_DUTY *4.4/ 10;     //給PWM一個初值,這里為44%占空比
                         LoadPWM(pwm);
          }                          
                  else
                  {
                   pwm = PWM_DUTY *8.3/ 10;     //給PWM一個初值,這里為83%占空比
                    LoadPWM(pwm);                //計算PWM重裝值
                  
                  }
                 
       
        }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品色 | 日本在线视频一区二区 | 国产高清在线精品 | 亚洲精品一区二区网址 | 99精品网 | 亚洲国产精久久久久久久 | 免费一区在线观看 | 亚洲国产中文字幕 | 中文字幕av色 | 日韩精品一区二区三区在线观看 | 国产a爽一区二区久久久 | 国产电影一区二区 | 天天爱爱网 | 国产色 | 羞羞网站在线观看 | 综合二区 | 成年人的视频免费观看 | 欧美精品综合在线 | 久久久久www | 黑色丝袜三级在线播放 | 国产福利视频 | 男人天堂av网 | 成人精品一区二区三区中文字幕 | 国产成人高清成人av片在线看 | 天堂成人国产精品一区 | 日韩电影一区二区三区 | 午夜影院在线观看 | 中文字幕一区二区三区四区五区 | h在线免费观看 | 久久亚洲一区二区三区四区 | 成人亚洲精品 | 欧美另类视频 | 日本一区二区三区视频在线 | 国产精品一区在线观看 | 99国内精品 | h网站在线观看 | 69电影网| 国产在线精品一区二区三区 | 久久国产精品视频 | www.日韩 | 亚洲一区二区三区免费在线观看 |