📄 24cxx.c
字号:
#define __DEFINE_REGISTERS_STVD7_INCLUDE__
#include "ST72324BLK2.h"
#undef __DEFINE_REGISTERS_STVD7_INCLUDE__
#define asm_nop() _asm ("nop\n")
#define ERRORCOUNT 10
#define SDA BIT7 /*P3.1*/
#define SCL BIT6 /*P3.2*/
#define WP BIT4 /*P3.3*/
unsigned char errorflag;
extern void delay(int DelayNum);
unsigned char RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,unsigned char ControlByte);
/*DataBuff: read or wrire first address(RAM)
//ByteQuantity: Quantity of read or write(RAM)
//Address :address of 24cxx
//ControlByte EEPROM Control Byte (1)(0)(1)(0)(A2)(A1)(A0)(R/W),when read: R/W=1,
//when write:R/W=0,A2,A1,A0 as for 24c01 Chip select address;
//ERRORCOUNT: */
/***********************************************************************************/
unsigned char RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,unsigned char ControlByte)
{
void IICStart(void);
void IICStop(void);
char IICRecAck(void);
void IICNoAck(void);
void IICACK(void);
unsigned char IICReceiveByte(void);
void IICSendByte(unsigned char sendbyte);
unsigned char j,i=ERRORCOUNT;
errorflag=1;
PADDR=0XFF;
PAOR=0XFF;
PADR|=SDA;
PADR&=~WP;
delay(25);
while(i--)
{
IICStart();
IICSendByte(ControlByte&0xfe);
if(IICRecAck())
continue;
IICSendByte((unsigned char)Address);
if(IICRecAck())
continue;
if(!(ControlByte&0x01))
{
/*Write */
j=ByteQuantity;
errorflag=0; /*********clr errorflag*/
while(j--)
{
IICSendByte(*DataBuff++);
if(!IICRecAck())
continue;
errorflag=1;
break;
}
if(errorflag==1)
continue;
break;
}
else /* Reand */
{
IICStart();
IICSendByte(ControlByte);
if(IICRecAck())
continue;
while(--ByteQuantity)
{
*DataBuff++=IICReceiveByte();
IICACK();
}
*DataBuff=IICReceiveByte(); /*read last byte data*/
IICNoAck();
errorflag=0;
break;
}
}
IICStop();
if(!(ControlByte&0x01))
{
delay(250);
}
PADR|=WP; /* Write protect */
return(errorflag);
}
/*****************檸覙a晭艐幰IIC渰榽媍墡诇棞r妅橉***/
/*****************擈嫀瓬{榽**********************/
void IICStart(void)
{
PADR|=SDA;
PADDR|=SDA;
PADR&=~SCL;
asm_nop();
asm_nop();
PADR|=SCL;
asm_nop();
asm_nop();
PADR&=~SDA;
asm_nop();
asm_nop();
PADR&=~SCL;
PADR|=SDA;
}
/*****************桞泿稩IC渰榽****************/
void IICStop(void)
{
PADR&=~SCL;
PADDR|=SDA;
PADR&=~SDA;
PADR|=SCL;
asm_nop();
asm_nop();
PADR|=SDA;
asm_nop();
asm_nop();
}
/**************庩夌欵婎棊
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -