全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3471
推到 Plurk!
推到 Facebook!

8051看門狗使用方法

尚未結案
vsopk999
一般會員


發表:1
回覆:4
積分:1
註冊:2011-09-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-11-16 19:29:22 IP:163.17.xxx.xxx 訂閱
在C语言中要增加一个声明语句。
在AT89X51.h声明文件中增加一行 sfr WDTRST = 0xA6;
Main()
{
WDTRST=0x1E; WDTRST=0xE1;//初始化看门狗。
While (1)
{
WDTRST=0x1E; WDTRST=0xE1;//喂狗指令 }
}

上面是在google查到的方法

但依照上面的方法在89S52執行

結果是無法執行

main()中 WDTRST=0x1E; WDTRST=0xE1;

這兩行程式以下的所有動作

照上面的方法不是應該 在第二次輸入

WDTRST=0x1E; WDTRST=0xE1;

時,也就是進入While(1)時

就會將WDT歸零重新計時嗎?

而不會將8051重置 ,從LCD看結的果是

進去後就一直在重置

請問如何設定WDT溢位時將它歸零呢?

還是我的認知是錯誤的!?

煩請各位大大 給予小弟指教 謝謝!
編輯記錄
vsopk999 重新編輯於 2011-11-16 04:32:07, 註解 無‧
vsopk999 重新編輯於 2011-11-16 04:32:50, 註解 無‧
vsopk999 重新編輯於 2011-11-16 04:33:46, 註解 無‧
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-11-17 08:37:14 IP:125.233.xxx.xxx 訂閱
WDTt溢位會自動發生 RESET,
RESET之後,WDT自動 DISABLE,

每次寫入 1EH,E1H TO WDTRST(A6H), WDT會重新啟動.

要在WDT計數到3FFFH(16383)之前將WDT歸零,不然它會產生RESET.

你的認知看起來沒有錯,
可能你程式寫法有問題,
一直在執行初始化動作的程式碼,讓你誤以為它一直在 重置.

{
WDTRST=0x1E; WDTRST=0xE1;//初始化看门狗。
{
}
這樣就不會一直重複初始化動作了.

編輯記錄
kib72377 重新編輯於 2011-11-16 17:40:45, 註解 無‧
kib72377 重新編輯於 2011-11-16 17:48:59, 註解 無‧
vsopk999
一般會員


發表:1
回覆:4
積分:1
註冊:2011-09-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-11-17 15:00:26 IP:163.17.xxx.xxx 訂閱
 void main(void)
{
TCON=0x00;
IE=0x83;
value=65536-10000;
TH0=hi=value/256;
TL0=lo=value%6;
RD=0; print(1,"123456");
delay1ms(100);
ENABLE(0x8a);
READ();WDTRST=0x1E; WDTRST=0xE1;
while(1)
{
WDTRST=0x1E; WDTRST=0xE1;


}
上面是部分的程式碼,但lcd顯示的結果卻是
顯示完123456後8051重置,然後再顯示123456
一直循環,所以表示沒有在16384個機械週期內
將WDT歸零囉?
請問哪邊出錯了!? 謝謝
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-11-17 18:09:20 IP:125.233.xxx.xxx 訂閱
 delay 100 mSec
WDT只計算 16383到,照算大概是16383 uSec= 16.383 mSec而已
所以就發生 reset 囉.
所以你應該在delay1msec的每一次回圈開始就重置WDT 1次.

再看仔細,delay100msec時此時WDT好像還沒啟動..
還是給詳細點的資料吧.

你的while迴圈有多大?
編輯記錄
kib72377 重新編輯於 2011-11-17 03:11:28, 註解 無‧
kib72377 重新編輯於 2011-11-17 03:12:40, 註解 無‧
kib72377 重新編輯於 2011-11-17 03:12:41, 註解 無‧
vsopk999
一般會員


發表:1
回覆:4
積分:1
註冊:2011-09-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-11-18 13:48:50 IP:163.17.xxx.xxx 訂閱
 while(1) 
{
do
SCAN();
while(FLAG0!=1);
while(P2==m);
if((FLAG5>2)&(TR0=1)) error3(); { SET(); {
DATA[ptr1]=TAB3[ptr];
while (ptr1==6)
ptr1=0;
}
}
}
}
}
}
}
上面是用鍵盤的按鍵 來呼叫對應的副程式
這會影響到WDT嗎? 謝謝!

編輯記錄
vsopk999 重新編輯於 2011-11-17 22:49:27, 註解 無‧
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-11-18 16:59:13 IP:125.233.xxx.xxx 訂閱
 SCAN( )?    或是自己重新檢查這兩個副程式(by yourself)是否會造成超時意外.

按鍵 DEBOUNCE 至少也要10幾mSec,
或許就是它了.
編輯記錄
kib72377 重新編輯於 2011-11-18 03:39:09, 註解 無‧
vsopk999
一般會員


發表:1
回覆:4
積分:1
註冊:2011-09-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-11-18 17:50:18 IP:163.17.xxx.xxx 訂閱
main()
{
初始設定
WDTRST=0x1E; WDTRST=0xE1;
do
SCAN();
.
.
.
.
.
.
}
}
如果是這樣,不是應該先執行WDT歸零的動作嗎?
因為寫這樣也是一直在重置

這是譯後的資訊
Program Size: data=105.7 xdata=0 code=3687


kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-11-18 18:36:09 IP:125.233.xxx.xxx 訂閱
 SCAN()是多大的程式?
有時不是以程式碼BYTE數來衡量,
如果它裡面也有長時間的迴圈在跑,
那麼請在必要的地方加上wdt歸零的指令
如果是CALL副程式去跑,
那麼請衡量副程式是否會造成超時意外,
這只是邏輯和觀念問題,通了就沒事.
vsopk999
一般會員


發表:1
回覆:4
積分:1
註冊:2011-09-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-11-18 20:29:38 IP:163.17.xxx.xxx 訂閱
 void SCAN(void)        
{
idata char a1=0xf7,i;
WDTRST=0xE1;
FLAG0=0; ptr=0;
for(i=0;i<4;i )
{
switch(m&0xf0)
{
FLAG0=1;
break;
FLAG0=1;
case 0xd0:ptr=i*4 2;
al=al 200;
FLAG0=1;
default: break;
}
a1=a1>>1|0x80;
}
}
加在裡,則是會顯示123456後不重置
但當按下鍵盤任一按鍵時 就產生重置
還是不清楚要加在哪邊
try了很久...
另外有個問題想請教
當WDT開始計時後歸零
再輸入 WDTRST=0x1E; WDTRST=0xE1;
會再開始計時囉?
另外在這網址http://vd5678.pixnet.net/blog/post/32129230
有提到AUXR的控制
可以在 idle模式下停止WDT計時
是否是設定為AUXR=0x10; ?
因為有用到休眠模式
打算用外部中斷來換醒
可是卻因為WDT溢位而被喚醒





編輯記錄
vsopk999 重新編輯於 2011-11-18 05:33:54, 註解 無‧
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2011-11-18 22:14:12 IP:219.69.xxx.xxx 訂閱
 你還有好多個副程式,(5樓)
也順便檢查檢查吧.


另.... AUXR 我不會@_@.


歸零.
從0開始計數,到16383 time out 觸發reset

編輯記錄
kib72377 重新編輯於 2011-11-18 07:17:27, 註解 無‧
kib72377 重新編輯於 2011-11-18 07:18:08, 註解 無‧
kib72377 重新編輯於 2011-11-19 17:32:04, 註解 無‧
系統時間:2024-04-26 10:52:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!