#include <18F45k22.h>一直會自動重開

作者 kckckcrt 於 2018年09月22日 18:24:12
為甚麼程式自己跑一段時間 就會跳到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; /* 清除掉字串結束的旗號, 好能重新開始 */

}
}
}

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=22419&post_id=78711