zigbee學習之睡眠定時器

2021-09-23 23:33:43 字數 1323 閱讀 4147

睡眠定時器:

void initsleeptimer(void) 

void syspowermode(uchar mode) //設定系統睡眠模式 mode等於0為pm0 1為pm1 2為pm2 3為pm3    

else 

pcon = 0x00;         //通過中斷喚醒系統  }

#pragma vector = st_vector (中斷向量)

__interrupt void st_isr(void)   

void set_st_period(uint sec) //設定睡眠時間 

main函式中:

initsleeptimer();        //初始化休眠定時器

set_st_period(5);   //設定睡眠時間,睡眠5秒後喚醒系統

syspowermode(2);    //重新進入睡眠模式pm2 當時間到達的時候進入中斷,中斷裡面喚醒睡眠模式

電源管理暫存器如下:

pcon

[7:1] 未使用。總是寫作 0000 000 。

[0 ]供電模式控制。寫 1 到該位強制裝置進入 sleep.mode注意 (mode=0x00 且 idle = 1

將停止 cpu 核心活動)設定的供電模式,這位讀出來一直是 0 。當活動時,所有的使能

中斷將清除這個位,裝置將重新當活動時,所有進入主動模式。

sleepcmd

[7]  禁用32khzrc振盪器校準 0:使能32khzrc振盪器校準 1:禁用32khzrc振盪器校準這個

設定可以在任何時間寫入,但是在晶元執行在 16mhz 高頻 rc 振盪器之前不起作用。

[6 :3] 保留

[2]總是寫作 1 保留

[1:0] 供電 模式設定

0 0 : 主動 / 空閒模式

0 1 : 供電 模式 1

1 0 : 供電 模式 2

1 1 : 供電 模式 3//深度睡眠模式,只能復位或者中斷喚醒

睡眠模式3(深度睡眠只能夠復位或者外部中斷來喚醒)

下面這兩項是不用設定的,因為用到的外部中斷,跟內部的睡眠定時器中斷沒有關係。

stie = 0;   //睡眠定時器中斷使能 0: 中斷禁止     1: 中斷使能

stif = 0;   //睡眠定時器中斷標誌 0: 無中斷未決   1: 中斷未決

#pragma vector = p0int_vector 

__interrupt void p0_isr(void)   

p0if = 0; 

syspowermode(4);         //正常工作模式

zigbee學習之睡眠定時器

睡眠定時器 void initsleeptimer void void syspowermode uchar mode 設定系統睡眠模式 mode等於0為pm0 1為pm1 2為pm2 3為pm3 else pcon 0x00 通過中斷喚醒系統 pragma vector st vector 中斷向...

zigbee學習之定時器

以下是我自己的總結,我不會分析 簡單講起來沒有好大意思,主要是抓住核心知識框架。脈衝 32mhz就是一秒鐘32000000個脈衝 時鐘週期 1 f 1 32us 指令週期等於時鐘週期 在51中是機械週期 12 時鐘週期 內部是16mhz,定時器內部乙個脈衝,定時器計數就加一 定時器 1 查詢法 t1...

zigbee基礎應用(四)定時器

1.暫存器相關 舉個栗子 t1ctl 0x0d 128分頻,自動重灌 0x0000 0xffff t1stat 0x21 通道0,中斷有效 2.程式案例 描述 通過定時器t1查詢方式控制led1周 期性閃爍 include define uint unsigned int define uchar ...