3

我想为设置引脚方向和级别定义宏。他们的参数必须是端口名称和引脚编号。我不想使用 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:我可以用“(((unsigned)&(REGISTER_NAME))*8) + BIT_NUM”写我的宏吗?Q2:对于所有的 PIC MCU,I\O 寄存器的顺序是否相同?

4

1 回答 1

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,因此要将 A1 设置为 1,请使用

LATA1 = 1;

对于端口 AN,您有时还必须使用 ANSEL 寄存器禁用模拟输入(即,如果将引脚分配为模拟输入,则这些引脚将无法正常工作和 DIGITAL)。查看您设备的数据表和 ANSEL 寄存器默认值。

于 2018-09-21T07:51:14.357 回答