📄 x5045.c.bak
字号:
#include"main.h"
#include<intrins.h>
#include"x5045.h"
#define uchar unsigned char
#define WREN 0X06
#define WRDI 0X04
#define RDSR 0x05
#define WRSR 0x01
#define READ 0x03
#define WRITE 0x02
#define NOP _nop_()
#define WD1_4S 0x00
#define WD600ms 0x10
#define WD200ms 0x20
#define WDDISABLE 0x30
sbit cs_dog=P1^2;//p2.4
sbit sck_dog=P1^3;
sbit si_dog=P1^4;
sbit so_dog=P1^5;
//extern delay_ms(uchar Count);
/*************************************************************************
* 函数原型:void STAR_25045(void)
* 功 能:启动看门狗
* 返 回 值:无
**************************************************************************/
void STAR_25045()//被调用的函数必须放在调用函数之前。
{
cs_dog=1;
NOP;
sck_dog=0;
NOP;
cs_dog=0;
}
/*************************************************************************
* 函数原型:uchar Byte_In()
* 功 能:从so_dog脚接收数据。
* 返 回 值:I_Data(一个字节)
**************************************************************************/
uchar Byte_out()
{
uchar i,I_Data=0;
//P0=0xff;//这就一定要
for(i=0;i<8;i++)
{
sck_dog=1;
NOP;
NOP;
NOP;
sck_dog=0;
I_Data=I_Data<<1;
if(so_dog)
{
I_Data++;
}
}
return(I_Data);
}
/*************************************************************************
* 函数原型:void Byte_Out(uchar I_Data)
* 功 能:从si_dog脚发送数据
* 参 数:I_Data
* 返 回 值:无
**************************************************************************/
void Byte_in(uchar I_Data)
{
uchar i ;
for(i=0;i<8;i++)
{
sck_dog=0;
if(0x80&I_Data)
{si_dog=1;}
else
{si_dog=0;}
NOP;
NOP;
NOP;
sck_dog=1;
I_Data=I_Data<<1;
}
si_dog=0;
}
/*************************************************************************
* 函数原型:void Wren_25045()
* 功 能:打开看门狗写使能。
* 返 回 值:无
**************************************************************************/
void Wren_25045()//Open write enable
{
STAR_25045();
Byte_in(WREN);
//sck_dog=0;
// _nop_();
NOP;
NOP;
NOP;
cs_dog=1;
}
/*************************************************************************
* 函数原型:uchar RDSR_25045()
* 功 能:读看门狗状态寄存器。
* 返 回 值:返回Status看门狗的状态。
**************************************************************************/
uchar RDSR_25045()//Read statinon regester
{
uchar Status=0;
// sck_dog=0;
cs_dog=0;
Byte_in(RDSR);
Status=Byte_out();
//sck_dog=0;
cs_dog=1;
return(Status);
}
/*************************************************************************
* 函数原型:uchar WIP_POLL()
* 功 能:看门狗写检查。
* 返 回 值:无
**************************************************************************/
void WIP_POLL()
{
uchar i,Status;
for(i=0;i<150;i++)
{
Status=RDSR_25045();
if(!(Status&0x01))
{return;}
}
}
/*************************************************************************
* 函数原型:uchar Byte_Write(uchar DPH,DPL,DATA)
* 功 能:写看门狗。
* 参 数:DPH写地址高位,DPL写地址低位,DATA写数据。
* 返 回 值:无。
**************************************************************************/
void Byte_Write(uchar DPH,DPL,DATA)
{
// EA=0;
Wren_25045();
STAR_25045();
//cs_dog=0;
if(DPH&0x01) {Byte_in(WRITE|0x08);}
else {Byte_in(WRITE); }
Byte_in(DPL);
Byte_in(DATA);
//sck_dog=0;
cs_dog=1;
WIP_POLL();
//EA=1;
}
/*************************************************************************
* 函数原型:uchar Byte_Read(uchar DPH,DPL)
* 参 数:DPH读地址高位,DPL读地址低位。
* 返 回 值:DATA。
**************************************************************************/
uchar Byte_Read(uchar DPH,DPL)
{
uchar DATA;
// EA=0;
STAR_25045();
//cs_dog=0;
if(DPH&0x01) {Byte_in(READ|0x08);}
else{ Byte_in(READ); }
Byte_in(DPL);
DATA=Byte_out();
//sck_dog=0;
//NOP;
// NOP;
//NOP;
//cs_dog=1;
//WIP_POLL();
//EA=1;
return(DATA);
}
/*************************************************************************
* 函数原型:void WRSR_25045()
* 功 能:写看门狗寄存器。
* 返 回 值:无。
* 备 注:看门狗超时周期1.4秒。
**************************************************************************/
void WRSR_25045()
{
Wren_25045();
STAR_25045();
Byte_in(WRSR);
Byte_in(WD1_4S);//write status register value
//sck_dog=0;
cs_dog=1;
WIP_POLL();
}
void REST_DOG()
{
cs_dog=0;
NOP;
NOP;
NOP;
cs_dog=1;
}
/*main()
{
WRSR_25045();
while(1)
{
cs_dog=1;
delay_ms(220);
_nop_();
cs_dog=0;
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -