|
一、WDT相關(guān)寄存器的設(shè)置 1、 設(shè)定CONT寄存器中的bit3(PAB)位,選擇是否使用預(yù)分頻器; 7 6 5 4 3 2 1 0 - INT TS TE PAB PSR2 PSR1 PSR0 bit3: 預(yù)分頻分配位。 0: TCC; 1: WDT bit0-bit2: TCC/WDT預(yù)分頻系數(shù)分配位。 2、 設(shè)定預(yù)分頻系數(shù),即設(shè)定CONT寄存器的PSR2、PSR1、PSR0位; 3、 如果使能WDT喚醒,建議客戶P6口輸入喚醒禁止。 原因:WDT喚醒和P6口輸入喚醒同時使能,當(dāng)同時喚醒時,IC會優(yōu)先reset,而不去執(zhí)行P6口輸入喚醒后的程式,故如果使能WDT喚醒,建議客戶P6口輸入喚醒禁止 4、 WDTC,使能看門狗定時器(WDT);只需將IOCE寄存器bit7置成1; 7 6 55 4 3 2 1 0 WDTE EIS - ROC - - - - bit7: 看門狗定時器的使能控制位 0: WDT 禁止; 1: WDT 使能 5. 下指令SLEP 二、WDT喚醒時間計算 1. SETUP TIME:16.8ms±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 三、舉例說明 以下代碼是實現(xiàn)用WDT喚醒MCU的Demo Code,Port6.1端口輸出脈沖,可用來測量睡眠時間,也可接LED燈來進(jìn)行觀測。 Port5 == 0x06 ; port5端口 IOCE == 0x0E ; WDT控制寄存器 RF == 0x0F ; 中斷狀態(tài)寄存器 Wdt_buf == 0x20 ; 延時緩沖器 Num == 1 ;----------------------------MAIN PROGRAM------------------------------; ORG 0X00 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 ; Set port6 as output pin BS Port5, num ; P5.1輸出脈沖,可用來測量睡眠時間 MOV A, @255 ; 等待(也可接LED燈進(jìn)行觀測) CALL Wdt_Delay BC Port5, num ;----------------------------------------------------------------------; CONTR AND A, @0b11110000 ; 保留不需要設(shè)置的狀態(tài)位 OR A, @0b00001011 ; 把分頻器分配給WDT,分頻系數(shù)為16 CONTW MOV A, @0b00000000 IOW RF ; 禁止P6口輸入變化中斷 WDTC IOR IOCE OR A, @0b10000000 IOW IOCE ; 打開看門狗 SLEP ; 進(jìn)入睡眠 NOP LOOP: NOP JMP LOOP END |