一、WDT相關(guān)寄存器的設(shè)置
1、 設(shè)定IOCE0寄存器中的bit7(WDTE)位,使能看門狗定時器(WDT);
bit7: 看門狗定時器的使能控制位
1: 使能; 0: 禁止
bit0-bit2: TCC/WDT預(yù)分頻系數(shù)分配位。
7 6 55 4 3 2 1 0
WDTE EIS - - - PSW2 PSW1 PSW0
2、 設(shè)定預(yù)分頻系數(shù),即設(shè)定IOCE0寄存器的PSW2、PSW1、PSW0位;
3、 如果使能WDT喚醒,建議客戶P5口輸入喚醒或比較器喚醒禁止。
原因:WDT喚醒和P5口輸入喚醒或比較器喚醒同時使能,當(dāng)同時喚醒時,IC會優(yōu)先reset,而不去執(zhí)行P5口輸入喚醒后的程式或比較器喚醒后的程式,故如果使能WDT喚醒,建議客戶P5口輸入喚醒或比較器喚醒禁止
4、 WDTC,使能看門狗定時器(WDT),將IOCE0寄存器bit7置1
5、 下指令SLEP
二、WDT喚醒時間計算
1. SETUP TIME:17.6ms±30%(vdd==3v)
注:當(dāng)vdd電壓變化時SET TIME會相應(yīng)變化
2. WDT的喚醒時間
CRYSTAL MODE RC MODE(ERC or IRC)
WDT的喚醒時間 Setup time*prescaler+ setup time
3. 上表中setuptime*prescaler的時間
對IOCE0寄存器的后3位
當(dāng)PAB==1,setuptime*prescaler== NUM*setuptime
NUM PS2 PS1 PS0
1 0 0 0
2 0 0 1
4 0 1 0
8 0 1 1
16 1 0 0
32 1 0 1
64 1 1 0
128 1 1 1
三、應(yīng)用舉例
以下代碼是實現(xiàn)用WDT喚醒EM78P257A的Demo
Code,Port6.1端口輸出脈沖,可用來測量睡眠時間,也可接LED燈來進行觀測。
R3 == 0x03 ; 狀態(tài)寄存器
Port6 == 0x06 ; port6端口
IOCE0 == 0x0E ; WDT控制寄存器
RF == 0x0F ; 中斷狀態(tài)寄存器
Wdt_buf == 0x20 ; 延時緩沖器
Num == 1
;----------------------------MAIN
PROGRAM------------------------------;
ORG 0X00
JMP Wdt_Start
ORG 0x01
;----------------------------------------------------------------------;
Wdt_Delay:
MOV Wdt_buf, A
Wdt_Delay_Loop:
DJZ Wdt_buf
JMP Wdt_Delay_Loop
RET
;----------------------------------------------------------------------;
Wdt_Start:
BC R3, 6
MOV A, @0b00000000
IOW IOC60 ; 設(shè)置port6為輸出端口
BS Port6, num ; port6.1輸出脈沖
MOV A, @255 ; 延時
CALL Wdt_Delay
BC Port6, num
;----------------------------------------------------------------------;
MOV A, @0b00000000
IOW RF ; 禁止P5口輸入變化中斷
WDTC
IOR IOCE0
AND A, @0b01111000 ; 保留不需要設(shè)置的狀態(tài)位
OR A, @0b10000011 ; 打開看門狗,設(shè)置預(yù)除數(shù)為16
IOW IOCE0
SLEP ; 進入睡眠
NOP
LOOP:
NOP
JMP LOOP
END