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 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
硬件看门狗电路(Hardware Watchdog)的设置通常需要涉及以下几个方面: 1. 看门狗定时器配置:硬件看门狗电路通常由一个定时器和一个计数器组成。您需要根据硬件平台的要求,在系统初始化期间配置看门狗定时器的时钟源、计数器的初始值和定时器的工作模式等参数。 2. 看门狗喂狗操作:在系统运行过程中,您需要定期喂狗来防止看门狗定时器超时触发复位。这通常可以通过向看门狗计数器写入特定的数值来实现,从而重置定时器的计数值。 3. 看门狗超时处理:当看门狗定时器超时未被重置时,硬件看门狗电路会触发复位信号,导致系统重新启动。您可以在系统中添加特定的处理程序,以便在看门狗超时发生时进行相应的处理,例如记录日志、执行特定操作或进行故障恢复。 请注意,硬件看门狗电路的具体设置方式会因硬件平台的不同而有所差异。因此,您需要参考硬件供应商提供的文档或参考设计手册来了解具体的设置方法和参数配置。 另外,为了确保系统的稳定和可靠性,在设置硬件看门狗电路时,请务必注意以下几点: - 设置合适的看门狗定时器超时时间,以保证系统可以在正常运行过程中及时喂狗,避免误触发复位。 - 在系统初始化期间,确保正确地配置和启动看门狗定时器,以防止出现意外复位或系统死锁的情况。 - 在系统运行过程中,定期喂狗,确保看门狗定时器不会超时触发复位。 - 在系统设计中,合理考虑看门狗超时处理的策略和操作,以便及时发现和处理系统故障情况。 希望以上信息对您有所帮助。如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值