5.1对寄存器的操作
MSP430单片机内部有许多模块,对这些模块的设置和操作全部通过相关的寄存器进行,或者说,寄存器是我们跟单片机进行交流和对话的窗口。在单片机中,相关的寄存器数以百计,每个寄存器一般有8位或16位,因此有数以千计的控制位。通过这些寄存器可以配置各个模块的工作方式、状态等。在物理空间上,寄存器是位于RAM低端的一些存储单元,而且在MSP430的头文件中进行了相关的定义,寄存器中的位也在头文件中有相应的定义。编写程序时,只要在程序的开头包含相应的头文件,就可以像操作变量一样操作这些寄存器和寄存器中的位。
例如,对MSP430单片机I/O口中P1口的简单操作会涉及方向寄存器P1DIR、输出寄存器P1OUT等,而以下设置即为寄存器操作:
P1DIR|=BIT0; //将P1.0设为输出方向
P1OUT|=BIT0; //让P1.0输出高电平
对寄存器操作时,需要知道寄存器中每个位或组合位(2位、3位、4位或5位的组合)的控制作用,这样才能正确地设置相关的寄存器,通过对多个寄存器的设置,最后实现对某个模块的配置。寄存器中的位或组合位在头文件中也有快捷宏定义,可以通过查看头文件或单片机的用户指南,来了解这些位的宏定义。
例如,对看门狗定时器的一条设置语句为:
WDTCTL=WDT_MDLY_8; //在1MHz时钟下,看门狗定时器,8mS定时间隔
在CCS中查看msp430g2553.h头文件可知,WDT_MDLY_8已被宏定义为:
#define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0)
其中WDTPW、WDTTMSEL、WDTCNTCL、WDTIS0也有各自的宏定义,因此上述语句中对WDT_MDLY_8的使用变得非常容易和高效。
对单片机的编程,很多时候就是在对各种各样的寄存器及寄存器中的位进行设置和操作。