在我们开始编程gpio之前,您需要对C / C ++中的二进制和十六进制系统以及按位运算有基本的了解,下面是两个可以参考的教程(或者如果您已经熟悉这些教程,可以跳过这些教程并继续):
● 嵌入式编程的十六进制和二进制数字系统基础知识
● 教程:嵌入式编程基础C - 位操作
msp430.h是所有MSP430器件的通用头文件。该头文件识别您的器件,并相应地包含器件具体的头文件。每个器件具体的头文件还包括从BIT0到BITF的位定义。其中BITn等于(1 << n),即第n个位的位置是1,其余位是0。
现在让我们看看我们如何给寄存器赋值。我们可以使用十六进制符号和十进制表示法来赋值。如果您的编译器支持其他符号,如二进制符号,也可以使用。比方说,我们要设置Port 1的PIN 6作为输出。它可以通过以下方式完成:
方式1. P1DIR =(1 << 6); //(二进制左移 - 直接赋值:其他引脚设置为0)
方式2. P1DIR | = 0x20; //或0x20; (十六进制 - 或分配:其他引脚不受影响)
方式3.P1DIR | =(1 << 6); //(二进制左移 - 或分配:其他引脚不受影响)
方式4. P1DIR | = BIT6; //同上,使用标准BIT定义
复制代码
● 在许多情况下,必须避免使用方式1,因为我们直接为寄存器赋值。因此,当我们将P1.6'1'设置为'1'时,其他的被强制分配一个'0',这个'0'可以通过或操作来避免,然后赋值。
● 如果需要批量更改某些位,则可以使用方式2
● 方式3和方式4可以在需要改变某些或者一个位时使用。
这里首先要注意的是,十六进制表示法中前面的零可以被忽略,因为它们没有任何意义,因为我们在这里使用了无符号值(仅为正值),它们被分配给寄存器。 例如。0x4和0x04表示的意思一样。
请注意,位7是最左边的MSB,位0是最右边的LSB,它代表Big Endian格式。 因此,位0是右边的第一位,位1是右边的第二位,依此类推。 BIT和PIN码是基于零的索引值。