我想为设置引脚方向和电平定义宏。它们的参数必须是端口名和引脚号。我不想使用 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寄存器默认值。