我想为定位引脚方向和电平定义宏。他们必须是端口名称和引脚号。我不想使用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寄存器的顺序是否相同?
答案 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寄存器的默认值。