2016-12-30 8 views
1

私はPIC16F877aを使用しており、ボタンを使用せずにプログラムをリセットする必要があります。私がデータシートとリファレンスデザインを見ると、MLCRピンにボタンがあります。ボタンを押すと、MCUがリセットされました。しかし、私はCコードで制御することができるリセットが必要です、私はリセットボタンを使用したくないです。それを行う別の方法がありますか?16PIC877A Cコードでリセット

+1

から例を使用して、あなたのPICは、短い遅延の後にリセットされます。 –

+0

内部スタックオーバーフローを引き起こす再帰関数を呼び出します。それは8の深さを持つので、これは急速になります。 –

+0

リセットピンに信号を出力することによって、ハードウェアとソフトウェアの入力のいずれかを選択するようなマルチプレクサなどで、ソフトウェアでリセットをトリガすることもできます。 –

答えて

1

PIC 8ビットMCUは、ソフトウェアリセットアセンブリ命令があります。

RESET 

reset instruction

http://microchip.wikidot.com/8bit:rst

をあなたは、インラインアセンブリを使用する必要があります。私はPICのインラインアセンブリを使用したことがありませんが、これはMPLABの正しい構文であるようthis pageからそれが見えます:

void soft_reset(void) 
{ 
    _asm 
     reset 
    _endasm 
} 

リンク先のページの状態、外部ウォッチドッグ・タイマとして一般的に優れている、ということに注意してください完全なシステムリセットをトリガする方法です。ソフトリセットでは、外部デバイスもリセットされません。外部WDTを使用すると、ウォッチドッグのペッティングを停止し、ボード全体をリセットします。

+0

コードが機能しません。 "Asm"は未定義の識別子です。私はどのようにwdtセットアップを知っていません。私が試してみます。 – ahmd14

+0

どのコンパイラを使用していますか?私はGCCを想定していた。 –

+0

MPLABの私の答えが更新されました。 –

1

MPLABX XC16(これは、使用しているコンパイラがあると仮定して)の形式は次のとおりです。

__asm__ volatile ("reset"); 

あなたのプロセッサに応じて、あなたも見つけるために、起動時にRCONレジスタの内容を調べることができますリセット原因(MCLR、ソフトウェア、ウォッチドッグタイマ、ブラウンアウトなど)

+0

16F877が8ビットコントローラ – cup

+0

であるため、おそらくXC8になります。コンパイラはXC8です。 – ahmd14

0

#asmおよび#endasmを使用してください。 ( `CLRWDT`命令を呼び出していない)、定期的に無効にすることなくWDT(ウォッチドッグタイマ)を設定することでXC8マニュアル

#asm 
RESET 
#endasm 

// do it again the other way... 
asm("RESET"); 
関連する問題