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

2

“为什么 GPIO 地址乘以 8,然后加上位数?这个宏的结果是什么,我该如何寻址?”

它是从最低地址开始的位数:每字节 8 位加上字节的偏移量。

您可以使用该名称来寻址该位,例如GP3 = 1;. 编译器知道它是一个位。正如所指出的,这是 PIC 的特定编译器扩展。

于 2013-09-18T20:01:29.450 回答
1

因为每个特殊功能寄存器都有 8 位(取决于微控制器)。的地址GP00x06*8+0 = 0x30。解决位的方法也取决于微控制器。抱歉,我不熟悉 PIC。你可以自己想办法。

在此处输入图像描述

于 2013-09-18T14:56:36.363 回答