0

ビットに対処するために、このコードを理解しようとしています:

/*  GPIO bits   */
static bit  GP5 @ (unsigned)&GPIO*8+5;
static bit  GP4 @ (unsigned)&GPIO*8+4;
static bit  GP3 @ (unsigned)&GPIO*8+3;
static bit  GP2 @ (unsigned)&GPIO*8+2;
static bit  GP1 @ (unsigned)&GPIO*8+1;
static bit  GP0 @ (unsigned)&GPIO*8+0;

GPIO は次のように定義されます。

static volatile unsigned char   GPIO    @ 0x06;

GPIO アドレスが 8 倍されてからビット数が加算されるのはなぜですか? このマクロの結果とビットのアドレス指定方法を教えてください。

上記のコードは、PIC マイクロコントローラー用の XC8 コンパイラー用です。Atmel は、マクロIOPORT_CREATE_PINを使用するときに同じものを使用します。このマクロは次のように定義されています。

#define IOPORT_CREATE_PIN(port, pin)    ((IOPORT_##port)*8 + (pin))
4

2 に答える 2

1

各特殊機能レジスタは 8 ビット (マイクロコントローラによって異なります) を持っているためです。の住所はGP0です0x06*8+0 = 0x30。ビットの扱い方もマイコンによって異なります。すみません、私はPICに詳しくありません。あなたは自分でそれを理解するかもしれません。

ここに画像の説明を入力

于 2013-09-18T14:56:36.363 に答える