定时器掉电唤醒请教
大家好,写了个定时器掉电唤醒,唤醒后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)
{}
}
你用示波器还是LED来观察的?
假如定时器正常工作你能看到啥变化?
建议P3_7=0改为P3_7=~P3_7;
进入PD状态之前需要做的:
打开需要唤醒的中断和总中断
关闭不需要唤醒的中断
清除所有使用的中断标志位
发完数据包
进入PD状态前后各加4个nop
主频接近极限频率时:
初始化正确设置IAP_TPS
初始化设置IRCDB=16 加了可以定时唤醒,不过定时器1 重新掉电,初始化和所有必要中断都打开了,还是不起作用,请问是哪里出问题 IAP_TPS=11;
IRCDB=16;
WKTCL = 0xff; //设定掉电唤醒时钟约为 1 秒钟
WKTCH = 0x87;
中断有反应了,频率11.0592,这个1秒好像不准的 haly123 发表于 2026-1-29 16:50
IAP_TPS=11;
IRCDB=16;
WKTCL = 0xff; //设定掉电唤醒时钟约为 1 秒钟
掉电唤醒定时器不会太准的,,, 你这个程序有问题啊,不要在中断服务函数里让单片机进入掉电模式可以在里面建立一个flag,在main函数里检查这个flag是否为一,如过为一的话就清除定时器计数器和flag为零然后进入掉电模式。 没用,唤醒一次后无论在定时器里面或者main里面都不会再进掉电模式
页:
[1]