一、WDT相關(guān)寄存器的設(shè)置
1.1 WDT喚醒IC in sleep2
1、 設(shè)定CONT寄存器中的bit3(PAB)位,確定是否使用預(yù)分頻器;
7 6 5 4 3 2 1 0
/PHEN /INT TS TE PAB PSR2 PSR1 PSR0
2、 設(shè)定預(yù)分頻系數(shù),即設(shè)定CONT寄存器的PSR2、PSR1、PSR0位;
3、 如果使能WDT喚醒,建議客戶P6,P74-P75口輸入喚醒禁止。
原因:WDT喚醒和P6,P74-P75口輸入喚醒同時使能,當(dāng)同時喚醒時,IC會優(yōu)先reset,而不去執(zhí)行P6,P74-P75口輸入喚醒后的程式,故如果使能WDT喚醒,建議客戶P6,P74-P75口輸入喚醒禁止
7 6 5 4 3 2 1 0
/WUE7 /WUE6 /WUE5 /WUE4 /WUE3 /WUE2 /WUE1 /WUE0
Bit0-bit7: 使能PORT6.1-PORT6.7引腳喚醒功能的控制位;
0: 使能內(nèi)部喚醒; 1: 禁止內(nèi)部喚醒
4、 WDTC,使能看門狗定時器(WDT),將IOCE寄存器bit5與bit1置1
7 6 5 4 3 2 1 0
- ODE WDTE SLPC ROC - - /WUE
Bit0: 使能P74、P75引腳喚醒功能。
0: 使能喚醒功能;1: 禁止喚醒功能。
Bit4:
該位由喚醒信號低電平引起硬件觸發(fā)置1,有軟件清0,SLEP用于控制振蕩器的工作。在SLPC位從1變成0時,振蕩器被禁止(單片機(jī)進(jìn)入睡眠模式2),在SLPC位從0變成1,振蕩器使能(單片機(jī)由休眠模式喚醒)。
Bit5: 看門狗使能控制位
0: 禁止WDT;1: 使能WDT
5、 使IOCE寄存器SLPC位由1到0,進(jìn)入SLEEP2
1.2 WDT喚醒IC in sleep1
1、 設(shè)定CONT寄存器中的bit3(PAB)位,確定是否使用預(yù)分頻器
2、 設(shè)定預(yù)分頻系數(shù),即設(shè)定CONT寄存器的PSR2、PSR1、PSR0位;
3、 WDTC,使能看門狗定時器(WDT),將IOCE寄存器bit5置1
4、 下指令SLEP
二、WDT喚醒時間計算
1. SETUP TIME:19.6ms±30%(vdd==3v)
注:當(dāng)vdd電壓變化時SET TIME會相應(yīng)變化
2. WDT的喚醒時間
CRYSTAL MODE RC MODE
WDT的喚醒時間 Setup time*prescaler+ setup time
3. 上表中setuptime*prescaler的時間
對CONT寄存器的后4位
當(dāng)PAB==0,setuptime*prescaler== setuptime
當(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喚醒EM78P447S的Demo
Code,Port6.1端口輸出脈沖,可用來測量睡眠時間,也可接LED燈來進(jìn)行觀測。
3.A WDT喚醒IC in sleep2
Port6 == 0x06 ; port6端口
IOCB == 0x0B ; Port6端口喚醒控制器
IOCE0 == 0x0E ; WDT控制寄存器
Wdt_buf == 0x20 ; 延時緩沖器
Num == 1
;----------------------------MAIN
PROGRAM------------------------------;
ORG 0XFFF
JMP Wdt_Start
ORG 0x10
;----------------------------------------------------------------------;
Wdt_Delay:
MOV Wdt_buf, A
Wdt_Delay_Loop:
DJZ Wdt_buf
JMP Wdt_Delay_Loop
RET
;----------------------------------------------------------------------;
Wdt_Start:
MOV A, @0b00000000
IOW PORT6
BS PORT6, num
MOV A, @255
CALL Wdt_Delay
BC PORT6, num
;----------------------------------------------------------------------;
CONTR
AND A, @0b11110000 ; 保留不需要設(shè)置的狀態(tài)位
OR A, @0b00001011 ; 把分頻器分配給WDT,預(yù)除數(shù)設(shè)為16
CONTW
MOV A, @0xFF ; 禁止Port6內(nèi)部喚醒功能
IOW IOCB
WDTC
MOV A, @0b00110001 ; 打開看門狗
IOW IOCE ; 禁止P74、P75引腳喚醒功能
IOR IOCE
AND A, @0b11101111 ; 進(jìn)入SLEEP2
IOW IOCE
NOP
LOOP:
NOP
JMP LOOP
END
3.B WDT喚醒IC in sleep1
Port6 == 0x06 ; port6端口
IOCB == 0x0B ; Port6端口喚醒控制器
IOCE0 == 0x0E ; WDT控制寄存器
Wdt_buf == 0x20 ; 延時緩沖器
Num == 1
;----------------------------MAIN
PROGRAM------------------------------;
ORG 0XFFF
JMP Wdt_Start
ORG 0x10
;----------------------------------------------------------------------;
Wdt_Delay:
MOV Wdt_buf, A
Wdt_Delay_Loop:
DJZ Wdt_buf
JMP Wdt_Delay_Loop
RET
;----------------------------------------------------------------------;
Wdt_Start:
MOV A, @0b00000000
IOW PORT6
BS PORT6, num
MOV A, @255
CALL Wdt_Delay
BC PORT6, num
;----------------------------------------------------------------------;
CONTR
AND A, @0b11110000 ; 保留不需要設(shè)置的狀態(tài)位
OR A, @0b00001011 ; 把分頻器分配給WDT,預(yù)除數(shù)設(shè)為16
CONTW
WDTC
MOV A, @0b00110001 ; 打開看門狗,
IOW IOCE
SLEP
NOP
LOOP:
NOP
JMP LOOP
END