睡眠定時器:
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 ...