📄 tx.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 + -