我正在使用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