看门狗(X5045)开发档案(原创哦)

 

    看门狗X5045开发档案

                                                                                                作者:张先永   2009630        

 

    最近给客户做了一个电机控制板。考虑到产品的稳定性。所有复位电路我们采用了X5045最为复位。当然前期我也下了不少的资料看。可是大多的不全。或者是程序不能用,现在我把我的程序发给大家。希望做X5045的朋友可以用的上,也算是我个人回馈论坛吧。当然我支持程序原创,因为许许多多的

一手资料都不是网上下的。而是写出来的。在此我更希望大家自己动手去写程序。因为只有自己写用的时候你才会有底。

 

     X5045工作在4.5V-5.5V,希望要用在2.7V-5.5V,并且复位电压在3.0V的同志。记得选型的时候选X5045S8I-2.7A我也曾经为此复位电压苦恼了很久,我用的是锂电池3.6V,我当时选的X5045一直在啊复位希望读者,一定要看清除数据手册在选型。

 

    下面是我项目中的  X5045的读写程序,希望可以用的上的可以拿去参考。

 

     X5045接线电路图:

 

          看门狗(X5045)开发档案(原创哦)_第1张图片

 

 

 

测试程序:

 说明:

   以下程序包含:底层字节读取函数,复位看门狗,状态寄存器的读写函数,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);
  }
 }
}

 

 

注:

     如需帮助请发送邮件到  [email protected]  我很乐意为你解答。

 

你可能感兴趣的:(工作,cmd,REST,测试,产品,delay)