8051看門狗使用方法 |
尚未結案
|
vsopk999
一般會員 發表:1 回覆:4 積分:1 註冊:2011-09-27 發送簡訊給我 |
在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溢位時將它歸零呢? 還是我的認知是錯誤的!? 煩請各位大大 給予小弟指教 謝謝! |
kib72377
高階會員 發表:1 回覆:217 積分:238 註冊:2004-11-12 發送簡訊給我 |
WDTt溢位會自動發生 RESET,
RESET之後,WDT自動 DISABLE, 每次寫入 1EH,E1H TO WDTRST(A6H), WDT會重新啟動. 要在WDT計數到3FFFH(16383)之前將WDT歸零,不然它會產生RESET. 你的認知看起來沒有錯, 可能你程式寫法有問題, 一直在執行初始化動作的程式碼,讓你誤以為它一直在 重置. { WDTRST=0x1E; WDTRST=0xE1;//初始化看门狗。 { } 這樣就不會一直重複初始化動作了. |
vsopk999
一般會員 發表:1 回覆:4 積分:1 註冊:2011-09-27 發送簡訊給我 |
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 發送簡訊給我 |
delay 100 mSec
WDT只計算 16383到,照算大概是16383 uSec= 16.383 mSec而已 所以就發生 reset 囉. 所以你應該在delay1msec的每一次回圈開始就重置WDT 1次. 再看仔細,delay100msec時此時WDT好像還沒啟動.. 還是給詳細點的資料吧. 你的while迴圈有多大? |
vsopk999
一般會員 發表:1 回覆:4 積分:1 註冊:2011-09-27 發送簡訊給我 |
|
kib72377
高階會員 發表:1 回覆:217 積分:238 註冊:2004-11-12 發送簡訊給我 |
|
vsopk999
一般會員 發表:1 回覆:4 積分:1 註冊:2011-09-27 發送簡訊給我 |
|
kib72377
高階會員 發表:1 回覆:217 積分:238 註冊:2004-11-12 發送簡訊給我 |
|
vsopk999
一般會員 發表:1 回覆:4 積分:1 註冊:2011-09-27 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |