📄 eeprom.c
字号:
/** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2003年3月26日
** 描 述: 增加注释
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
//#include "PUMP.h"
#include <reg52.h >
#include<INTRINS.H>
//#define SDA P3_5
//#define SCL P3_4
#define uchar unsigned char
#define uint unsigned int
#define TRUE 1
#define FALSE 0
//#define SDA P3_5;
//#define SCL P3_4;
sbit SDA= P3^5;
sbit SCL = P3^4;
void delay(void){
unsigned char def;
for (def = 0; def < 70; def++ )//降低时钟频率延时
{
//get_ADC_val(0);
}
return ;
}
//向24XX发开始信号
//
void iicstart(void){
SDA = 1;
delay();
SCL = 1;
delay();
SDA = 0; //发开始信号
delay();
SCL = 0;
delay();
SDA = 1; //准备发送或接?
delay();
}
//********************************************************************************************************
//*********************************************************************************************************
//向24cxx发停止信号
void iicstop(void){
SDA = 0;
delay();
SCL = 1;
delay();
SDA = 1;
delay();
SCL = 0;
delay();
}
void IICInit(void)
{
SCL = 0;
delay();
iicstop();
}
//*******************************************************************************************************
//*******************************************************************************************************
//发送应答信号
void iicACK(void)
{
SDA = 0;
delay();
SCL = 1;
delay();
SCL = 0;
}
/*********************************************************************************************************
** ????: IIC_NO_ACK
** ????: ??IIC?????
** ? ?: ?
** ? ?: ?
** ????: ?
** ????: ?
********************************************************************************************************/
void IIC_NO_ACK(void)
{
SDA = 1;
delay();
SCL = 1;
delay();
SCL = 0;
return;
}
//********************************************************************************
//********************************************************************************
//发送一个字节
unsigned char IICSend(char IIC_data)
{
char i;
for (i = 0; i < 8; i++)
{
IIC_data = IIC_data << 1;
F0 = SDA = CY;
SCL = 1;
// if (F0 != CY)
// {
// SCL = 0;
// return FALSE;
// } //此处不明原因为什么会错
delay();
SCL = 0;
}
SDA = 1;
delay();
SCL = 1;
delay();
if (SDA == 1)
{
SCL = 0;
return FALSE;
}
else
{
SCL = 0;
return TRUE;
}
}
//********************************************************************************************************
//********************************************************************************************************
//接收一个字节
char IICReceive(void)
{
char i,r;
r = 0;
SDA = 1;
delay();
for (i = 0; i < 8; i++)
{
r = r * 2;
SCL = 1;
delay();
if (SDA == 1)
{
r++;
delay();
}
SCL = 0;
delay();
}
return r;
}
/*********************************************************************************************************
** 函数名称: Cat24WCxxWrite
** 功能描述: 编程Cat24WCxx(仅允许一个任务可以调用)
** 输 入: addr]:外部引脚设置的地址(将所有Cat24WCXX看成Cat24WC02)
** nbyte:编程字节数目
** index:编程起始的地址
**
** 输 出: ?
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
char byteWrite ( char addr, char byte) {
char k;
k = 0xa0;
EA=0;
iicstart() ;
if (IICSend(k)== FALSE) //发送控制字
{
return FALSE;
}
if (IICSend(addr)== FALSE) //发送要写入的地址
{
return FALSE;
}
if (IICSend(byte)== FALSE) //发送要写入数据?
{
return FALSE;
}//
iicstop();
// get_ADC_val(0);
EA=1;
return TRUE ;
}
/*********************************************************************************************************
** 函数名称: Cat24WCxxRead
** 功能描述: 从Cat24WCxx读数据(仅允许一个任务可以调用)
** 输 入: Data[0]:外部引脚设置的地址(将所有Cat24WCXX看成Cat24WC02)
** Data[1]:需要读取字节数目
** Data[2]:读取的起始地址
** 输 出: Data:读取得数据
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
char byteRead(char addr )
{
char k,L;
EA=0;
k = 0xa0;
iicstart() ;
if (IICSend(k)== FALSE) //发送控制字
{//
return FALSE;//
}
if (IICSend(addr)== FALSE) //发送要写入的地址
{
return FALSE;
}
iicstart() ;
k = 0xa1;
if (IICSend(k)== FALSE) //发送控制?
{
return FALSE;
}
L = IICReceive();
IIC_NO_ACK();
iicstop() ;
// get_ADC_val(0);
EA=1;
return L;
}
//*******************************************************************************
//*******************************************************************************
char nbyteRead(char addr, char nbyte, char *index)// addr 要读取的地址 nbyte 读取的字节
{
for (/*nbyte++*/; nbyte !=0 ; nbyte--) {
*index = byteRead(addr);
index ++;
addr++;
}
return TRUE ;
}
//********************************************************************************
//********************************************************************************
char nbyteWrite ( char addr, char nbyte,char *index)
{
for ( /*nbyte++*/; nbyte!=0 ; nbyte--) {
byteWrite(addr, *index);
addr++;
index++;
}
return TRUE ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -