MSP430单片机C编程

来源:百度知道 编辑:UC知道 时间:2024/06/23 18:35:28
MSP430单片机C编程中,往往遇到以下的语句:WDTCTL=WDTPW+WDTHLD;
书上编程举例说这是关闭看门狗,可没说为什么要这样表达,我不明白,这样的语句如何实现关闭功能?为何要将两个控制位相加就能实现关闭呢?相减行不行?或者用别的方式?望各位赐教(用C语言知识讲解),最好能说明一下用这样的C语句的原因,谢谢

430的编译环境里都提供一系列与片子型号对应的头文件,比如msp430x14x.h就是对14系列的资源定义,说得明白点,就是许多#define宏定义,然后你会发现每个430程序都会包含对应的头文件。比如你说的WDTCTL=WDTPW+WDTHOLD,WDTCTL已经被定义为对应寄存器(看门狗控制寄存器)的地址,WDTPW和WDTHOLD是该寄存器对应位为1的数值,也已经宏定义,如WDTHOLD为第7位,就已经被定义为0x80(0b10000000),然后通过把数值赋给对应地址(可视为变量),这样就可以将对应位置1,如果要同时置多位,就用“加”或者“或”。之所以有这么多的宏定义,就是为了用户记忆方便,记忆有意义的符号比数字好记多了。
补充:为了只对某一位操作,不影响其他位的值,一般用与操作或者或操作,如果是将某位清零,如打开高频晶振,就是是BCSCTL1&=~XT2OFF;即把某未取反再与,对应位就变0,而其余位与上1不改变,原理如上。

WDTCTL=WDTPW+WDTHLD;每一个字符组都代表一个二进制数,也就是相关功能位的值,举个例子:WDTHOLD假如代表0x0080h,那么也就是对应WDTCTL的第八位。WDTCTL=WDTHOLD,意思就是使能WDTCTL寄存器的第八位,也可以用数字表达式来表示:WDTCTL=0x0080H,没有区别。+在这里不是你理解的运算,在这里相当于"或".
建议多看看头文件和数据手册。

相减当然不行了,+代表或的意思。
WDTPW,是关闭开门狗的密码,无它则关闭不了看门狗。
你把整个换成二进制,对比寄存器就容易明白了。

这个问题在我开始学习430的时候也是很不解,不过现在看来是很容易但很必要,首先你要明白每个关键字的含义,WDTCTL代表的是看门狗寄存器,WDTPW和WDTHLD是控制位,就是说WDTCTL就是一个八位的数据,你要通过控制位的或运算来控制它的值,这是430特有的东西,不是C语言带的,只看C语言你是不会理解的,建议看一下《msp430系列16位超低功耗单片机原理与应用》;这本书很好的,我当年入门时就是用这本书入的门,你看了也会达到我这种水平的!
祝你好运!

430单片机一般都是这样用的,你看一下