找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于STC8G1K08A单片机用遥控器控制掉电唤醒的问题

查看数: 3374 | 评论数: 6 | 收藏 3
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-11-17 15:28

正文摘要:

     最近有空刚学习掉电唤醒这一块,用遥控器能让单片机进入掉电模式,此时能控制P54脚输出的PWM停止不输出,但P54脚有时为高电平,有时也为低电平。P32脚(P32脚接接收头IR)在进入掉电模式时 ...

回复

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重装值
                  
                  }
                 
       
        }
}
ID:921294 发表于 2022-11-20 20:12
目前我觉得还可以,可以接双探头,测PWM波形,遥控器波形还是很方便的,可以保存波形,目前我只用到这些,也很方便携带。
ID:403593 发表于 2022-11-20 09:44
请教一下楼主,这个示波器用起来怎样?
ID:1034262 发表于 2022-11-17 17:59
进入睡眠(掉电)模式前,先关闭PWM,并将IO输出确定的电平,否则睡眠时关闭时钟,PWM会停止,此时可能高也可能低。
睡眠不会影响任何IO的状态,也不影响内存,所以睡眠前一定要处理好IO。
ID:161164 发表于 2022-11-17 17:19
进入掉电/空闲模式前先把P32置1

ID:123289 发表于 2022-11-17 16:49
CPU掉电唤醒与遥控器控制无关!
何为【掉电】先说一说?CPU在何种情形下,是你所说的【掉电】呢?
何为【唤醒】再说一说?CPU在何种情形下,才能被唤醒呢?
弄清以上两个问题,就解了。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表