一、 WDT相關寄存器的設置
1.1 WDT喚醒IC in sleep2
1、 設定CONT寄存器中的bit3(PAB)位,確定是否使用預分頻器;
7 6 5 4 3 2 1 0
/PHEN /INT - - PAB PSR2 PSR1 PSR0
Bit3: 預分頻分配位。
0: TCC;1: WDT。
2、 設定預分頻系數,即設定CONT寄存器的PSR2、PSR1、PSR0位;
3、如果使能WDT喚醒,建議客戶P6,P74-P75,P90-P91口輸入喚醒禁止。
原因:WDT喚醒和P6,P74-P75,P90-P91口輸入喚醒同時使能,當同時喚醒時,IC會優先reset,而不去執行P6,P74-P75,P90-P91口輸入喚醒后的程式,故如果使能WDT喚醒,建議客戶P6,P74-P75,P90-P91口輸入喚醒禁止
4、 WDTC,使能看門狗定時器(WDT);將IOCE寄存器bit5與bit1置1;
7 6 5 4 3 2 1 0
- ODE WDTE SLPC ROC - - /WUE
Bit0: 用于定義P60-P67、P74-P75、P90-P91的喚醒功能控制位。
0: 喚醒功能有效; 1: 喚醒功能無效
Bit4:
此位有硬件在喚醒信號的下降沿置1,由軟件進行清0。SLPC用于控制振蕩器振蕩。當由高到低變化時,振蕩器停振(控制器進入SLEEP2模式)。當由低到高變化時,振蕩器起振(控制器從SLEEP2模式喚醒)。
Bit5: WDT控制位。
0: WDT無效; 1: WDT有效。
WDTE位僅在代碼選項位ENWDT為“1”時才有效。
5、 使IOCE寄存器SLPC位由1到0,進入SLEEP2
1.2 WDT喚醒IC in sleep1
1、 設定CONT寄存器中的bit3(PAB)位,確定是否使用預分頻器;
2、 設定預分頻系數,即設定CONT寄存器的PSR2、PSR1、PSR0位,;
3、 WDTC,使能看門狗定時器(WDT);將IOCE寄存器bit5置1
4、 下指令SLEP
二、WDT喚醒時間計算
1. SETUP TIME:18.0ms±30%(vdd==3v)
注:當vdd電壓變化時SET TIME會相應變化
2. WDT的喚醒時間
CRYSTAL MODE RC MODE
WDT的喚醒時間 Setup time*prescaler+ setup time
3. 上表中setuptime*prescaler的時間
對CONT寄存器的后4位
當PAB==0,setuptime*prescaler== setuptime
當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
三、應用舉例
以下代碼是實現用WDT喚醒EM78P451S的Demo
Code,Port5.1端口輸出脈沖,可用來測量睡眠時間,也可接LED燈來進行觀測。
3.A WDT喚醒IC in sleep2
Port5 == 0x05 ; Port5端口
IOCE == 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 Port5 ; 設置Port5口輸出
BS Port5, num ; Port5.1輸出脈沖
MOV A, @255 ; 等待(P5.1可接LED燈)
CALL Wdt_Delay
BC Port5, num
;----------------------------------------------------------------------;
CONTR
AND A, @0b11110000 ; 保留不需要設置的狀態位
OR A, @0b00001011 ; 將分頻器分配給WDT,預除數設為16
CONTW
WDTC
MOV A, @0b00110001 ; 打開看門狗,避免進入SLEEP2,禁止
IOW IOCE ; 禁止引腳喚醒功能
IOR IOCE
AND A, @0b11101111 ; 進入SLEEP2
IOW IOCE
NOP
LOOP:
NOP
JMP LOOP
END
3.B WDT喚醒IC in sleep1
Port5 == 0x05 ; Port5端口
IOCE == 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 Port5 ; 設置Port5口輸出
BS Port5, num ; Port5.1輸出脈沖
MOV A, @255 ; 等待(P5.1可接LED燈)
CALL Wdt_Delay
BC Port5, num
;----------------------------------------------------------------------;
CONTR
AND A, @0b11110000 ; 保留不需要設置的狀態位
OR A, @0b00001011 ; 將分頻器分配給WDT,預除數設為16
CONTW
WDTC
MOV A, @0b00110001 ; 打開看門狗,避免進入SLEEP2,禁止
IOW IOCE
SLEP
NOP
LOOP:
NOP
JMP LOOP
END