N76E003|N76E003 定时唤醒WKT

1、分析 N76E003|N76E003 定时唤醒WKT
文章图片

10KHz内部振荡器,通过WKTR寄存器控制是否启动,后进入分频器,通过WKPS进行预分频(1/1 到 1/2048),再通过RWK重载值,实现对溢出速度的控制,最后通过WKTF溢出标志触发自动唤醒定时器中断。
计算公式大致如下
定时时间/((Pre-scalar预分频+1)/10)=255-重载值(RWK)
eg:
定时1000ms,64分频,算重载值
1000/((64+1)/10)=153

RWK =255-153; //最好做成这样

eg:定时2000ms,256分频(不能超过RWK的范围),算重载值
2000/25.7=77
RWK =255-77;

【N76E003|N76E003 定时唤醒WKT】(PS:计算出来的重载值会存在一定的误差,可能并不会是最符合实际情况的,有条件最好使用逻辑分析仪或示波器测量确定)
N76E003|N76E003 定时唤醒WKT
文章图片

N76E003|N76E003 定时唤醒WKT
文章图片

N76E003|N76E003 定时唤醒WKT
文章图片

N76E003|N76E003 定时唤醒WKT
文章图片

2、代码&验证
#include "N76E003.h" #include "Common.h" #include "Delay.h" #include "SFR_Macro.h" #include "Function_define.h"sbit LED=P0^4; void main (void) {Set_All_GPIO_Quasi_Mode; LED=1; WKCON =0x04; //预分频配置256 //RWK = 0XFF; // if prescale is 0x00, never set RWK = 0xff RWK =255-76; //定时2s set_EWKT; //使能定时唤醒中断 set_WKTR; //开启定时唤醒功能 EA = 1; //开启总中断 while(1); }//---------定时唤醒中断服务程序-------------- void WakeUp_Timer_ISR (void)interrupt 17 { LED=~LED; //翻转电平 clr_WKTF; //清除WKT溢出标志位 }

N76E003|N76E003 定时唤醒WKT
文章图片

    推荐阅读