0

アイデアは、ポートから任意のビットを読み取ることです。とにかく、1つの既知のビットへのアクセスは次のように簡単です。

P0_0 <-- gets bit 0 from port 0

しかし、関数を介してビットyにアクセスする必要がある場合はどうなりますか?

read_bit(__bit y){
    return P0_y; // <-- just an idea but its not right becouse of syntax.
}

SDCCを使用してプログラムし、8051ヘッダーを使用します。

4

3 に答える 3

1

リテラル定数の場合は、マクロのトリックを使用できます。

#define READ_P0_BIT(BIT) (P0_ ## BIT)
unsigned x = READ_P0_BIT(1);

リテラル定数でない場合は、次のようにできます。

int readP0bit(int bitNo)
{
    switch (bitNo)
    {
    case 0: return P0_0;
    case 1: return P0_1;
    // ...
    case 7: return P0_7;
    default: return 0;
    }
}
于 2012-10-04T08:23:35.903 に答える
0

この機能を見てください

char chek_bit_p0(unsigned char chk_bit){
 if((P0>>chk_bit) & 1)
    return 1;
 else 
    return 0;
}

または単に以下のようなマクロによって(推奨される方法)

#define chek_bit_p0(x) (((P0>>x)&1)&&1)
于 2012-10-05T15:08:04.290 に答える
0

関数内のビットを含むローカル配列変数を作成し、この配列へのインデックスとして「ビット」を使用できます。

何かのようなもの:

__bit read_bit(const int b)
{
    __bit all_bits[8] = {
        P0_0,
        P0_1,
        /* etc. */
        P0_7
    };

    return (b < 8 ? all_bits[b] : 0);
}
于 2012-10-04T08:23:28.883 に答える