私はMPLABxとHITechPICCコンパイラを使用しています。私のターゲットチップはPIC16F876です。pic16f876.hインクルードファイルを見ると、チップのシステムレジスタを名前で参照することで設定できるはずです。
たとえば、CCP1CONレジスタ内のビット0〜3は、CCPおよびPWMモジュールの動作を設定します。pic16f876.hファイルを見ると、CCP1CONレジスタの残りの値を変更せずに、これらの4ビットだけを参照できるはずです。
しかし、私はこれらの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