X5045看門狗電路

轉載:僅爲學習用: 

看門狗X5045開發檔案 

    最近給客戶做了一個電機控制板。考慮到產品的穩定性。所有復位電路我們採用了X5045最爲復位。當然前期我也下了不少的資料看。可是大多的不全。或者是程序不能用,現在我把我的程序發給大家。希望做X5045的朋友可以用的上,也算是我個人回饋論壇吧。當然我支持程序原創,因爲許許多多的

一手資料都不是網上下的。而是寫出來的。在此我更希望大家自己動手去寫程序。因爲只有自己寫用的時候你纔會有底。

     X5045工作在4.5V-5.5V,希望要用在2.7V-5.5V,並且復位電壓在3.0V的同志。記得選型的時候選X5045S8I-2.7A,我也曾經爲此復位電壓苦惱了很久,我用的是鋰電池3.6V,我當時選的X5045一直在啊復位希望讀者,一定要看清除數據手冊在選型。

    X5045是一種集看門狗、電壓監控和串行EEPROM 三種功能於一身的可編程控制電路.特別適合應用在需要少量存儲器,並對電路板空間需求較高場合,X5045具有電壓監控功能,可以保護系統免受低電壓的影響,當電源電壓降到允許範圍(4.2V)以下時,系統將復位,直到電源電壓返回到穩定值爲止。X5045的存儲器與CPU 通過串行通信方式接口(SPI),可以存放512個字節數據.可擦寫100萬次,數據可保存100年.

    下面是我項目中的  X5045的讀寫程序,希望可以用的上的可以拿去參考。

     X5045接線電路圖:

         

測試程序:

 說明:

   以下程序包含:底層字節讀取函數,復位看門狗,狀態寄存器的讀寫函數,EEPROM的讀寫函數。

在主函數中有一個  P0=design[b];//讀已經定義的花樣數據並寫花樣數據到P0;那個是我在程序測試的時候用的使用可以不易理會,send_char_com(Read_StatusReg()); 是利用串口把狀態寄存器中的數發送到PC機上去。這個也是我測試用的。這些函數在另一個 .h文件中我就不發上去了,你們應該是會寫的。

   我的程序在實際應用中得到了事實的考證,經過實際的檢驗。單片機做控制外置看門狗電路效果很不錯。X5045的功能很強大在實際開發中很有價值。

 

 

//=============================================
//程 序:X5045看門狗的使用

//MCU:AT89C2051

//晶振:12M
//署名:張先永
//時間:2009-6-6
//=============================================
#include <AT89X51.h>

#define uchar unsigned char 
#define uint  unsigned int
/*
#define CS    P1_4
#define SO    P1_5
#define SI    P1_7
#define SCLK  P1_6
*/

//實驗板測試
#define CS    P1_0
#define SO    P1_1
#define SI    P1_3
#define SCLK  P1_2
#define ID_Part_A 0x55
#define ID_Part_D 0x40

//=============================================
//函數名稱:1ms延時函數
//=============================================
delay1ms(int t)
{
 int i,j;
 for(i=0;i<t;i++)
  for(j=0;j<120;j++)  ;
}
//=============================================
//函數名稱: X5045寫入數據(NOTE:高位在前)
//=============================================
void Write_X5045(uchar Writer_data)
{
 unsigned char i;
 for(i=0;i<8;i++)
 {
     SI=(bit)(Writer_data&0x80);
  SCLK=0;
  SCLK=1;
  Writer_data<<=1;
 }
  SI=0; //使SI處於確定的狀態  
}
//=============================================
//函數名稱: X5045讀取數據(NOTE:高位在前)
//=============================================
uchar Read_X5045(void)
{
 unsigned char i,Read_data;
 for(i=0;i<8;i++)
 {
  SCLK=1;
  SCLK=0;
  Read_data<<=1;
  Read_data|=(uchar)(SO);
 }
 return Read_data; 
}

//=============================================
//函數名稱:WREN Instruction  允許寫 CMD OX06
//=============================================
void WREN_Cmd (void)
{
 SCLK=0;
 CS=0;
 Write_X5045(0x06);
 SCLK=0;
 CS=1;
}
//=============================================
//函數名稱:WRDI Instruction 不允許寫 CMD OX04
//=============================================
void WRDI_Cmd (void)
{
 SCLK=0;
 CS=0;
 Write_X5045(0x04);
 SCLK=0;
 CS=1;
}
//=============================================
//函數名稱: 讀狀態寄存器 
//說    明: WIP bit:(Read Only) 
//    When set to a"1",a nonvolatile 
//    write opration is in progress.
//    WEL Bit:(Read Only) 
//    the bit is Write Enable Latch
//    When WEL=1,the latch is set. 
//=============================================
uchar Read_StatusReg(void)
{
  uchar Read_data;
  SCLK=0;
  CS=0;
  Write_X5045(0X05);      //Read Status Register instuction
  Read_data=Read_X5045();
  SCLK=1;
  CS=1; 
  return (Read_data);    
}

//=============================================
//函數名稱: 寫狀態狀態寄存器
//=============================================
void Write_StateReg(uchar Writer_data)
{
  delay1ms(10); //等待器件穩定,經驗值
  WREN_Cmd (); //解鎖
  SCLK=0;
    CS=0;
  Write_X5045(0X01);
   Write_X5045(Writer_data);
   SCLK=0;
   CS=1;
  WRDI_Cmd (); //上鎖 
}
//=============================================
//函數名稱:重設看門狗
//=============================================
void Rest_WDG(void)
{
 CS=0;
 CS=1;
}
//=============================================
//函數名稱: 寫數據到X5045__EEPROM
//=============================================
void Writer_to_X5045(uchar Writer_data, address)
{
  WREN_Cmd (); //解鎖
  SCLK=0;
  CS=0;
  Write_X5045(0X02);
  Write_X5045(address);
  Write_X5045(Writer_data);
  SCLK=0;
  CS=1;
  WRDI_Cmd (); //上鎖
}
//=============================================
//函數名稱:讀取數據X5045__EEPROM 
//=============================================
uchar Read_form_X5045(uchar address)
{
 uchar Read_data;

 SCLK=0;
 CS=0;
 Write_X5045(0X03);
 Write_X5045(address);
 Read_data=Read_X5045();
 SCLK=0;
 CS=1;
 return Read_data;
}
//=============================================
//函數名稱:重置看門狗門限
//=============================================
void Reset_Vtrip(void)
{
 CS=0;
 delay1ms(50);
 SCLK=0;
 CS=0;
 Write_X5045(0x06);
 SCLK=0;
 CS=1;
 delay1ms(10);
 SCLK=0;
 CS=0;
 Write_X5045(0X02);
 Write_X5045(0x00);
 Write_X5045(0x03);
 Write_X5045(0x00);
 SCLK=0;
 CS=1; 
}
//=============================================
//函數名稱:設置看門狗門限
//=============================================
void Set_Vtrip(void)
{
 CS=0;
 delay1ms(50);
 SCLK=0;
 CS=0;
 Write_X5045(0x06);
 SCLK=0;
 CS=1;
 delay1ms(10);
 SCLK=0;
 CS=0;
 Write_X5045(0X02);
 Write_X5045(0x00);
 Write_X5045(0x01);
 Write_X5045(0x00);
 SCLK=0;
 CS=1; 
}

//=============================================
//函數名稱:配置串口
//=============================================
void Init_Com(void)
{
     TMOD = 0x20;       //定時器工作方式2,初值自動裝入
     PCON = 0x00;       //波特率不增倍
     SCON = 0x50;       //串行工作方式設定   
     TH1 = 0xFd;       //定時器初值高位
     TL1 = 0xFd;       //定時器初值低位
     TR1 = 1;        //啓動定時器    
}
//=============================================
//函數名稱:向串口發送一個字符 
//=============================================
void send_char_com(unsigned char ch)  
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}


//定義花樣數據
code   unsigned char design  
[32]={0xFF,0xFE,0xFD,
0xFB,0xF7,0xEF,0xDF ,0xBF,0x7f,
0x7f,0xbf,0xdf,0xef,0xF7,0xFB,0xFD,0xFE,0xFF,
0XFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,
0xE7,0xDB,0xBD,0x7E,0xFF};

//=============================================
//函數名稱:MAIN
//=============================================
void main()
{
 unsigned  char  b;//在C51中因內存由限需要儘可能考慮使用變量的類型
 
// Reset_Vtrip();
// delay1ms(60000);
// CS=0;
  Writer_to_X5045(ID_Part_D,ID_Part_A);
 Write_StateReg(0X10);
 Init_Com();
 while(1)
 { 
  for (b=0 ;b<32;b++)
     {
//  Set_Vtrip();
  P0=design[b];//讀已經定義的花樣數據並寫花樣數據到P0;
    send_char_com(Read_StatusReg());  
   send_char_com(Read_form_X5045(ID_Part_A));
   Rest_WDG();
  delay1ms(300);
  }
 }
}
--------------------- 
作者:zxianyong0 
來源:CSDN 
原文:https://blog.csdn.net/zxianyong/article/details/4310865 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章