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

时间:2017-07-12 07:12:19

标签: mplab xc8

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

设置pin目录:

#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:我可以用“(((unsigned)&amp;(REGISTER_NAME))* 8)+ BIT_NUM”最佳地写我的宏吗? Q2:对于所有PIC MCU,I / O寄存器的顺序是否相同?

1 个答案:

答案 0 :(得分:0)

如果您使用的是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设置输出,请使用Ap将A1设置为1

LATA1 = 1;

使用端口AN,有时还必须禁用模拟输入 使用ANSEL寄存器(即引脚将无法正常工作 和DIGITAL(如果它们被分配为模拟输入)。 查看您的设备的数据手册,然后选择ANSEL寄存器的默认值。