XC8 : 请详细说明 (((((无符号)&(REGISTER_NAME))*8) + BIT_NUM



我想为设置引脚方向和电平定义宏。它们的参数必须是端口名和引脚号。我不想使用 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:我可以用"((((无符号(&(REGISTER_NAME((*8( + BIT_NUM"最佳地编写我的宏吗? Q2:对于所有PIC MCU,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

您通过输入引脚 vale 的 R 值读取,如下所示:

pin2_state = RA2;

要设置输出,请使用锁存器,因此要将 A1 设置为 1,请使用

LATA1 = 1;

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

相关内容

  • 没有找到相关文章

最新更新