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

📄 24cxx.c

📁 基于ST72324设计的汽车防盗器源程序
💻 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 + -