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

📄 eeprom.c

📁 mtv230 的源程序,供大家参考.
💻 C
字号:
#include "Globe.h"
bit EEPROM_Error ;
BYTE idata EEPROMDelay;

void InitialIIC(void)
{    
	
   IICBufPtr=IICBuf.ByteArray;
}

//=============================================================
void I2cStart(void)
{
    byM230_IIC_CTR =0x00;
   ShortDelay(1);
   byM230_IIC_CTR=byM230_IIC_CTR|0x01;   //S rise
}

//=============================================================
bit wait_IIC(void)
{
   IICWait=IIC_WAIT_TIME;
   error=0;
   //check MBuf sent/received
   while( (byM230_IIC_INTFLG&0x01)==0)   // Wait for byM230_IIC_MBUFl                  
   {
      if(IICWait==0)
      {
         error=1;
         break;
      }
   }
   // check ack.
      if(byM230_IIC_STUS2&0x80)
   	{
      		error=1;
   	}
   
   byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
   return(error); 
}



//=============================================================
void I2cStop(void)
{
   byM230_IIC_CTR=0x00;
   ShortDelay(1);
   byM230_IIC_CTR=byM230_IIC_CTR|0x02;   //P rise
}  


//=============================================================
void IICRead(BYTE slave, BYTE address, BYTE count)
{
   BYTE data i;
   InitialIIC();
   byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
   //start
  byM230_IIC_CTR=0x00;   // S=0,P=0
   byM230_IIC_MBUF=slave;   // slave address (dummy write) 
   //I2cStart();
   ShortDelay(1);
  byM230_IIC_CTR=0x01;   // S=1,P=0
   error=wait_IIC(); 
   //dummy write
  // ShortDelay(1);
   byM230_IIC_MBUF=address;   //address
   error=wait_IIC(); 
   //restart
   byM230_IIC_CTR=byM230_IIC_CTR & 0xfe;   // S set 0
   byM230_IIC_MBUF=slave|0x01;   //restart + slave address (read)
   ShortDelay(1);
   byM230_IIC_CTR=byM230_IIC_CTR | 0x01;   // S set 1
   error=wait_IIC(); 
   //dummy read
   ShortDelay(1);
   IICBuf.ByteArray[0]=byM230_IIC_MBUF;
   error=wait_IIC();
   i=0;
   while(count!=0)
   {                    
      if(count==1)
      {
         byM230_IIC_CTR=0x05;   //Ack=1 
      }
      ShortDelay(1);
     *IICBufPtr=byM230_IIC_MBUF;
     IICBufPtr++;
      error=wait_IIC();
      if(error==1)   break; 
      count--;
      i++;
   } 
   I2cStop();

}



//=============================================================
void IICWrite(BYTE slave,BYTE address,BYTE count)
{
   BYTE  data i;
   InitialIIC();
   byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
   byM230_IIC_MBUF=slave;   // First byte of IIC data:slave address
   I2cStart();
   error=wait_IIC(); 
   byM230_IIC_MBUF=address;   // Send next byte:sub address
   error=wait_IIC(); 

   for(i=0; i<count; i++)
   {                                                             
      byM230_IIC_MBUF=*IICBufPtr;   // Send next byte
      IICBufPtr++;
     error=wait_IIC(); 
     if(error==1) break; 
   } 

   I2cStop();
   DelayX1ms(1);
}


BYTE EEPROM_Rd_Byte(BYTE address)
{
	while(EEPROMDelay);
	 IICRead(EEPROM_ADDRESS, address, 1);
	 EEPROMDelay=EEPROM_WAIT;
	InitialIIC();
       return IICBuf.ByteArray[0];
}

void EEPROM_Wr_Byte(BYTE address, BYTE datasheet)
{      
	IICBuf.ByteArray[0]=datasheet;
 	 while(EEPROMDelay);			
  	IICWrite(EEPROM_ADDRESS, address, 1);	
	  EEPROMDelay=EEPROM_WAIT;		
}

⌨️ 快捷键说明

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