<tfoot id="ygvxt"><menuitem id="ygvxt"></menuitem></tfoot>
    • <kbd id="ygvxt"></kbd>
      <th id="ygvxt"><progress id="ygvxt"></progress></th>

      您好,歡迎訪問(wèn)上海意泓電子科技有限責(zé)任公司網(wǎng)站!
      4新聞資訊
      您的位置: 首頁(yè) ->  新聞資訊 -> 單片機(jī)

      ?關(guān)于STC15F2K60S2看門狗的應(yīng)用

      文章出處:?jiǎn)纹瑱C(jī) 責(zé)任編輯:上海意泓電子科技有限責(zé)任公司 發(fā)表時(shí)間:
      2020
      11-10

      關(guān)于STC15F2K60S2看門狗的應(yīng)用

      1.STC15F2K60S2系列單片機(jī)的內(nèi)部結(jié)構(gòu)圖

      STC15F2K60S2系列單片機(jī)的內(nèi)部結(jié)構(gòu)框圖如下圖所示,STC15F2K60S2系列單片機(jī)中包含中央處理器(CPU)、程序存儲(chǔ)器(Flash)、數(shù)據(jù)存儲(chǔ)器(SRAM)、定時(shí)器、IO口、高速A/D轉(zhuǎn)換、看門狗、UART高速異步串行通信口1/串行通信口2,CCP/PWM/PCA,一組高速同步串行端口SPI,片內(nèi)高精度R/C時(shí)鐘及高可靠復(fù)位等模塊,STC15F2K60S2系列單片機(jī)幾乎包含了數(shù)據(jù)采集和控制中的所有單元模塊。



      2.目的:

      在工業(yè)控制/汽車電子/航空航天等需要高可靠行的系統(tǒng)中,為了防止“系統(tǒng)在異常情況下,受到干擾,MCU/CPU程序跑飛,導(dǎo)致系統(tǒng)長(zhǎng)時(shí)間異常工作”,通常是引進(jìn)看門狗,如果MCU/CPU不在規(guī)定的時(shí)間內(nèi)按要求訪問(wèn)看門狗,就認(rèn)為MCU/CPU處于異常狀態(tài),看門狗就會(huì)強(qiáng)迫MCU/CPU復(fù)位,使系統(tǒng)重新從頭開(kāi)始按規(guī)律執(zhí)行用戶程序??撮T狗復(fù)位狀態(tài)結(jié)束后,不影響特殊功能寄存器IAP_ONTR中SWBS/IAP_ONTR.6位的值,單片機(jī)根據(jù)復(fù)位前SWBS/IAP_ONTR.6的值選擇是從用戶應(yīng)用程序區(qū)啟動(dòng),還是從系統(tǒng)ISP監(jiān)控程序區(qū)啟動(dòng)。如果看門狗復(fù)位前SWBS/IAP_ONTR.6的值為0,則看門口復(fù)位狀態(tài)結(jié)束后單片機(jī)從系統(tǒng)ISP監(jiān)控程序區(qū)啟動(dòng)??撮T狗復(fù)位是熱啟動(dòng)復(fù)位中的軟復(fù)位之一。

      工作原理:看門狗實(shí)際上是一個(gè)定時(shí)器或計(jì)數(shù)器,簡(jiǎn)稱WDT。單片機(jī)運(yùn)行工作中,看門狗會(huì)對(duì)單片機(jī)機(jī)器周期脈沖不停計(jì)數(shù),當(dāng)單片機(jī)程序陷入死循環(huán)時(shí),單片機(jī)程序如果不能及時(shí)對(duì)看門狗的定時(shí)器復(fù)位,看門狗就會(huì)在其定時(shí)器計(jì)滿溢出時(shí)產(chǎn)生一個(gè)復(fù)位信號(hào),從而使系統(tǒng)重啟。

      看門狗應(yīng)用時(shí),首先確定看門狗計(jì)數(shù)器的位數(shù),然后參考計(jì)數(shù)脈沖周期計(jì)算出看門狗計(jì)數(shù)溢出所需的時(shí)間T,喂狗程序 喂狗時(shí)間要小于T,這樣隔一段時(shí)間喂一次狗,只要程序正常運(yùn)行,看門狗定時(shí)器就不會(huì)溢出。一旦出現(xiàn)程序死循環(huán)故障,喂狗程序失敗,不能對(duì)看門狗定時(shí)器及時(shí)清零,就會(huì)導(dǎo)致計(jì)時(shí)器溢出,重啟系統(tǒng)。

      3.特殊寄存器:

      STC15系列單片機(jī)內(nèi)部也引進(jìn)了此看門狗功能,使單片機(jī)系統(tǒng)可靠性設(shè)計(jì)變得更加方便/簡(jiǎn)潔。為此功能,我們?cè)黾尤缦绿厥夤δ芗拇嫫鱓DT_CONTR:

      WDT_CONTR:看門狗(Watch—dog—Timer)控制寄存器

      SFR name

      Address

      bit

      B7

      B6

      B5

      B4

      B3

      B2

      B1

      B0

      WDT_CONTR

      0C1H

      name

      WDT_FLAG

      _

      EN_WDT

      CLR_WDT

      IDLE_WDT

      PS2

      PS1

      PS0

      WDT_FLAG: 看門狗溢出標(biāo)志位,當(dāng)溢出時(shí),該位由硬件置1,可用軟件將其清零。

      EN_WDT: 看門狗允許位,當(dāng)設(shè)置為“1”時(shí)看門狗啟動(dòng)。

      CLR_WDT: 看門狗清“0”位,當(dāng)設(shè)為“1”時(shí),看門狗重新計(jì)數(shù)。硬件將自動(dòng)清“0”此位。

      IDLE_WDT: 看門狗“IDLE”模式位,當(dāng)設(shè)置為“1”時(shí),看門狗定時(shí)器在“空閑模式”計(jì)數(shù),當(dāng)清”0”該位時(shí),看門狗定時(shí)器在“空閑模式”時(shí)不計(jì)數(shù)。

      PS2,PS1,PS0:看門狗定時(shí)器分頻值,如下表所示

      PS2

      PS1

      PS0

      Pre_scale預(yù)分頻

      WDT overflow Time @20MHz

      0

      0

      0

      2

      39.3ms

      0

      0

      1

      4

      78.6ms

      0

      1

      0

      8

      157.3ms

      0

      1

      1

      16

      314.6ms

      1

      0

      0

      32

      629.1ms

      1

      0

      1

      64

      1.25s

      1

      1

      0

      128

      2.5s

      1

      1

      1

      256

      5s

      看門狗溢出時(shí)間 = (12 *Pre—scale*32768)/Oscillatorfrequency

      設(shè)時(shí)鐘為12MHz

      看門狗溢出時(shí)間 = (12 *Pre—scale*32768)/12000000= Pre—scale*393216/12000000

      PS2

      PS1

      PS0

      Pre_scale預(yù)分頻

      WDT overflow Time @12MHz

      0

      0

      0

      2

      65.5ms

      0

      0

      1

      4

      131.0ms

      0

      1

      0

      8

      262.1ms

      0

      1

      1

      16

      524.2ms

      1

      0

      0

      32

      1.0485s

      1

      0

      1

      64

      2.0971s

      1

      1

      0

      128

      4.1943s

      1

      1

      1

      256

      8.3886s

      設(shè)時(shí)鐘為11.0592MHz

      看門狗溢出時(shí)間 = (12 *Pre—scale*32768)/11059200 = Pre—scale*393216/11059200

      PS2

      PS1

      PS0

      Pre_scale預(yù)分頻

      WDT overflow Time @11.0592MHz

      0

      0

      0

      2

      71.1ms

      0

      0

      1

      4

      142.2ms

      0

      1

      0

      8

      284.4ms

      0

      1

      1

      16

      568.8ms

      1

      0

      0

      32

      1.1377s

      1

      0

      1

      64

      2.2755s

      1

      1

      0

      128

      4.5511s

      1

      1

      1

      256

      9.1022s

      4.程序:

      用LED燈的亮表示程從頭序運(yùn)行,用延時(shí)函數(shù)改變兩次喂狗時(shí)間間隔。

      /****************************測(cè)試程序******************************/

      #include

      sbit led = P0^0;

      sfr WDT_CONTR = 0xel;/*定義STC單片機(jī)中新加入的看門狗程序*/

      void delay(unsigned int x)/*定義延時(shí)函數(shù)*/

      {

      while(x--);

      }

      void main(void)

      {

      WDT_CONTR = 0x35;/*設(shè)置模式計(jì)數(shù)器值*/

      led = 1;

      delay(20000);

      led = 0;

      while(1)

      {

      WDT_CONTR = 0x35;

      delay(50000);

      }

       

      }

      (1)程序開(kāi)始后,點(diǎn)亮發(fā)光二極管后延時(shí)一段時(shí)間熄滅,延時(shí)不能過(guò)長(zhǎng),若兩次喂狗時(shí)間間程序運(yùn)行時(shí)間大于看門狗溢出時(shí)間,看門狗將復(fù)位單片機(jī),可調(diào)節(jié)這個(gè)時(shí)間,讓看門狗是否復(fù)位。

      (2)喂狗時(shí)使用和設(shè)定看門狗寄存器同樣的語(yǔ)句,只要看門狗寄存器中CLR—WDT位置“1”,看門狗定時(shí)器重新計(jì)數(shù),由硬件自動(dòng)將其清零。

      (3)演示為發(fā)光二極管亮后熄滅不會(huì)再亮,這說(shuō)明程序沒(méi)被復(fù)位,while循環(huán)中看門狗被正常喂狗,若將WDT_CONTR= 0x35;去掉程序?qū)?huì)不停復(fù)位,因?yàn)榭撮T狗定時(shí)器溢出復(fù)位。


      上海意泓電子科技有限責(zé)任公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像

      CopyRight 2020-2025 www.hljhgw.com All rights reserved   滬ICP備2021005866號(hào)

      国产强伦姧在线观看,…中文天堂在线一区,亚洲欧洲精品污网站在线观看,在线视频综合站
      <tfoot id="ygvxt"><menuitem id="ygvxt"></menuitem></tfoot>
        • <kbd id="ygvxt"></kbd>
          <th id="ygvxt"><progress id="ygvxt"></progress></th>