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