0

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() をループに入れることで修正されました。

4

1 に答える 1