<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        新唐M051 WDT看門狗使用程序

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年09月01日   【字體:

        以下程序是基于新唐M051單片機而開發的:

         
         
        /* 看門狗是向上計數的,PWM是向下計數的
         看門狗特征:
         1)18位自由運行的計數器以防止CPU在延遲時間結束之前發生看門狗定時器復位
         2)溢出時間間隔可選(2^4 ~ 2^18),溢出時間范圍在104ms~26.3168s(如果WDT_CLK為10KHz)
         3)復位周期=(1/10KHz)*63,如果WDT_CLK=10KHz */ 
        #include "WDT.h"
        #define DEBUGMSG       printf
        void SystemInit(void)
        {
          PROTECT_REG
          (
           PWRCON |= XTL12M_EN;      //默認時鐘源為外部晶振
           while((CLKSTATUS & XTL12M_STB) == 0);   //等待12MHz時鐘穩定  
           CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //設置外部晶振為系統時鐘
           /* 使能內部10K時鐘 */
           PWRCON |= OSC10K_EN;
           /* 等待10K時鐘穩定 */
           while((CLKSTATUS & OSC10K_STB) == 0); 
           /* HCLK時鐘選擇為外部晶振 */
           CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; 
          )
        }
        /****************************************
        *函數名稱:WatchDogInit
        *輸    入:無
        *輸    出:無
        *功    能:看門狗初始化
        ******************************************/
        VOID WatchDogInit(VOID)
        {
         PROTECT_REG
         ( 
             /* 使能看門狗時鐘 */ 
          APBCLK |= WDT_CLKEN; 
          /* 設置看門狗時鐘源為10K */
          CLKSEL1 = (CLKSEL1 & (~WDT_CLK)) | WDT_10K;     
          /* 使能看門狗定時器復位功能 */
          WTCR |= WTRE; 
          /* 設置看門狗超時間隔為1740.8ms */
          WTCR &= ~WTIS;
          WTCR |= TO_2T14_CK; //(2^14+1024)*(1000000/10000)=17408*100=1740800us=1.7408s 
          /* 使能看門狗中斷 */   
          WTCR |= WTIE;
          NVIC_ISER |= WDT_INT; 
          /* 使能看門狗 */
          WTCR |= WTE; 
          /* 復位看門狗計數值 */
          WTCR |= CLRWTR;  
         ) 
        }
         
        /****************************************
        *函數名稱:WDT_IRQHandler
        *輸    入:無
        *輸    出:無
        *功    能:看門狗中斷服務函數
        ******************************************/
        VOID WDT_IRQHandler(VOID)
        {
            DEBUGMSG("WDT Reset \r\n");         //打印復位信息
         PROTECT_REG
         (
          WTCR |= WTWKF;
          WTCR |= WTIF; 
         )
        }
        /****************************************
        *函數名稱:main
        *輸    入:無
        *輸    出:無
        *功    能:函數主體
        ******************************************/
        INT32 main(VOID)
        {
          SystemInit();
          UartInit(12000000,9600);       //波特率設置為9600bps
          WatchDogInit();            //看門狗初始化
          while(1)
          {
              WTCR |= CLRWTR;                           //喂狗操作
           DEBUGMSG("WDT No Reset \r\n"); 
           Delayms(50);
            WTCR |= CLRWTR;                           //喂狗操作
           Delayms(50);
            WTCR |= CLRWTR;                           //喂狗操作
           Delayms(50);
            WTCR |= CLRWTR;                           //喂狗操作
           Delayms(50);
          }
        }
         
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮