我现在正在用 C 语言为 MSP430 编写程序,我正在使用端口 1.6、1.7、2.0、2.1 和 2.2 来驱动一些 LED。现在,为了打开所有 LED,我只需编写:
P1OUT |= 0xC0;
P2OUT |= 0x07;
但是,我想知道是否可以创建一个指向 P2OUT 寄存器 (0x0029) 的位 0、1 和 2 以及 P1OUT 寄存器 (0x0021) 的位 6 和 7 的 C 结构(名称为 LED_ACTIVATION) ,这将允许我写这样的东西:
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_)
但是可以混合两个寄存器地址吗?
谢谢。