我正在使用MPLABx和HI Tech PICC编译器。我的目标芯片是PIC16F876。通过查看pic16f876.h包含文件,似乎应该可以通过名称来引用它们来设置芯片的系统寄存器。使用Hi Tech PICC在PIC16F876中设置寄存器值
例如,在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
谢谢!这是我错过的“位”。我无法在PICC手册中的任何地方找到它。我错过了什么吗?你是正确的,这是更清洁,这就是为什么我一直在努力实现它。到目前为止,我一直在做个别位分配。 – Michael