X5045看门狗 功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了X5045看门狗 功能相关的知识,希望对你有一定的参考价值。
#include <reg51.h>#define uchar unsigned char
#define WRSRb 0X01 //写状态寄存器指令;
#define WRITEb 0X02 //写数据指令;
#define READb 0X03 //读数据指令;
#define WRDIb 0X04 //禁止写操作指令;
#define RDSRb 0X05 //读状态寄存器指令;
#define WRENb 0X06 //允许写操作指令;
#define WAIT_TIM 200 //等待时间常数;
sbit SO =P2^0; //串行数据输出端
sbit SI =P2^1; //串行数据输入端
sbit SCK =P2^2; //串行时钟端
sbit CS =P2^3; //片选端
void X5045_Rst(); //复位看门狗
void X5045_Wren_Cmd(void); //允许写操作指令函数;
void X5045_Wrdi_Cmd(void); //禁止写操作指令函数;
void X5045_Write(uchar dt); //写一个字节数据函数;
uchar X5045_Read(voX5045_id); //读一个字节数据函数;
uchar X5045_Read_State(void); //读状态控制字函数;
void X5045_Write_State(uchar dt);//写状态控制字函数;
void X5045_Read_Nuchar(bit bA8,uchar adr_L,uchar n,uchar *adr); //读n个字节数据函数;
void X5045_Write_Nuchar(bit bA8,uchar adr_L,uchar n,uchar *adr); //写n个字节数据函数;
void X5045_Wait_End(uchar run_times);//等待函数;
//函数定义;
void X5045_Rst() //复位看门狗
CS=0;
CS=1;
//在写数据到x5045前 写入允许写操作指令字;
void X5045_Wren_Cmd(void) //向X5045写入允许写操作指令字;
CS=1; //
SCK=0; //
CS=0; //片选有效
write(WRENb); //写入允许写操作指令字
CS=1; //片选无效
SCK=0;
void X5045_Wrdi_Cmd(void) //向X5045写入禁止写操作指令字;
CS=1; //
SCK=0; //
CS=0; //片选有效
write(WRDIb); //写入禁止写操作指令字
CS=1; //片选无效
SCK=0;
//make clk for send data
void X5045_Write(uchar dt) //向X5045写入一个字节数据
uchar i;
for(i=0;i<8;i++) //8位
SCK=0;
SI=(bit)(dt&0x80); //先发高位
SCK=1; //上升沿锁存
dt=dt<<1; //左移
SI=0;
//make clk for receive data
uchar X5045_Read(void) //从X5045读一个字节数据;
uchar i;
uchar dt=0; //清0
SO=1;
for(i=0;i<8;i++) //8位
SCK=1;
SCK=0;
dt=dt<<1; //左移
if(SO) dt++; //数据线为1 则数据加1 为0不处理
return dt;
//5045状态寄存器读出程序
//X5045状态控制字:
//BIT: 7 6 5 4 3 2 1 0
// x x WD1 WD0 BL1 BL0 WEL WIP
//WIP:0---正在写操作;
// 1---写操作完成;
//WEL:0---写使能锁存器复位;
// 1---写使能锁存器置位;
//BL1 BL0:
// 00--不保护;
// 01--保护:01H--180H--1FFH;
// 10--保护:100H--1FFH;
// 11--保护:000H--1FFH;
//WD1 WD0:
// 00--1.4秒;
// 01--600毫秒;
// 10--200毫秒;
// 11--禁止看门狗;
//read state word from x5045;
uchar X5045_Read_State(void)
//从X5045读状态控制字;
uchar dt;
X5045_Wren_Cmd(); //向X5045写入允许写操作指令字;
CS=1;
SCK=0;
CS=0;
X5045_Write(RDSRb); //写读状态寄存器指令
dt=X5045_Read(); //读状态寄存器
SCK=0;
CS=1;
return dt;
//write state word to x5045 before do somthing;
void X5045_Write_State(uchar dt) //向X5045写状态控制字;
X5045_Wren_Cmd(); //向X5045写入允许写操作指令字
CS=1;
SCK=0;
CS=0;
X5045_Write(WRSRb); //写读状态寄存器指令
X5045_Write(dt); //写状态寄存器
SCK=0;
CS=1;
wait_end(WAIT_TIM);
//read n uchars from x5045;
void X5045_Read_Nuchar(bit bA8,uchar adr_L,uchar n,uchar *adr)//读n个字节数据函数;
/*bit bA8,//选择EPROM上半部分/下半部分
uchar adr_L,//从EPROM中什么地址开始读;
uchar n, //要读的字节数;
uchar *adr)//所读的数据从什么地址开始存放;*/
//从X5045读n个字节数据;
uchar i ;
CS=1;
SCK=0;
CS=0;
X5045_Write(bA8?READb|0x08:READb);//选择EPROM上半/下半部分
X5045_Write(adr_L); //写EPROM中地址;
for(i=0;i<n;i++) //要读n个字节;
*adr=X5045_Read(); //读数据
adr++; //地址调整
SCK=0;
CS=1;
//write n uchars to x5045;//向X5045写n个字节数据;
void X5045_Write_Nuchar(bit bA8,uchar adr_L,uchar n,uchar *adr)//写n个字节数据函数;
/*bit bA8,//选择EPROM上半部分/下半部分;
uchar adr_L,//从EPROM中什么地址开始写;
uchar n,//要写的字节数;
uchar *adr)//从什么地址开始取数据写;*/
uchar i ;
EA=0;
X5045_Wren_Cmd(); //向X5045写入允许写操作指令字
CS=1;
SCK=0;
CS=0;
X5045_Write(bA8?WRITEb|0x08:WRITEb);//选择EPROM上半/下半部分
X5045_Write(adr_L); //写EPROM中地址;
for(i=0;i<n;i++) //要写n个字节;
X5045_Write(*adr); //写数据
adr++; //地址调整
SCK=0;
CS=1;
X5045_Wait_End(WAIT_TIM); //写等待时间
EA=1;
// wait for be sure to complete
void X5045_Wait_End(uchar run_times)//等待向X5045写操作完成;
register uchar dt=0;
while(run_times--)
dt=X5045_Read_State(); //读状态
if(dt&0x01==0)
break;
参考技术A X5045中的看门狗对系统提供了保护功能。当系统发生故障而超过设置时间时,电路中的看门狗将通过RESET信号向CPU 作出反应
以上是关于X5045看门狗 功能的主要内容,如果未能解决你的问题,请参考以下文章