⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tx.c

📁 keil uvision 写24c02
💻 C
字号:
/*
*  Copyright (c) 2000, By hao taizhong
*
*  $Workfile:   AT24CXX.c  $
*  $Revision:   3.2  $
*  $Modtime:   2000-8-6  $
*
*  Purpose:
*
*  Compiler: Franklin_C 3.96 Compiler      
*  Ext Packages:   
*
*/

#include"mcu-define.h"
#include"macro.h"
#include "at24cxxa.h"
#include"max813l.h"

#define AT24C512  1
//#define AT24C256  1
//#define AT24C128  1
//#define AT24C64   1
//#define AT24C32   1

#ifdef AT24C512
#define SIZEPERCHIP 0x10000
#endif

#ifdef AT24C256
#define SIZEPERCHIP 0x8000
#endif

#ifdef AT24C128
#define SIZEPERCHIP 0x4000
#endif
#ifdef AT24C64
#define SIZEPERCHIP 0x2000
#endif

#ifdef AT24C32
#define SIZEPERCHIP 0x1000
#endif

static code BYTE CHIP_READ_ID = 1;
static code BYTE CHIP_WRITE_ID= 0;
static code BYTE CONTROL_CODE =0xa0;

static BYTE     A_AT24XXShIn(void) ;
static void A_AT24XXShOut(BYTE  ch);
static void    A_AT24XXStart( void );
static void    A_AT24XXStop(void)  ;
static BYTE     A_AT24XXCurRead(BYTE chipid);
static void  A_AT24XXWait(BYTE chipid) ;
static void   A_AT24XXBitIn(void) ;


sbit A_SCL=P2^1;
sbit A_SDA=P2^0;

static bdata BYTE A_i2data;
sbit A_i2b0=A_i2data^0;
sbit A_i2b7=A_i2data^7;

static void A_AT24XXStart(void)
{
A_SDA=1;
A_SCL=0;
A_SCL=1;
A_SDA=0;
A_SCL=0;

}

static void A_AT24XXStop(void) 
{
A_SDA=0;
A_SCL=1;
A_SDA=1;

}
static void A_AT24XXShOut(BYTE  ch) {
      BYTE i;
      A_i2data=ch;
      for (i=0;i<8;i++){
                A_SDA=A_i2b7;
                A_SCL=1; 
                A_SCL=0;
                A_i2data<<=1;
      }
}

static BYTE  A_AT24XXCurRead(BYTE chipid)  
{
BYTE ret;

A_AT24XXStart();
A_AT24XXShOut(CONTROL_CODE | chipid | CHIP_READ_ID);//0xa1
A_AT24XXBitIn();
ret=A_AT24XXShIn();
    A_AT24XXBitIn();
return ret;
}


BYTE A_AT24XXReadRandByte(DWORD addr)  
{
BYTE ret;
BYTE chipid;
WORD subaddr;

subaddr =addr &(SIZEPERCHIP-1);

chipid=addr/SIZEPERCHIP;
chipid <<=1;

    A_AT24XXStart() ;       // write start 

    A_AT24XXShOut(CONTROL_CODE | chipid | CHIP_WRITE_ID);//AT24xx device chip 
address and write mark 
    A_AT24XXWait(chipid);
    A_AT24XXBitIn();
    A_AT24XXShOut(HIBYTE(subaddr));
    A_AT24XXBitIn();
    A_AT24XXShOut(LOBYTE(subaddr));
    A_AT24XXBitIn();
    ret = A_AT24XXCurRead(chipid);
    A_AT24XXStop();      // read stop 
return ret;
}


void A_AT24XXWriteByte(DWORD addr,BYTE dat) 
{
BYTE chipid;
WORD subaddr;

subaddr =addr &(SIZEPERCHIP-1);

chipid=addr/SIZEPERCHIP;

chipid<<=1;

A_AT24XXStart();    
A_AT24XXShOut(CONTROL_CODE | chipid | CHIP_WRITE_ID);  
A_AT24XXWait(chipid);
A_AT24XXBitIn();
A_AT24XXShOut(HIBYTE(subaddr));
A_AT24XXBitIn();
A_AT24XXShOut(LOBYTE(subaddr));
A_AT24XXBitIn();
A_AT24XXShOut(dat);
A_AT24XXBitIn();
A_AT24XXStop();      //  stop 
}


static BYTE   A_AT24XXShIn(void) 
{
register BYTE  i;
        A_i2data=0;
        for (i=0;i<8;i++) {
                A_i2data <<=1;
                A_SDA=1;
                A_i2b0=A_SDA;
                A_SCL = 1 ;
                A_SCL=0;   
        }
return A_i2data;
}

/*
WORD  A_AT24XXReadRandWord(DWORD  addr)
{
        register WORD ret;
        ret=A_AT24XXReadRandByte(addr);
        ret<<=8;
        addr++;
        ret+=A_AT24XXReadRandByte(addr);

return ret;
}
*/
/*
void A_AT24XXWriteWord(DWORD addr,WORD dat)
{   
    BYTE dl,dh;
    dl = dat;
    dh = dat>>8;
    A_AT24XXWriteByte(addr, dh);
    addr++;
    A_AT24XXWriteByte(addr,dl);
}
*/
static void A_AT24XXWait(BYTE chipid)
{ BYTE i;
    for(i=5;;i++) {
            A_SDA=1;
clr_WDT();
if(i==0) return;
            if(A_SDA) {
               A_AT24XXStart();
               A_AT24XXShOut(CONTROL_CODE | chipid | CHIP_WRITE_ID);
            }
            else return;
    }
}
static void  A_AT24XXBitIn(void) {
        A_SDA=1;
        A_i2b0=A_SDA;        
        A_SCL=1;
        A_SCL=0;
}

/*end of AT24Cxx utilities */ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -