?? 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 + -