看来大家对狗狗的误解不少,上边有些操作虽然能得到正确结果,但我认为那种写法可能仍然没有真正的理解狗狗的思维方式,我认为有两种写法是比较正确的。
首先我们可以看一下在头文件中对于WDT_ARST_1000的定义,如下:
#define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) /* 1000ms " */
那就是说,它已经包含了喂狗所必须的WDTCNTCL了。
然后,有两点要注意的:一是狗必须用口令操作,也就是WDTPW;二是狗狗的寄存器不支持位操作,所以或的写法有些不妥,但如果或的时候包括了WDTPW+WDTCNTCL的话,理应可以进行操作的,不过个人认为,由于这样需要先取值,经过或运算再写入,就不如直接MOV。
所以,综上所述,楼主的情形,无论是初始化狗还是喂统统是一样的,都使用以下的同一句:WDTCTL = WDT_ARST_1000;
如果将此句放在主程序死循环的循环体开头,可以省去一个初始化过程,因为它既是初始化也是喂。
当然另一种正确的方法就是WDTCTL |= WDTPW + WDTCNTCL;了,因为这句包括了我刚才提到的必备狗粮,个人认为这种写法更适合于在不同的子程序中有不同的狗设置,也就是较复杂的程序时使用,这个指令是不会区别狗的设置的,一律喂。而第一种方案在喂的同时由于会重新设置狗的间隔,所以恐怕在复杂的程序中有时会引起意外的狗状态改变了,大家要区别使用啊!
|