haly123 发表于 2026-1-29 15:14:45

定时器掉电唤醒请教

大家好,写了个定时器掉电唤醒,唤醒后P3_7不变化,还有定时器1不工作,看看怎么回事


void Timer1_Init(void)               
{
    AUXR |= 0x40;                        // 仅置bit6=1,T1设为1T模式(不影响T0)
    TMOD &= 0x0F;                        // 清除T1的模式位(高4位),不影响T0

          TL1 = 0x66;                                 //65536-11.0592M/12/1000
    TH1 = 0xfc;
          TF1 = 0;                                // 清除溢出标志
    TR1 = 1;                                    //启动定时器
    ET1 = 1;                                    //使能定时器中断
}

//定时器1中断处理
void timer1(void) interrupt 3
{
    count1++;
       
        if(count1>100)//添加定时进入掉电模式
{

                        _nop_();
                        _nop_();
                       //   PCON = IDL;                                 //MCU进入IDLE模式
                        PCON = PD;                                  //MCU进入掉电模式
                        _nop_();
                        _nop_();

                        TR1 = 0;
              count1=0;
                 P3_7=0;
       
}
       
}

void main()
{
          P0M0 = 0x00; P0M1 = 0x00;
          P1M0 = 0x00; P1M1 = 0x00;
          P2M0 = 0x00; P2M1 = 0x00;
          P3M0 = 0x00; P3M1 = 0x00;

    WKTCL = 0xff;
    WKTCH = 0x87;


Timer1_Init();
EA = 1;
          _nop_();
    _nop_();
    _nop_();
    _nop_();
//   PCON = IDL;                                 //MCU进入IDLE模式
    PCON = PD;                                  //MCU进入掉电模式
    _nop_();
    _nop_();
    _nop_();
    _nop_();
P3_7=1;

        while(1)
        {}
}

lcwswust 发表于 2026-1-29 15:34:49

你用示波器还是LED来观察的?
假如定时器正常工作你能看到啥变化?
建议P3_7=0改为P3_7=~P3_7;

DebugLab 发表于 2026-1-29 15:56:58

进入PD状态之前需要做的:
打开需要唤醒的中断和总中断
关闭不需要唤醒的中断
清除所有使用的中断标志位
发完数据包

进入PD状态前后各加4个nop

主频接近极限频率时:
初始化正确设置IAP_TPS
初始化设置IRCDB=16

haly123 发表于 2026-1-29 16:21:27

加了可以定时唤醒,不过定时器1 重新掉电,初始化和所有必要中断都打开了,还是不起作用,请问是哪里出问题

haly123 发表于 2026-1-29 16:50:11

        IAP_TPS=11;
        IRCDB=16;
        WKTCL = 0xff; //设定掉电唤醒时钟约为 1 秒钟
        WKTCH = 0x87;

中断有反应了,频率11.0592,这个1秒好像不准的      

_奶咖君_ 发表于 2026-1-30 10:16:14

haly123 发表于 2026-1-29 16:50
IAP_TPS=11;
        IRCDB=16;
        WKTCL = 0xff; //设定掉电唤醒时钟约为 1 秒钟


掉电唤醒定时器不会太准的,,,

宁阳刘德华 发表于 2026-1-30 10:59:37

你这个程序有问题啊,不要在中断服务函数里让单片机进入掉电模式可以在里面建立一个flag,在main函数里检查这个flag是否为一,如过为一的话就清除定时器计数器和flag为零然后进入掉电模式。

haly123 发表于 2026-1-30 14:40:05

没用,唤醒一次后无论在定时器里面或者main里面都不会再进掉电模式
页: [1]
查看完整版本: 定时器掉电唤醒请教