如何使用C宏定义PIC微控制器的引脚名称?

时间:2018-10-15 15:41:19

标签: c pic preprocessor xc8

PIC微控制器具有3个基本寄存器,用于设置GPIO(通用I / O)引脚状态。这些是: TRIS(三态,方向寄存器。将引脚设置为in或out) PORT(输入缓冲区) LAT(闩锁,输出毛刺)。

端口可以是A,B,C等。 因此,端口A的TRIS寄存器是TRISA。

然后终于有了密码。例如,TRISA1。

TRISA1定义为:

// TRISA<TRISA1>
extern volatile __bit                   TRISA1              __at(0x461);    // @ (0x8C * 8 + 1)
#define                                 TRISA1_bit          BANKMASK(TRISA), 1

我想定义一个宏来轻松地将引脚命名为:

#define _DATA_OUTPUT A2

所以我可以做类似的代码:

LAT_DATA_OUTPUT = 1;
PORT_DATA_OUTPUT = 0;

并将其由预处理程序转换为:

LATA2 = 1;
PORTA2 = 0;

所以以后我可以扩展到其他引脚寄存器,例如ANSEL,WPU等,而无需重写宏或添加特殊情况。

这可能吗?还是我能做的最接近的事情是什么?

2 个答案:

答案 0 :(得分:1)

您已经可以执行此操作。您没有记下PIC型号,IDE版本或所使用的工具链,但是假设您使用的是带有XC编译器的MPLAB X,则该功能已经存在。确保包括<xc.h>,并且它应该从项目配置中读取您拥有的芯片,并且已经为您制作了宏。

然后您可以设置整个寄存器(以TRISA为例):

TRISA = 0x0000;    //All A pins outputs

或在该寄存器中设置各个引脚:

TRISAbits.TRISA0 = 0;
TRISAbits.TRISA8 = 0;

您还可以定义自己的宏:

#define TRISA0 TRISAbits.TRISA0
#define SET_TRISA0_IN TRISAbits.TRISA0 = 1

答案 1 :(得分:0)

您可以这样创建宏:

#define _DATA_OUTPUT A2
#define LAT_DATA(X) LAT##X
#define LAT_DATA_OUTPUT    LAT_DATA(_DATA_OUTPUT)

#define PORT_DATA(X) PORT##X
#define PORT_DATA_OUTPUT PORT_DATA(_DATA_OUTPUT)

您可以使用它作为示例。