xc8 : 请详细说明 (((unsigned)&(REGISTER_NAME))*8) + BIT_NUM

xc8 : please detailed the (((unsigned)&(REGISTER_NAME))*8) + BIT_NUM

我想为设置引脚方向定义宏,level.their参数必须是端口名称和引脚number.i不想使用 TRIS 寄存器或 LAT 寄存器名称,只有端口名称(PORTA 例如)。我使用指针和位掩码执行此操作,例如:

设置引脚目录:

#define SET_PIN_DIR_IN(port,pin)   *(&port+0x80)|=1<<pin

设置引脚电平:

#define SET_PIN_HIGH(port,pin)      port|=1<<pin

读取引脚状态:

#define READ_PIN_LEVEL(port,pin)   (((*(&port+0x100)>>pin)&0x01)==0x01)

但我知道上面的代码不是最佳的。 Q1:can 我用“(((unsigned)&(REGISTER_NAME))*8) + BIT_NUM”写我的宏最理想? Q2:for所有PIC单片机,I\O寄存器的顺序一样吗?​​

如果您使用的是 xc8,则您可能使用的是 8 位 PIC 处理器 :)。一个更正常的方法是先设置 方向通过设置管脚的三态属性 例如:

TRISA1 = 0; // tri-state OFF so this pin is an output
TRISA2 = 1; // tri-state ON so this pin is an input

您通过 R 值读取输入引脚值,因此:

pin2_state = RA2;

要使用 LATCH 设置输出,因此要将 A1 设置为 1,请使用

LATA1 = 1;

对于端口 AN,您有时还必须禁用模拟输入 使用 ANSEL 寄存器(即引脚无法正常工作 和 DIGITAL(如果它们被指定为模拟输入)。 查看您设备的数据 sheet 和 ANSEL 寄存器默认值。