久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2578|回復: 12
打印 上一主題 下一主題
收起左側

大俠發個STC51定時器喂狗代碼 學習一下

[復制鏈接]
跳轉到指定樓層
樓主
ID:302293 發表于 2023-6-16 11:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
謝謝大家
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:155507 發表于 2023-6-16 14:13 | 只看該作者
不要在定時器中斷中喂狗,那將是一條寵物狗!

用定時器喂狗不合適吧,主程序跑飛了,但定時器仍舊喂狗,不能復位系統. 應該在主程序loop里面加喂狗指令, 程序跑飛,超時不能喂狗重啟系統.
回復

使用道具 舉報

板凳
ID:712097 發表于 2023-6-16 14:57 | 只看該作者
// 看門狗程序 開始------------------------------------------------

WDT_CONTR = 0x27; //使能看門狗,溢出時間約為8s 通常放在main函數初始化區域

WDT_CONTR = 0x37; //清看門狗,否則系統復位(喂狗)通常放在mainWhile(1)循環體中 注意喂狗間隔不能超過8秒
回復

使用道具 舉報

地板
ID:57657 發表于 2023-6-16 18:36 | 只看該作者
angmall 發表于 2023-6-16 14:13
不要在定時器中斷中喂狗,那將是一條寵物狗!

用定時器喂狗不合適吧,主程序跑飛了,但定時器仍舊喂狗,不 ...

不光是定時器中斷,任何中斷內或被中斷調用的函數都不能喂狗。
回復

使用道具 舉報

5#
ID:1034262 發表于 2023-6-16 21:14 | 只看該作者
喂狗只在主循環喂一次。
回復

使用道具 舉報

6#
ID:517951 發表于 2023-6-17 07:40 | 只看該作者
定時器是硬件, 獨立于單片機程序執行運行的, 單片機程序跑飛死機了, 定時器還能持續喂狗, 單片機異常后是不能復位重啟的.
回復

使用道具 舉報

7#
ID:302293 發表于 2023-6-17 08:26 | 只看該作者
chxelc 發表于 2023-6-16 14:57
// 看門狗程序 開始------------------------------------------------

WDT_CONTR = 0x27; //使能看門狗 ...

  那怎么計算出每個函數執行的時間,執行完后剛好喂狗呢?
回復

使用道具 舉報

8#
ID:624769 發表于 2023-6-17 13:47 | 只看該作者
sr861126 發表于 2023-6-17 08:26
那怎么計算出每個函數執行的時間,執行完后剛好喂狗呢?

看門狗不是去算主循環需要跑多少時間,實際上你也算不出來,因為每次循環的時間是不確定的,一旦有中斷觸發,主循環,一個循環的時間就會被延長。
而是你自己定義一個忍耐極限,就好像電腦多久沒有反應了,你判定認為死機了,然后強制重啟?
看門狗一個道理,比如,程序比較復雜的,中斷比較多的,你定義個3秒,沒有完成一個循環,說明死機了,那么就重啟,就定義3秒,反正每次喂3秒,超時了就重啟。 程序比較簡單的,可以定義個 200ms,只要循環超過200ms 就重啟。 看你自己的“忍耐極限”
回復

使用道具 舉報

9#
ID:712097 發表于 2023-6-17 14:47 | 只看該作者
sr861126 發表于 2023-6-17 08:26
那怎么計算出每個函數執行的時間,執行完后剛好喂狗呢?

時間不一定要剛剛好,提前喂狗也是可以的。例如8秒的看門狗,1秒喂狗也是可以的。
只要不影響程序的運行,你勤快點喂狗,愛狗人士會表揚你的。

如果程序塊或者函數執行時間超過8秒,就需要在函數或語句塊中加入喂狗語句。
關于函數執行的時間,要熟悉下硬件才能估算,1T的單片機,語句執行是很快的,耗時大多在循環或者延時函數上。
回復

使用道具 舉報

10#
ID:712097 發表于 2023-6-17 14:49 | 只看該作者
發一個STC官網的STC15系列的看門狗測試程序供參考

/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 看門狗溢出復位測試舉例------------------------*/
/* 如果要在程序中使用此代碼,請在程序中注明使用了STC的資料及程序        */
/* 如果要在文章中應用此代碼,請在文章中注明使用了STC的資料及程序        */
/*---------------------------------------------------------------------*/

//本示例在Keil開發環境下請選擇Intel的8058芯片型號進行編譯
//若無特別說明,工作頻率一般為11.0592MHz


#include "reg51.h"
#include "intrins.h"

sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;

sfr WDT_CONTR   = 0xc1;     //看門狗控制寄存器
sbit P32        = P3^2;     //測試口

void delay(unsigned int i)
{
    while (i--)
    {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    }
}

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;

    P32 = 0;
    delay(10000);           //復位閃燈延時
    P32 = 1;
    WDT_CONTR = 0x04;       //看門狗定時器溢出時間計算公式: (12 * 32768 * PS) / FOSC (秒)
                            //設置看門狗定時器分頻數為32,溢出時間如下:
                            //11.0592M : 1.14s
                            //18.432M  : 0.68s
                            //20M      : 0.63s
    WDT_CONTR |= 0x20;      //啟動看門狗
    while (1);
}

回復

使用道具 舉報

11#
ID:712097 發表于 2023-6-17 15:19 | 只看該作者
發個測試看門狗的代碼供參考:

#include "reg51.h"

sfr     WDT_CONTR   =   0xc1;
sbit    P32         =   P3^2;

sfr     P0M1        =   0x93;
sfr     P0M0        =   0x94;
sfr     P1M1        =   0x91;
sfr     P1M0        =   0x92;
sfr     P2M1        =   0x95;
sfr     P2M0        =   0x96;
sfr     P3M1        =   0xb1;
sfr     P3M0        =   0xb2;
sfr     P4M1        =   0xb3;
sfr     P4M0        =   0xb4;
sfr     P5M1        =   0xc9;
sfr     P5M0        =   0xca;

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

//  WDT_CONTR = 0x23;                           //使能看門狗,溢出時間約為0.5s
    WDT_CONTR = 0x24;                           //使能看門狗,溢出時間約為1s
//  WDT_CONTR = 0x27;                           //使能看門狗,溢出時間約為8s
    P32 = 0;                                    //測試端口

    while (1)
    {
//      WDT_CONTR = 0x33;                       //清看門狗,否則系統復位
        WDT_CONTR = 0x34;                       //清看門狗,否則系統復位
//      WDT_CONTR = 0x37;                       //清看門狗,否則系統復位

//      Display();                              //顯示模塊
//      Scankey();                              //按鍵掃描模塊
//      MotorDriver();                          //電機驅動模塊
    }
}
回復

使用道具 舉報

12#
ID:401564 發表于 2023-6-18 17:46 | 只看該作者
喂狗直接放在主函數
主函數執行時間是不好算出來的,特別是用KEIL來仿真STC
在主函數放一行取反一個IO的代碼,用示波器或者邏輯分析儀測量就知道運行時間了
喂狗時間大于這個時間就可以子
回復

使用道具 舉報

13#
ID:123289 發表于 2023-6-19 09:03 | 只看該作者
喂狗就一條指令而矣。
關鍵是,你要弄清楚看門狗的應用原理,原理通了,寫一個喂狗語句還值得一提。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一级免费在线观看 | 亚洲一区二区三区在线视频 | 天天操天天干天天爽 | 国产高清91| 国产精品黄视频 | 91精品国产91久久久久久最新 | 四虎网站在线观看 | 在线成人 | 欧美精品日韩精品 | 久久亚洲一区二区 | 99免费 | 久久久久九九九女人毛片 | 99re国产视频 | 一区二区福利视频 | 日韩欧美国产一区二区三区 | 亚洲情综合五月天 | 欧美在线不卡 | 拍真实国产伦偷精品 | 一区二区三区成人 | 91在线精品一区二区 | 亚洲女人天堂成人av在线 | 红色av社区| 亚洲国产精品视频一区 | 国产精品特级片 | 国产精品久久久久久久久动漫 | 日本精品一区二区三区在线观看 | 羞羞网站在线观看 | 精品久久99 | 中文字幕av在线 | 免费福利视频一区二区三区 | 小草久久久久久久久爱六 | 亚洲精品永久免费 | 日本精品国产 | 欧美日本亚洲 | 九九伊人sl水蜜桃色推荐 | 99精品99| 成人精品国产一区二区4080 | 国产精品视频中文字幕 | 欧美亚洲国产精品 | 成人在线观看免费视频 | 国产免费又黄又爽又刺激蜜月al |