close

*WDT 僅能在正常電源模式及 Idle Mode 工作,Power-down Mode 沒有 Clock,所以不能工作

 

無 Pre-Scaling 的 WDT 操作

以 AT89S51 為例,關聯的 SFR 有:

WDTRST(0A6H) 

AUXR(4:3)(08EH)

AUXR.jpg    

其中,

WDIDLE(Disable/Enable WDT in IDLE mode)

0(預設): 在 IDLE MODE 繼續計數

1: 在 IDLE MODE 不計數

DISRTO(Disable/Enable Reset-out)

0(預設): Reset pin is driven High after WDT times out

1: Reset pin is input only

S51 的 Watch Timer 是固定 14-bit 的,計數範圍由 0~214-1 即 0~16383 ,每個機械週期 Count 一次,沒有 Pre-Scaling 可以設定(不能調整 Time out 時間);以 12MHz 的 Crystal 來計算,Time out 時間:

16384 * 1us = 16.384 msec

計數 16384 個 Count (16.384msec) 之後溢位,觸發 WDT Reset。

 

使用上只要在程式開頭及 16384 個機械週期內在 WDTRST 依序寫入 01EH 及 0E1H 即可。

範例:

ORG00H

MOV         WDTRST,#01EH

MOVWDTRST,#0E1H;致能 WDT

...

...

...

MAIN_ROUTING:

MOVWDTRST,#01EH

MOVWDTRST,#0E1H;WDT 歸零,重新計數

...

...

...

SUB_ROUTING1:

MOVWDTRST,#01EH

MOVWDTRST,#0E1H;WDT 歸零,重新計數

...

...

...

SUB_ROUTING2:

MOVWDTRST,#01EH

MOVWDTRST,#0E1H;WDT 歸零,重新計數

...

...

...

 


 

具有 Pre-Scaling 功能的 WDT 操作

以 Megawin 的 MPC89E(L)51A 為例,關聯的 SFR 有:

WDTCR(0E1H) 

WDTCR.jpg  

其中,

ENW(WDT 致能)

0(預設): 不開啟 WDT

1: WDT 致能

CLRW(WDT 歸零)

0(預設): 無動作

1: 歸零重新計數,設 1 後會自動被硬體清除

WILD(是否在 IDLE MODE 下計數)

0(預設): 在 IDLE MODE 下繼續計數

1: 在 IDLE MODE 不計數

PS2:0(計數尺度,SCALE 為 8 的時候,每 8 個機械週期計數一次,亦即 8 倍於 1 個 SCALE 的週期)

{PS2, PS1, PS0}

{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}:256

 

由於這顆 MCU 的 WDT 是 15-bit 的,所以計數範圍為:0~215-1 即 0~32767,最低尺度是 2 個機械週期 Count 一次,也當尺度為 2 的時候,65536 個機械週期內必須至少歸零一次(相當於 16-bit WDT),否則將觸發 WDT Reset。

 

Pre-Scaling 的 Time out 時間(使用12MHz震盪器):

Pre-Scaling = 2 時,

2 * 215 * 1us = 0.065536 = 65.536 msec

Pre-Scaling = 4 時,

4 * 215 * 1us = 0.131072 = 131.072 msec

震盪頻率=12MHz 時的 WDT 計數週期速查:

12M_Scaling.jpg  

 

範例:

ORG00H

MOVWDTCR,#00100010B;致能 WDT,設定尺度為 8

...

...

...

MAIN_ROUTING:

ORLWDTCR,#00010000B ;設定 CLRW 為 1,WDT 歸零

...

...

...

SUB_ROUTING1:

ORLWDTCR,#00010000B ;設定 CLRW 為 1,WDT 歸零

...

...

...

SUB_ROUTING2:

ORLWDTCR,#00010000B ;設定 CLRW 為 1,WDT 歸零

...

...

...



arrow
arrow

    eeStuff 發表在 痞客邦 留言(0) 人氣()