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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3140|回復(fù): 6
收起左側(cè)

關(guān)于STC8G1K08A單片機(jī)用遙控器控制掉電喚醒的問題

[復(fù)制鏈接]
ID:921294 發(fā)表于 2022-11-17 15:28 | 顯示全部樓層 |閱讀模式
     最近有空剛學(xué)習(xí)掉電喚醒這一塊,用遙控器能讓單片機(jī)進(jìn)入掉電模式,此時能控制P54腳輸出的PWM停止不輸出,但P54腳有時為高電平,有時也為低電平。P32腳(P32腳接接收頭IR)在進(jìn)入掉電模式時,立馬為低電平,此時P32腳用導(dǎo)線觸碰一下高電平(3—5V),可以喚醒單片機(jī),但是再按遙控器不能進(jìn)入掉電模式,關(guān)掉電源再打開,才能用遙控器能讓單片機(jī)進(jìn)入掉電模式。代碼中這種用遙控器控制掉電喚醒的方法是不是行不通,因為只要P32在進(jìn)入掉電模式時,立馬為低電平,這時按遙控器,用示波器測此腳波形,一點反應(yīng)都沒有。有什么其它的好辦法能用遙控器控制掉電喚醒?代碼如下:

單片機(jī)源程序如下:
#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進(jìn)入IDLE模式
                  PCON = PD;                                  //MCU進(jìn)入掉電模式
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                                                  
                                        break;
                                
                                case 0x46:


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

                    EA = 1;

                    PCON = 0x02;                                //MCU進(jìn)入掉電模式
                    _nop_();                                    //掉電模式被喚醒后,MCU首先會執(zhí)行此語句
                                                                //然后再進(jìn)入中斷服務(wù)程序
                    _nop_();
                    _nop_();
                    _nop_();
                                 
                    break;
                        }
                        B_IR_Press = 0;                //清除IR鍵按下標(biāo)志
                }
             }
                  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
掉電模式下的P54腳.jpg
掉電模式下的P32 IR腳輸入.jpg
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2022-11-17 16:49 | 顯示全部樓層
CPU掉電喚醒與遙控器控制無關(guān)!
何為【掉電】先說一說?CPU在何種情形下,是你所說的【掉電】呢?
何為【喚醒】再說一說?CPU在何種情形下,才能被喚醒呢?
弄清以上兩個問題,就解了。

回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2022-11-17 17:19 | 顯示全部樓層
2022-11-17_171730.png 進(jìn)入掉電/空閑模式前先把P32置1

回復(fù)

使用道具 舉報

ID:1034262 發(fā)表于 2022-11-17 17:59 | 顯示全部樓層
進(jìn)入睡眠(掉電)模式前,先關(guān)閉PWM,并將IO輸出確定的電平,否則睡眠時關(guān)閉時鐘,PWM會停止,此時可能高也可能低。
睡眠不會影響任何IO的狀態(tài),也不影響內(nèi)存,所以睡眠前一定要處理好IO。
回復(fù)

使用道具 舉報

ID:403593 發(fā)表于 2022-11-20 09:44 | 顯示全部樓層
請教一下樓主,這個示波器用起來怎樣?
回復(fù)

使用道具 舉報

ID:921294 發(fā)表于 2022-11-20 20:12 | 顯示全部樓層
目前我覺得還可以,可以接雙探頭,測PWM波形,遙控器波形還是很方便的,可以保存波形,目前我只用到這些,也很方便攜帶。
回復(fù)

使用道具 舉報

ID:921294 發(fā)表于 2022-11-23 17:19 | 顯示全部樓層
    非常感謝以上幾位朋友能在百忙中看一下我目前遇到的問題,并給出寶貴的意見。今天由于早下班有時間將程序修改了一下,改用一個按鍵K1接P32來控制(按鍵K1一腳按P32,另一腳接地)進(jìn)入掉電模式和喚醒。長按進(jìn)入掉電模式,短按喚醒單片機(jī)。功能現(xiàn)在是能實現(xiàn)了,短按喚醒單片機(jī)沒有問題,一按就立馬實現(xiàn)。長按進(jìn)入掉電模式有一點小問題,有1/3的時候不能實現(xiàn),也就是3次有可能有1次不能進(jìn)入掉電模式,看波形情況是按下去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,在非掉電模式下做按鍵用,按一次改變一次狀態(tài)。

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;                //設(shè)置定時初始值
            TH0 = 0xB1;                //設(shè)置定時初始值
        jishu++;
}




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

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

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


                               
                  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重裝值
                  
                  }
                 
       
        }
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色久五月 | 亚洲日本一区二区三区四区 | 日韩欧美三级 | 久久久入口 | 午夜精品网站 | 国产精品3区 | 国产精品欧美精品 | wwww.xxxx免费 | 久久久久久高清 | 一级全黄少妇性色生活免费看 | 免费视频一区 | 国产一区二区精品自拍 | 国产98色在线 | 日韩 | 黄色国产在线播放 | 久草在线| 久草高清视频 | 人人干在线视频 | 黄色免费网站在线看 | 色偷偷888欧美精品久久久 | 久久国产精彩视频 | 91色视频在线观看 | 成人欧美一区二区 | 日本久久精品视频 | 午夜影院官网 | 在线亚洲人成电影网站色www | 九九在线视频 | 国产精品久久久久久久午夜 | 欧美日韩亚洲三区 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 国产精品99久久久久久久vr | 古典武侠第一页久久777 | 日韩美女一区二区三区在线观看 | 毛片免费视频 | 性色在线 | 中文字幕视频一区 | 成人在线小视频 | 国产精品美女久久久av超清 | 少妇性l交大片免费一 | 国产精品久久国产精品 | 盗摄精品av一区二区三区 | 色综合天天天天做夜夜夜夜做 |