我正在尝试将变量映射到不同端口的IO。我能找到的最接近的例子是:
union {
struct
{ // specify each bit in this char byte
unsigned bit0:1 ; // name each member and size
unsigned bit1:1 ;
unsigned bit2:1 ;
unsigned bit3:1 ;
unsigned bit4to6:3 ; // example set to 3 bits
unsigned bit7:1 ;
};
unsigned char allbits; // overall type of union
} Flag ; // name of union = Flag
Flag.allbits = 0x12; // sets value of union/bits to 0x12
Flag. bit2 = 0; // clear the if (Flag. bit2==1), etc
if (Flag. bit2 == 1) etc
是否有可能让bit0,bit1,bit2等来自不同端口的IO位?像这样:
union {
struct
{ // specify each bit in this char byte
LATAbits.LATA5:1 ; // name each member and size
LATAbits.LATA7:1 ;
LATBbits.LATB2:1 ;
LATBbits.LATB4:1 ;
LATBbits.LATB5:1 ;
LATCbits.LATC0:1 ;
LATCbits.LATC1:1 ;
LATCbits.LATC2:1 ;
};
unsigned char allbits; // overall type of union
} Flag ; // name of union = Flag
Flag.allbits = 0x12; // sets value of union/bits to 0x12
对我来说重要的是能够设置整个联合的值,而不一定要访问各个位。
答案 0 :(得分:0)
好吧,我找到了解决方案。它不是最优雅的,但它对我有用。如果您有其他想法并希望分享,请发布。
unsigned int HoltekAddress = 0; // Variable that holds the value for union
union
{
struct
{ // Specify each bit in this char byte
unsigned int bit0 :1; // Name each member and size
unsigned int bit1 :1;
unsigned int bit2 :1;
unsigned int bit3 :1;
unsigned int bit4 :1;
unsigned int bit5 :1;
unsigned int bit6 :1;
unsigned int bit7 :1;
unsigned int bit8 :1;
unsigned int bit9 :1;
unsigned int bit10 :1;
unsigned int bit11 :1;
};
unsigned int allbits; // Union variable and name of all members
} Holtek; // Name of union = Holtek
Holtek.allbits = HoltekAddress;
LATBbits.LATB6 = Holtek.bit0;
LATBbits.LATB7 = Holtek.bit1;
LATBbits.LATB8 = Holtek.bit2;
LATBbits.LATB9 = Holtek.bit3;
LATAbits.LATA0 = Holtek.bit4;
LATAbits.LATA8 = Holtek.bit5;
LATAbits.LATA7 = Holtek.bit6;
LATDbits.LATD5 = Holtek.bit7;
LATDbits.LATD4 = Holtek.bit8;
LATDbits.LATD3 = Holtek.bit9;
LATDbits.LATD1 = Holtek.bit10;
LATDbits.LATD0 = Holtek.bit11;
谢谢大家。
答案 1 :(得分:0)
嗯,这很优雅。这个想法是你不能自动地将来自不同“端口”的任意位映射成单个字节/字变量。必须复制每一位的值。联合使得在函数之间传递几位变得容易。
我的拙见(Teule tata)。