我现在正在为C中的MSP430做一个程序,我正在使用端口1.6,1.7,2.0,2.1和2.2来驱动一些LED。现在,为了打开所有LED,我只需要写:
P1OUT |= 0xC0;
P2OUT |= 0x07;
但是,我想知道是否可以创建一个C结构(名称为LED_ACTIVATION),指向P2OUT寄存器(0x0029)的第0,1和2位以及P1OUT寄存器的第6位和第7位(0x0021),这将允许我写这样的东西:
LED_ACTIVATION = 0x2F;
其中端口2.2是最高有效位(第5位),端口1.6是最低有效位(第0位)。
在MSP中,我们可以为每个寄存器执行此分配,如下所示:
__no_init volatile union
{
unsigned char P1OUT; /* Port 1 Output */
struct
{
unsigned char P0 : 1; /* */
unsigned char P1 : 1; /* */
unsigned char P2 : 1; /* */
unsigned char P3 : 1; /* */
unsigned char P4 : 1; /* */
unsigned char P5 : 1; /* */
unsigned char P6 : 1; /* */
unsigned char P7 : 1; /* */
}P1OUT_bit;
} @0x0021;
或者像这样:
#define P1OUT_ (0x0021u) /* Port 1 Output */
DEFC( P1OUT , P1OUT_)
但是可以混合两个寄存器地址吗?
感谢。
答案 0 :(得分:3)
MSP430的位/引脚不可寻址。所以,不,你不能创建一个包含来自多个端口的单个引脚的结构。
为了制作:
LED_ACTIVATION = 0x2F;
您需要使用函数或宏。