PIC マイクロコントローラーのプログラミングは初めてで、コードの一部に苦労しています。関数ではmain()
、いくつかのレジスタを設定してから、無限 while ループに入ります。このwhileループでは、2番目の関数が呼び出され、遅延が発生します(その後を含む他の関数を呼び出さずに戻ります。ただし、2番目の関数が終了すると、プログラムは続行するのではなくmain()
、の先頭に戻るようですmain()
while ループ。
編集1:さらにいくつかのテストを行いましたが、機能がなくても問題が発生するため、何らかの理由でマイクロコントローラーが毎秒程度リセットされていることはほぼ確実です. リセットの理由を示すレジスタがあるはずなので、それを見てみましょう。
編集 2: これはコードの非常に基本的なバージョンで、RC0 LED が 2 秒ごとに短く点滅します (オフのままにする必要があります)。
void main()
{
TRISC = 0x00;
PORTCbits.RC0 = 1;
OSCCON = 0b00000010;
TRISA = 0x00;
PORTA = 0x00;
while(1)
{
PORTCbits.RC0=0;
}
}
編集 3: リセットの原因となったのはウォッチドッグ タイマーであることがわかりました。CLRWDT() をループに入れることで修正されました。