- #include "reg51.h"
- #include "intrins.h"
- sfr WKTCL=0xAA; //掉電喚醒定時器計時低字節
- sfr WKTCH=0xAB; //掉電喚醒定時器計時高字節
- sfr P6=0xE8;
- void main()
- {
- unsigned char i;
- //長時間休眠只有重復進入掉電模式,單次最大設置數32767,也就是32766+1,約16秒
- WKTCL = 0xfe; //設置喚醒周期為488us*(32766+1)≈16s
- WKTCH = 0xff; //使能掉電喚醒定時器 +高7位值
-
- while(1)
- {
- i=38; //16s*38=10min 注:內部低頻振蕩器誤差較大需要修正
- while(i--)
- {
- PCON = 0x02; //進入掉電模式
- _nop_(); //掉電模式被喚醒后,直接從此語句開始向下執行,不進入中斷服務程序
- _nop_();
- }
- P6=~P6; //掉電喚醒后,取反測試口
- }
- }
復制代碼 |