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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

有關單片機看門狗問題請教大神

[復制鏈接]
跳轉到指定樓層
樓主
ID:108715 發表于 2017-3-22 21:26 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我的是stc12c5608ad單片機。官方手冊只有匯編例程,沒有c語言的。網上例程也很少,以下例程我想移植到5608單片機上,因為與傳統8051速度不一樣,所以請問大神怎么設置。還有我看到有些例程的sfr不是0xA6,這個是不是不統一,修改有什么規律?還有我不用for循環執行i++  500次,喂狗程序怎么改?

另外激活看門狗這個=0x1e和0xe1怎么定義的,代表什么?為什么是1e和e1?
第一次接觸看門狗,資料好少,不知道怎么下手。求高手幫忙。


/*-----------------------------------------------
  名稱:看門狗溢出實驗
  編寫:shifang
  日期:2009.5
  修改:無
  內容:通過按鍵模擬看門狗溢出
------------------------------------------------*/
#include<reg52.h>

sfr  WDTRST  =   0xA6;                                 

sbit key = P3^1;                 

/*------------------------------------------------
                    喂狗
------------------------------------------------*/
void Rst_Watchdog( void )
{
        WDTRST  = 0x1E; //先賦值1E 然后賦值E1
    WDTRST  = 0xE1;
}

/*------------------------------------------------
                    主函數
------------------------------------------------*/
void main( void )
{
        int i;
                                    // 設置看門狗時間為1個時鐘循環后
        Rst_Watchdog();
                                         //關看門狗一個時鐘循環
        for( i = 0; i < 500; i++)
        {
                Rst_Watchdog();               
        }
    P1=0x00;
        while(!key)                 //按下按鍵不松開,表示程序一直在按鍵處循環,
                                //并用LED顯示0x55
        {
         P1=0x55;                         //模擬出錯 正常情況應該一直顯示LED,
                                //但是加看門狗之后不間斷復位,倒是LED閃爍
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2017-3-23 02:32 | 只看該作者
看stc12c5608ad的手冊
回復

使用道具 舉報

板凳
ID:7485 發表于 2017-3-23 08:07 | 只看該作者
stc12c5608ad的狗的地址是0E1H吧?
回復

使用道具 舉報

地板
ID:7485 發表于 2017-3-23 08:08 | 只看該作者
使用看門狗要看手冊的。
回復

使用道具 舉報

5#
ID:7485 發表于 2017-3-23 08:23 | 只看該作者
看了手冊和頭文件,我也糊涂了:
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機看門狗定時器特殊功能寄存器
sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register
//                                      7     6     5      4       3      2   1   0     Reset Value
//                                  WDT_FLAG  -  EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0    xx00,0000
//-----------------------

//--------------------------------------------------------------------------------

捕獲.JPG (134.68 KB, 下載次數: 105)

捕獲.JPG
回復

使用道具 舉報

6#
ID:169871 發表于 2017-3-23 11:03 | 只看該作者
要軟件喂狗
回復

使用道具 舉報

7#
ID:108715 發表于 2017-3-24 19:50 來自手機 | 只看該作者
yzwzfyz 發表于 2017-3-23 02:32
看stc12c5608ad的手冊

問題是官網下的手冊只有匯編的沒有C的,匯編的看不懂不會。
回復

使用道具 舉報

8#
ID:123289 發表于 2017-3-24 22:01 | 只看該作者
所謂看門狗,就是一個“偽”獨立于單片機的一個計數器。
回復

使用道具 舉報

9#
ID:123289 發表于 2017-3-24 22:03 | 只看該作者
起動它就是將它的連接開關接通,實現的方法“通常”是將特殊寄存器中的某個位置1(不排除有其它大同小異的方式)。實際就是將其CLK與接通(有的是系統時鐘,有的是獨立的振蕩器,與CPU的硬件結構有關)。
回復

使用道具 舉報

10#
ID:123289 發表于 2017-3-24 22:04 | 只看該作者
計數器計數之前,總是要先預置一個起始的數字吧(不置就會默認一個數),這個數就是看門狗的動作時間。
回復

使用道具 舉報

11#
ID:123289 發表于 2017-3-24 22:05 | 只看該作者
如果沒有對計數器進行干預,計數器必計滿的時候,并溢出一個信號,看門狗的這個溢出信號是通過一個“開關”與CPU的復位連在一起的。
如果這個開關是開通的(通常它也是特殊寄存器中的某個位置),也就是你允許了看門狗工作。溢出時,單片機就被看門狗復位了。
回復

使用道具 舉報

12#
ID:123289 發表于 2017-3-24 22:07 | 只看該作者
也就是:當你允許看門狗工作(將溢出與CPU的RESET連接),并起動看門狗之后(將CLK接通),過一段時間,CPU將被復位就是必然的了!
回復

使用道具 舉報

13#
ID:123289 發表于 2017-3-24 22:13 | 只看該作者
這時你有沒有阻止看門狗(計數器)溢出,不讓它復位單片機的辦法呢?
理論上沒有,但卻有一個辦法延長它的溢出時間,就是在看門狗溢出之前,改小計數器的數字,讓它遠離計滿,最簡單常用的方法就是重新將初始值付于看門狗。
回復

使用道具 舉報

14#
ID:123289 發表于 2017-3-24 22:15 | 只看該作者
使用看門狗復位成初始值的動作,就叫“喂狗”,明顯,只要給計數器一個SET脈沖即可!CPU做這件事的方法是向看門狗與一個數(發一個脈沖)。為了防止誤操作,故意要求寫兩個字節。
至于為什么是“1e和e1”呢?其實不是它也可以,你來給個數字,不過你給了以后,我也會這樣來問你!總要給一個吧,它是設計看門狗的設計師定的。
回復

使用道具 舉報

15#
ID:123289 發表于 2017-3-24 22:22 | 只看該作者
可見,喂狗,只能暫時阻止看門狗復位單片機,但不能徹底阻止它復位單片機。
人們利用這個特點達成了以下目的:
如果在看門狗溢出之前喂狗,就能阻止它復位單片機。一但不喂狗了(程序“跑飛”,走不到喂狗程序),CPU過一段時間必被看門狗復位!就可以將“跑飛”的程序,“拉回來”。
回復

使用道具 舉報

16#
ID:183272 發表于 2017-3-25 13:33 | 只看該作者
太難了


回復

使用道具 舉報

17#
ID:183290 發表于 2017-3-25 13:51 | 只看該作者
有源碼沒?
回復

使用道具 舉報

18#
ID:103038 發表于 2017-3-25 14:57 | 只看該作者

《新概念51單片機C語言教程》里面有詳細的看門狗范例,是C語言寫的,寫的挺詳細的。
回復

使用道具 舉報

19#
ID:182429 發表于 2017-3-25 20:30 | 只看該作者
我用過其他單片機,喂狗時是寫入0x5A,0xA5的,可設定喂狗周期,兩個周期沒喂就會RESET。當軟件有BUG或靜電干擾時有可會死機然后兩周期沒喂狗之后RESET。
0x5A,0xA5可能是單片機設計時定下來的。
回復

使用道具 舉報

20#
ID:155507 發表于 2017-3-26 14:25 | 只看該作者
  1. /*-----------------------------------------------
  2.   名稱:看門狗溢出實驗 按鍵不停喂狗
  3.   內容:通過按鍵喂狗防止溢出復位 看門狗演示程序  
  4.         在16383個機器周期內必須至少喂狗一次
  5.         標準AT89s52單片機試驗通過。
  6. ------------------------------------------------*/
  7. #include <reg52.h>

  8. sfr WDTRST = 0xE1;

  9. sbit  K1 = P3^0;
  10. sbit  K2 = P3^1;
  11. sbit  LED1=P1^1;
  12. sbit  LED2=P1^2;

  13. void DelayUs2x(unsigned char t);//us級延時函數聲明
  14. void DelayMs(unsigned char t); //ms級延時
  15. /*------------------------------------------------
  16.                     主函數
  17. ------------------------------------------------*/
  18. main()
  19. {
  20.    LED1=0;
  21.    DelayMs(100);
  22.    LED1=1;
  23.    DelayMs(100);

  24.    TMOD=0x01;
  25.    TH0=0xc6;      //定時16ms
  26.    TL0=0x66;
  27.    EA=1;
  28.    ET0=1;

  29.    WDTRST=0x1e;   //在程序初始化中激活看門狗。
  30.    WDTRST=0xe1;   //先送1E,后送E1

  31.    if(K1==0)
  32.    {
  33.      TR0=1;
  34.    }

  35.    while(1)
  36.    {   
  37.      if(K2==0)
  38.      {
  39.        TR0=0;
  40.      }
  41.          LED2=1;
  42.          LED1=1;
  43.          DelayMs(100);
  44.          LED2=0;
  45.          DelayMs(100);
  46.    }
  47. }
  48. /*------------------------------------------------
  49.               定時器中斷函數
  50. ------------------------------------------------*/
  51. void Time0(void) interrupt 1
  52. {
  53.    TH0=0xc6;      //定時16ms
  54.    TL0=0x66;

  55.    WDTRST=0x1e;   //喂狗指令
  56.    WDTRST=0xe1;
  57. }

  58. /*------------------------------------------------
  59. uS延時函數,含有輸入參數 unsigned char t,無返回值
  60. unsigned char 是定義無符號字符變量,其值的范圍是
  61. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  62. 長度如下 T=tx2+5 uS
  63. ------------------------------------------------*/
  64. void DelayUs2x(unsigned char t)
  65. {   
  66. while(--t);
  67. }
  68. /*------------------------------------------------
  69. mS延時函數,含有輸入參數 unsigned char t,無返回值
  70. unsigned char 是定義無符號字符變量,其值的范圍是
  71. 0~255 這里使用晶振12M,精確延時請使用匯編
  72. ------------------------------------------------*/
  73. void DelayMs(unsigned char t)
  74. {
  75.      
  76. while(t--)
  77. {
  78.      //大致延時1mS
  79.      DelayUs2x(245);
  80.          DelayUs2x(245);
  81. }
  82. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产一区二区三区四区 | 国产激情一区二区三区 | 黄色一级片视频 | 久久国产成人 | 成人av高清在线观看 | 黄色一级毛片免费看 | 国产人成精品一区二区三 | 男女羞羞视频在线看 | 日韩视频一区二区在线 | 一区二区视频在线观看 | 九九伊人sl水蜜桃色推荐 | 成人在线观看免费 | 九色网址| 美女福利网站 | 日韩在线免费观看视频 | 日本久久一区二区三区 | 99精品视频一区二区三区 | 欧美日韩三区 | 国内精品视频在线观看 | 在线婷婷| 日本高清视频在线播放 | 在线免费观看日本 | 国产露脸对白88av | 久久免费国产 | 五月香婷婷 | 午夜精品在线观看 | 精品久久久久久久 | 精品一区二区三区四区外站 | 日韩精品免费视频 | 亚洲欧美精品国产一级在线 | 91精品亚洲 | 日本午夜免费福利视频 | 久久黄色精品视频 | 美女天堂在线 | 91精品国产91 | 天天天操| 国产一区二区三区四区五区加勒比 | 欧美极品在线视频 | 亚洲国产精品一区二区第一页 | 亚洲精品自在在线观看 | 亚洲精品一区二区三区 |