在线情况
1
  • 头像
  • 级别
    • 积分51
    • 经验2657
    • 文章206
    • 注册2007-03-18
    看来大家对狗狗的误解不少,上边有些操作虽然能得到正确结果,但我认为那种写法可能仍然没有真正的理解狗狗的思维方式,我认为有两种写法是比较正确的。
    首先我们可以看一下在头文件中对于WDT_ARST_1000的定义,如下:

    #define WDT_ARST_1000       (WDTPW+WDTCNTCL+WDTSSEL)   /* 1000ms  " */

    那就是说,它已经包含了喂狗所必须的WDTCNTCL了。
    然后,有两点要注意的:一是狗必须用口令操作,也就是WDTPW;二是狗狗的寄存器不支持位操作,所以或的写法有些不妥,但如果或的时候包括了WDTPW+WDTCNTCL的话,理应可以进行操作的,不过个人认为,由于这样需要先取值,经过或运算再写入,就不如直接MOV。

    所以,综上所述,楼主的情形,无论是初始化狗还是喂统统是一样的,都使用以下的同一句:WDTCTL = WDT_ARST_1000;
    如果将此句放在主程序死循环的循环体开头,可以省去一个初始化过程,因为它既是初始化也是喂。
    当然另一种正确的方法就是WDTCTL |= WDTPW + WDTCNTCL;了,因为这句包括了我刚才提到的必备狗粮,个人认为这种写法更适合于在不同的子程序中有不同的狗设置,也就是较复杂的程序时使用,这个指令是不会区别狗的设置的,一律喂。而第一种方案在喂的同时由于会重新设置狗的间隔,所以恐怕在复杂的程序中有时会引起意外的狗状态改变了,大家要区别使用啊!
    微控论坛特约嘉宾
    Powered by LeadBBS 9.2 .
    Page created in 0.1719 seconds with 7 queries.