我正在使用 MPLABx 和 HI Tech PICC 编译器。我的目标芯片是PIC16F876。通过查看 pic16f876.h 包含文件,似乎应该可以通过按名称引用它们来设置芯片的系统寄存器。
例如,在 CCP1CON 寄存器中,位 0 到 3 设置 CCP 和 PWM 模块的工作方式。通过查看 pic16f876.h 文件,看起来应该可以单独引用这 4 位,而无需更改 CCP1CON 寄存器其余部分的值。
但是,我尝试以各种方式引用这 4 位,但均未成功。
我努力了;
CCP1CON.CCP1M=0xC0; this results in "error: struct/union required
CCP1CON:CCP1M=0xC0; this results in "error: undefined identifier "CCP1M"
但两者都失败了。我已通读 Hi Tech PICC 编译器手册,但看不到如何执行此操作。
在 pic16f876.h 文件中,在我看来,我应该能够按名称引用系统寄存器中的这些子集,因为它们是在 .h 文件中定义的。有谁知道如何做到这一点?
摘自 pic16f876.h
// Register: CCP1CON
volatile unsigned char CCP1CON @ 0x017;
// bit and bitfield definitions
volatile bit CCP1Y @ ((unsigned)&CCP1CON*8)+4;
volatile bit CCP1X @ ((unsigned)&CCP1CON*8)+5;
volatile bit CCP1M0 @ ((unsigned)&CCP1CON*8)+0;
volatile bit CCP1M1 @ ((unsigned)&CCP1CON*8)+1;
volatile bit CCP1M2 @ ((unsigned)&CCP1CON*8)+2;
volatile bit CCP1M3 @ ((unsigned)&CCP1CON*8)+3;
#ifndef _LIB_BUILD
volatile union {
struct {
unsigned CCP1M : 4;
unsigned CCP1Y : 1;
unsigned CCP1X : 1;
};
struct {
unsigned CCP1M0 : 1;
unsigned CCP1M1 : 1;
unsigned CCP1M2 : 1;
unsigned CCP1M3 : 1;
};
} CCP1CONbits @ 0x017;
#endif