2

私の友人は、PIC12 MCU 用の小さなプログラムを書くのを手伝ってほしいと私に頼みました。私たちは欲しい

  1. 入力電圧が 2 秒間 1.9V 未満になると、プログラムは実行を停止します。
  2. 入力電圧が 2.5V を超えると、プログラムはすぐに反応します。

システムのタイムスタンプを読み取って比較することにより、最初の問題を解決しようとします。

#include <time.h>
... ...
time_t beg, end;
beg = 0;
end = 0;
while(1){
    if(INP_VOL < 1.9){
        if(beg == 0){
            /* Read timestamp when voltage < 1.9 */
            gmtime(&beg);
        }
        /* Campare timestamp */
        gmtime(&end);
        if(end - beg > 2){
            break; /* !!stop running!! */
        }
    }
    else{
        /* if voltage back to normal, reset beg timestamp. */
        beg = 0;
    }
}

PIC12 ユーザー マニュアルでその機能を見つけましたがgmtime(time_t *)、それが良い解決策かどうかはわかりません。

しかし、2番目の問題を解決する方法がわかりません。プログラムの実行中に入力電圧を監視する、一種の独立したスレッドでなければなりません。そして、プログラムは、回路が損傷する前に (他の関数を呼び出すことによって) すぐに反応する必要があります。

私はコンピューター プログラマーですが、MCU 用にコーディングしたことはありません。HI-TECH C でそのようなことが可能かどうか知りたいですか?

4

3 に答える 3

4

ここで行う典型的なことは、割り込み、特にタイマー割り込みを使用することです。

たとえば 1 ミリ秒ごとに実行する割り込みを設定し、その割り込みコードで、プログラムが迅速に反応する必要があることをすべて実行します。これにより、通常の実行フローはそのままになり、2 つのタスクが並行して実行されることがエミュレートされます。

于 2012-02-06T16:11:54.090 に答える
1

電圧が 2.5 を超えると 1 を与える回路を外部割り込みピンに接続することができます。外部割り込みは、入力が 0 から 1 になるたびに開始するようにプログラムできます。

于 2012-02-06T16:26:45.990 に答える
0

C 言語が PIC12 ファミリに最適なソリューションだとは思いません。

私の提案は、ASM を使用することです。いくつかの指示で非常に簡単です。

ADC を設定した後、減算命令を使用して C (キャリー) をチェックできます。この方法で、IF > または IF < テスト C を検証し、ゼロの場合はスキップできます。呼び出しのある次の命令をスキップします。

マイクロを変更してPIC18を使用して、Cコードのパフォーマンスを向上させることもできます。

于 2012-02-06T16:25:49.233 に答える