📄 eeprom.c
字号:
/**51 EEPROM 驱动,占用P3.4,P3.5,P3.6,脚
93c56的ORG-6脚已经接地,所以93C56工作在9位地址,8位数据模式**/
#include "config.h"
sbit cs_93 = P3^6;//CS
sbit sk_93 = P3^5;//CLK
sbit di_93 = P3^4;//DI/DO
sbit do_93 = P3^4;//DI/DO
/*高电平时序函数*/
void high56(void)
{
di_93=1;
sk_93=1; _nop_();
sk_93=0;_nop_();
}
/*低电平时序函数*/
void low56(void)
{
di_93=0;
sk_93=1;_nop_();
sk_93=0;_nop_();
}
/*写电平时序函数*/
void wd56(uint8 dd)
{
uint8 i;
for (i=0;i<8;i++)
{
if (dd>=0x80) high56();
else low56();
dd=dd<<1;
}
}
/*读电平时序函数*/
uint8 rd56(void)
{
uint8 i,dd=0;
do_93=1;
for (i=0;i<8;i++)
{
dd<<=1;
sk_93=1;_nop_();
sk_93=0;_nop_();
if (do_93) dd|=1;
}
return(dd);
}
/*********************************************************************************************************
** 函数名称: Read56()
** 功能描述: 读EEPROM字节
** 输 入: ADD:地址
**
** 输 出:读到的字节
** 调用模块:
*------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 Read56(uint8 ADD)
{
uint8 dat;
EA=0;
cs_93=sk_93=0;
cs_93=1;
high56();
high56();
low56();
low56();
wd56(ADD);
dat=rd56();
cs_93=0;
EA=1;
return(dat);
}
/*********************************************************************************************************
** 函数名称: EWEN56()
** 功能描述: 允许擦除/写
** 输 入:
**
** 输 出:
** 调用模块:
*------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void EWEN56()
{
_nop_();
cs_93=1;
high56();
low56();
low56();
wd56(0xc0);
cs_93=0;
}
/*********************************************************************************************************
** 函数名称: EWDS56()
** 功能描述: 禁止擦除/写
** 输 入:
**
** 输 出:
** 调用模块:
*------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void EWDS56()
{
_nop_();
cs_93=1;
high56();
low56();
low56();
wd56(0x00);
cs_93=0;
}
/*********************************************************************************************************
** 函数名称: Write56()
** 功能描述: 写EEPROM字节
** 输 入: ADD:地址,WBUF:写入的数
**
** 输 出:成功1,失败0
** 调用模块:
*------------------------------------------------------------------------------------------------------
********************************************************************************************************/
bit Write56(uint8 ADD,uint8 WBUF)
{
uint8 e=0;
while (e<3)
{ EA=0;
cs_93=sk_93=0;
cs_93=1;
EWEN56();
_nop_();
cs_93=1;
_nop_();
high56();
low56();
high56();
low56();
wd56(ADD);
wd56(WBUF);
cs_93=0;
_nop_();
cs_93=1;
do_93=1;
DelayMs(2);
cs_93=0;
EA=1;
if (Read56(ADD)==WBUF)
{
return(1);
}
e++;
}
EA=0;
EWDS56();
EA=1;
return(0);
}
/*********************************************************************************************************
** 函数名称: Erase56()
** 功能描述: 删除EEPROM字节
** 输 入: ADD:地址
**
** 输 出:成功1,失败0
** 调用模块:
*------------------------------------------------------------------------------------------------------
********************************************************************************************************/
bit Erase56(uint8 ADD)
{
uint8 e=0;
while (e<3)
{EA=0;
cs_93=sk_93=0;
cs_93=1;
EWEN56();
_nop_();
cs_93=1;
_nop_();
high56();
high56();
high56();
low56();
wd56(ADD);
low56();
cs_93=0;
_nop_();
cs_93=1;
do_93=1;
DelayMs(2);
cs_93=0;
EA=1;
if (Read56(ADD)==0xff)
{
return(1);
}
e++;
}
EA=0;
EWDS56();
EA=1;
return(0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -