📄 x5045p_drivers.c
字号:
#include "AT89S52.h"
#include "CONFIG.H"
#include "X5045P_Driver.h"
#include <intrins.h>
/************************************************************
X5045_EEPROM 指令宏定义 *
************************************************************/
#define WREN 0x06 //写使能
#define WRDI 0x04 //写禁止
#define RSDR 0x05 //读状态寄存器
#define WRSR 0x01 //写状态寄存器
#define READ_L 0x03 //读_L命令
#define WRITE_L 0x02 //写_L命令
#define READ_H 0x0b //读_H命令
#define WRITE_H 0x0a //写_H命令
/************************************************************
X5045_EEPROM 读缓冲与写缓冲变量定义 *
************************************************************/
uchar bdata WRITE_BUF,READ_BUF;
uchar bdata STATUS;
sbit STATUS_0=STATUS^0;
sbit WRITE_BUF_7=WRITE_BUF^7;
sbit READ_BUF_7=READ_BUF^7;
/************************************************************
X5045_EEPROM 写数据子程序 *
************************************************************/
void Send_Dat(uchar temp)
{
uchar data i;
WRITE_BUF=temp;
for(i=0;i<8;i++)
{
SCK=0;
SI=WRITE_BUF_7;
SCK=1;
WRITE_BUF=_crol_(WRITE_BUF,1);
}
}
/************************************************************
X5045_EEPROM 读数据子程序 *
************************************************************/
uchar Read_Dat(void)
{
uchar data i;
SO=1;
for(i=0;i<8;i++)
{
SCK=0;
READ_BUF_7=SO;
SCK=1;
READ_BUF=_crol_(READ_BUF,1);
}
return READ_BUF;
}
/************************************************************
X5045_EEPROM 读状态子程序 *
************************************************************/
uchar Read_Status(void)
{
uchar data buf;
CS=1;
CS=0;
Send_Dat(RSDR);
buf=Read_Dat();
CS=1;
return buf;
}
/************************************************************
X5045_EEPROM 写状态子程序 *
************************************************************/
void Write_Status(uchar temp)
{
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRSR);
Send_Dat(temp);
CS=1;
do{
STATUS=Read_Status();
}
while(STATUS_0==1);
}
/************************************************************
X5045_EEPROM 读_L存储器子程序(单元) *
格式:写READ_L+写8位地址+读8位数据 *
add:地址 *
************************************************************/
uchar Read_L_EEPROM_Cell(uchar add)
{
uchar data buf;
CS=1;
CS=0;
Send_Dat(READ_L);
Send_Dat(add);
buf=Read_Dat();
CS=1;
return buf;
}
/************************************************************
X5045_EEPROM 读_L存储器子程序(页) *
格式:写READ_L+写8位地址+读8位数据 *
add:起始地址(16的整数倍) *
*dat:目标数组指针 *
num:读取字节数(1~16) *
************************************************************/
void Read_L_EEPROM_Page(uchar add,uchar *dat,uchar num)
{
uchar data i;
CS=1;
CS=0;
Send_Dat(READ_L);
Send_Dat(add);
for(i=0;i<num;i++)
{
*dat=Read_Dat();
dat++;
}
CS=1;
}
/************************************************************
X5045_EEPROM 写_L存储器子程序(单元) *
格式:写WREN+写WRITE_L+写8位地址+写8位数据 *
add:地址 *
dat:传送数据 *
************************************************************/
void Write_L_EEPROM_Cell(uchar add,uchar dat)
{
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRITE_L);
Send_Dat(add);
Send_Dat(dat);
CS=1;
do{
STATUS=Read_Status();
}
while(STATUS_0==1);
}
/************************************************************
X5045_EEPROM 写_L存储器子程序(页) *
格式:写WREN+写WRITE_L+写8位地址+写8位数据 *
add:起始地址(16的整数倍) *
*dat:数组指针 *
num:传送字节数(1~16) *
************************************************************/
void Write_L_EEPROM_Page(uchar add,uchar *dat,uint num)
{
uint data i;
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRITE_L);
Send_Dat(add);
for(i=0;i<num;i++)
{
Send_Dat(*dat);
dat++;
}
CS=1;
do{
STATUS=Read_Status();
}
while(STATUS_0==1);
}
/************************************************************
X5045_EEPROM 读_H存储器子程序(单元) *
格式:写READ_H+写8位地址+读8位数据 *
add:地址 *
************************************************************/
uchar Read_H_EEPROM_Cell(uchar add)
{
uchar data buf;
CS=1;
CS=0;
Send_Dat(READ_H);
Send_Dat(add);
buf=Read_Dat();
CS=1;
return buf;
}
/************************************************************
X5045_EEPROM 读_H存储器子程序(页) *
格式:写READ_H+写8位地址+读8位数据 *
add:起始地址(16的整数倍) *
*dat:目标数组指针 *
num:读取字节数(1~16) *
************************************************************/
void Read_H_EEPROM_Page(uchar add,uchar *dat,uchar num)
{
uchar data i;
CS=1;
CS=0;
Send_Dat(READ_H);
Send_Dat(add);
for(i=0;i<num;i++)
{
*dat=Read_Dat();
dat++;
}
CS=1;
}
/************************************************************
X5045_EEPROM 写_H存储器子程序(单元) *
格式:写WREN+写WRITE_H+写8位地址+写8位数据 *
add:地址 *
dat:传送数据 *
************************************************************/
void Write_H_EEPROM_Cell(uchar add,uchar dat)
{
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRITE_H);
Send_Dat(add);
Send_Dat(dat);
CS=1;
do{
STATUS=Read_Status();
}
while(STATUS_0==1);
}
/************************************************************
X5045_EEPROM 写_H存储器子程序(页) *
格式:写WREN+写WRITE_H+写8位地址+写8位数据 *
add:起始地址(16的整数倍) *
*dat:数组指针 *
num:传送字节数(1~16) *
************************************************************/
void Write_H_EEPROM_Page(uchar add,uchar *dat,uint num)
{
uint data i;
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRITE_H);
Send_Dat(add);
for(i=0;i<num;i++)
{
Send_Dat(*dat);
dat++;
}
CS=1;
do{
STATUS=Read_Status();
}
while(STATUS_0==1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -