📄 x5045.c
字号:
#define X5045_H
#include "config.h"
//--------------------------------------------------------------------------------------
void flash() //延时子程序
{
_NOP_();
_NOP_();
}
//基本操作函数
void STAX(void)//;启动X25045指令
{ cs5045=1;
flash();
sck=0;
flash();
cs5045=0;
flash();
}
void ENDX(void)//;结束X25045指令
{ sck=0;
flash();
cs5045=1;
flash();
sck=1;
flash();
}
#ifdef MYUSE
//2)写状态寄存器子程序
void write_dogstate(uint8 wr)
{
WrReady();
write_enable(); /*写使能允许*/
sck=0;
cs5045=1;
flash();
cs5045=0;
write_dog(WRSR); /*WRSR,写状态寄存器*/
write_dog(wr); /*写状态字节*/
sck=0;
cs5045=1;
}
void clear_dog(void)//1)看门狗定时器复位子程序
{
cs5045=1;
flash();
cs5045=0;
flash();
cs5045=1;
}
#endif
//2)读1字节数据子程序
uint8 read_dog(void)
{
uint8 n;
uint8 rd;
for(n=8;n>0;n--)
{
sck=1;
flash();
sck=0;
if(so==1)
rd|=0x01;
else
rd&=0xFE;
if(n>1)rd=rd<<1;
}
return rd;
}
//3)写1字节数据子程序
void write_dog(uint8 wr)
{
uint8 n;
for(n=8;n>0;n--)
{
sck=0;
if(wr&0x80)
si=1;
else
si=0;
sck=1;
wr=wr<<1;
}
}
//4)写使能允许子程序
void write_enable(void)
{
STAX();
sck=0;
cs5045=0;
write_dog(WREN);/*写使能锁存器*/
sck=0;
cs5045=1;
ENDX();
}
//读写状态寄存器或E2PROM操作函数
//1)读状态寄存器子程序
uint8 read_dogstate(void)
{
uint8 status;
sck=0;
cs5045=0;
write_dog(RSDR); /*RSDR,读状态寄存器*/
status=read_dog(); /*读出状态字节*/
sck=0;
cs5045=1;
return status;
}
void WrReady()
{
uint16 i=0;
uint8 status;
do
{
status=read_dogstate();
i++;
}while(status&0x01 && i<MAX_POLL);
}
//3)读单元指定位置1字节数据子程序
uint8 EepromRead(uint16 addr)
{
uint8 com;
STAX();
DPTR=addr;
sck=0;
cs5045=0;
com=0x03;
if(DPH&0x01)com|=0x08;
write_dog(com); /*READ,读数据命令*/
write_dog(DPL); /*写数据起始地址*/
com=read_dog(); /*读数据*/
sck=0;
cs5045=1;
ENDX();
return com;
}
//4)向单元指定位置写1字节数据子程序
void EepromWrite(uint16 addr,uint8 wr)
{
uint8 status;
WrReady();
write_enable(); /*WREN,写使能允许*/
DPTR=addr;
sck=0;
cs5045=0;
status=0x02;
if(DPH&0x01)status|=0x08;
write_dog(status); /*WRITE,写数据命令*/
write_dog(DPL); /*写数据起始地址*/
write_dog(wr); /*写数据*/
sck=0;
cs5045=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -