应广单片机PMS132B,使用ILRC实现秒级定时唤醒,校准时间,功耗控制在10μA左右

应广单片机PMS132B,使用ILRC实现秒级定时唤醒,校准时间,功耗控制在10μA左右

变量定义:

WORD    g_wT16Ture1s_cnt,g_wT16Now1s_cnt;

宏:

ADJUST_IC   MACRO
	$ T16M ILRC,/4,bit15;		//ILRC作为时钟源 4分频
	g_wReload_t16 = 0;	
	stt16 g_wReload_t16;		//将计数清0 
   .delay 15625*4 - 1;		//根据自己的频率来延时1/64秒,这里是4M的频率,所以乘以4
	LDT16 g_wT16Now1s_cnt;	//取出重装载数据
   $ T16M stop; 				
   g_wT16Now1s_cnt <<= 6;	//将重装载值扩大64倍得出1秒的重装载值大小,因为计算的是1/64秒 
	g_wT16Ture1s_cnt = (g_wT16Now1s_cnt + g_wT16Ture1s_cnt) >> 1; //取平均
ENDM

主函数插入 计算重装载值的大小

	.ADJUST_IC  SYSCLK=IHRC/4,IHRC=16Mhz, VDD=3.3V;	//4Mhz的频率
	$ T16M ILRC,/4,bit15;
	g_wReload_t16 = 0;
	stt16 g_wReload_t16;			
	.delay 1000000*4 - 1;			//延时1秒
	LDT16 g_wT16Ture1s_cnt;		//取出首次计算的重装载值

省电模式函数,定时一秒唤醒,并重新计算重装载数值,取平均值

BYTE CLKMD_BK;
CLKMD_BK = CLKMD;
while(1){
	$ CLKMD ILRC/1,En_IHRC,En_ILRC;		//使用ILRC作为时钟源
	CLKMD.En_IHRC = 0;								
	nop;
	g_wReload_t16 = 32768 - (g_wT16Ture1s_cnt);		//定时1秒,计算公式可查看应广文档
	stt16 g_wReload_t16;
	$ T16M ILRC,/4,bit15;
	INTRQ.T16 = 0; 
	INTEN.T16 = 1;
	stopexe;
	//不需要每次都唤醒,自定义需求
	CLKMD = CLKMD_BK;
	ADJUST_IC;												//醒后再次校准,取平均值
	//省略代码:按键按下 或 时间到达预定退出循环,终止省电模式
	......
}
$ T16M  Stop;
$ CLKMD ILRC/1,En_IHRC,En_ILRC;
$ CLKMD IHRC/4,EN_IHRC,EN_ILRC;							//切换频率
nop;
CLKMD = CLKMD_BK;
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ySh_ppp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值