N76E003 定时唤醒WKT

1、分析

N76E003 定时唤醒WKT_第1张图片
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;

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

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 定时唤醒WKT_第6张图片

你可能感兴趣的:(N76E003,N76E003,单片机,学习)