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