會員登陸
網站導航
最新下載
- Microchip 搭載 ... (Thu, 21-Nov-2019)
- 創客們看過來,... (Thu, 21-Nov-2019)
- 2019第八屆台灣... (Tue, 17-Sep-2019)
- 2019 (秋)嵌入式... (Tue, 17-Sep-2019)
- Microchip 2019 ... (Wed, 10-Jul-2019)
- 2019 Summer Eli... (Mon, 10-Jun-2019)
- ATWINC1500 RTC ... (Mon, 29-Apr-2019)
- APP-ESS18-1A An... (Wed, 24-Apr-2019)
- 2019春EDF限量特... (Mon, 22-Apr-2019)
- 2019春EDF特價工... (Mon, 22-Apr-2019)
訪問統計 (自2012/5/3)
|
正在流覽:
1 名訪客
|
#include <18F45k22.h>一直會自動重開 |
|
新會員 
註冊日期: 2012/07/19 02:31
所屬群組:
註冊會員
文章: 19
等級: 3; EXP: 9 HP : 0 / 52 MP : 6 / 1128
|
為甚麼程式自己跑一段時間 就會跳到main 顯示"Start trying. Ha ! ha ! " 不知道是哪裡錯了,會是wdt的問題嗎? ,因為把wdt關掉好像就不會跳, 因為要用wdt防止當機不知道要如何解決,之前在其他程式也有用wdt,這樣的擺法/用法就沒有遇到為自動跳到main從新開機的情況 ?
#include <18F45k22.h> #fuses HSH WDT MCLR NOLVP NOBROWNOUT //NOMCLR INTRC_IO #use delay(clock=20MHz,crystal=20MHz)
//#use rs232(baud=9600, parity=N,stop=1,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors,STREAM=STREAM_UART) #use rs232(baud=9600, parity=N,stop=1,xmit=PIN_D6,rcv=PIN_D7,bits=8, errors,STREAM=STREAM_UART) #include <string.h>
int8 serial_in[32]; int8 serial_len = 0; int8 serial_ending = 0; int16 wait_ending = 0;
#int_rda2 void rda_isr(void) { char c; c = fgetc(STREAM_UART); /* 取得一個輸入的字元 */ if(serial_len < 30 && c >= ' '&& serial_ending == 0) { serial_in[serial_len++] = c; } if(c < ' ' || c == '$') { serial_in[serial_len++] = 0; serial_ending = 1; } }
void main(void) { char c; int i,n; enable_interrupts(INT_RDA2); enable_interrupts(GLOBAL); serial_ending = 0; fprintf(STREAM_UART, "Start trying. Ha ! ha ! "); delay_ms(3); setup_wdt(WDT_ON|WDT_8S); while(TRUE) { restart_wdt(); fprintf(STREAM_UART, "I\n"); delay_ms(3000); // c = fgetc(STREAM_UART); if( serial_ending == 1) /* 出現結束字元時, 等待傳送完全停止 */ { fprintf(STREAM_UART, "I see => %s \n", serial_in); delay_ms(3); serial_in[serial_len] = 0; /* 把接收字串補上字串結尾 NULL */ serial_len = 0; /* 讓下次接收再重頭開始 */ serial_ending = 0; /* 清除掉字串結束的旗號, 好能重新開始 */ } } }
2018/09/22 18:24
|
|
|
Re: #include <18F45k22.h>一直會自動重開 |
|
管理員 
註冊日期: 2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者 註冊會員
文章: 1635
等級: 34; EXP: 18 HP : 0 / 829 MP : 545 / 22891
|
WDT如果開啟, 程式中就必須在適當的位置, 清除WDT的計數值, 不清除時間到了自然會Reset MCU.
2018/09/25 09:47
|
|
|
Re: #include <18F45k22.h>一直會自動重開 |
|
版主 
註冊日期: 2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者 註冊會員 MICROCHIP
文章: 14865
等級: 73; EXP: 62 HP : 1089 / 1815 MP : 4955 / 82806
|
1. 我不知道你在 main( )迴圈所用的 restart_wdt(); 的敘述是何種功能? 查一下 XC8 的使用手冊是用 CLRWDT( ); 的巨集去清除 WDT 的逾時計數器的。如底下範例所示:
#include <xc.h>
void
main (void)
{
WDTCON=1;
/* enable the WDT */
CLRWDT();
}
2. WDT 所設定的逾時時間是多久? 而你的程式裡又多久清除這 WDT 呢? 建議在程式裡的 CLRWDT( ) 後面加上一個 Toggle I/O 的輸出,用示波器測量一下 I/O 腳轉態的時間是否是 WDT 時間的一半。
2018/09/25 10:09
Ryang 於 2018年09月25日 10:27:56
|
|
|
Re: #include <18F45k22.h>一直會自動重開 |
|
新會員 
註冊日期: 2012/07/19 02:31
所屬群組:
註冊會員
文章: 19
等級: 3; EXP: 9 HP : 0 / 52 MP : 6 / 1128
|
我所使用的除厝軟體是CCS 那語法也是一樣嗎?
2018/09/27 00:44
|
|
|
Re: #include <18F45k22.h>一直會自動重開 |
|
初級會員 
註冊日期: 2008/03/17 16:27
所屬群組:
註冊會員
文章: 25
等級: 3; EXP: 73 HP : 0 / 68 MP : 8 / 2340
|
"setup_wdt(WDT_ON|WDT_8S);" 這個語法怪怪的,建議你先設時間再設定開啟,另外,WDT_8S參數我在其內部資料沒有看到這個參數,請使用CSS提供列舉的正確參數值WDT_TIMES_8192或是其他,不然可能根本是沒有設定成8秒
2018/09/27 08:19
|
|
|
Re: #include <18F45k22.h>一直會自動重開 |
|
版主 
註冊日期: 2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者 註冊會員 MICROCHIP
文章: 14865
等級: 73; EXP: 62 HP : 1089 / 1815 MP : 4955 / 82806
|
CCS 我沒用過。總之,在做 Clear WDT 動作之前先用 Toggle I/O 輸出的方式,用示波器量一下WDT 清除的間隔間。
2018/09/28 10:49
|
|
您無法在此發表文章
您可以在此觀看文章
您無法回覆文章
您無法編輯自己的文章
您無法刪除自己的文章
您無法發起投票調查
您無法在此投票
您無法上傳附加檔案
您無法不經審核直接發表文章
|
搜尋
Microchip連結
|