0

PIC16F882 MCU 用に MikroC でカスタム遅延関数を作成しようとしています。

遅延機能全体で、MCU の特定のピンをチェックして、変更されたかどうかを確認したいと考えています。

しかし、問題は、ピンをパラメーターとして関数に渡すことができないことです。同じことを行う他の方法はありますか?

フラグの目的は、遅延の長さを決定することです。Timer0 のオーバーフロー後、自動的に 0 になります。理解しやすくするために、その部分はコードに含めていません。

私の機能は次のとおりです。

int flag = 0;

void delay(bit pin_to_check){
     while(flag == 1){
        if(flag == 0 || pin_to_check == 0) {
             break;
        }
     }
}

void main(){
     flag = 1;
     delay(RA3_bit);
}

私が得るコンパイル時エラーは次のとおりです。

Parameter 'pin_to_check' must not be of bit or sbit type
4

2 に答える 2

1

http://download.mikroe.com/documents/compilers/mikroc/pic/help/accessing_individual_bits.htm#bitをご覧ください。

ビットは引数リストには使用できないと書かれています。レジスタ名を渡す必要があります。

于 2016-09-02T12:18:00.860 に答える
0

bitorをパラメーターとして渡すことはできないためsbit、次のいずれかを実行できます。

  1. 関数を完全に使用しないでください (明らかに)。
  2. 関数の代わりにプリプロセッサ マクロを使用し、
  3. ビット番号とともにレジスタ全体を関数に渡します。

ケース 3. はこのスレッドで説明されており、次のようになります。

void delay(unsigned char *PORT, unsigned char bitNo) {
    unsigned char bitMask = 0x01 << bitNo;
    while (flag == 1 && ((*PORT) & bitMask) != 0)
    { }
}

// delay until bit 3 is set
delay(&PORTA, 3)
于 2016-09-02T14:33:47.623 に答える