您当前的位置:五五电子网电子知识单片机-工控设备源码-程序读写24LCxx系列的EEPROM的实例C语言程序 正文
读写24LCxx系列的EEPROM的实例C语言程序

读写24LCxx系列的EEPROM的实例C语言程序

点击数:7217 次   录入时间:03-04 11:36:20   整理:http://www.55dianzi.com   源码-程序
//************************************************
#pragma interrupt isr_high

    void isr_high(void)
{
 PIR1bits.TMR2IF=0;    // Clear Timer2 interrupt Flag
 
 if (Debounce==0)
 {
  if (!SW2)
  { P_SW2=1; Debounce =Bounce_Time; }
  if (!SW6)
  { P_SW6=1; Debounce =Bounce_Time; }
 } 
 else if (SW2 & SW6)Debounce--;
  else Debounce =Bounce_Time;   
}       
#pragma code

    //***********************************************
//*        Write a Byte to EEPROM             
//*  - CTRl : Control Byte of EEPROM   
//*  - addr : LOCation of EEPROM   
//*  - data : Data Byte of EEPROM   
//***********************************************

    void Initialize_Timer2(void)
{

      RCONbits.IPEN=1;  // Enable Interrupt Priority bit
  IPR1bits.TMR2IP=1;  // Set Timer2 for High Priority
  INTCONbits.GIEH=1;  // Enable High Priority Interrupt

      OpenTimer2 (TIMER_INT_ON  // Turn On the Timer2 with Interrupt
      & T2_PS_1_4  // (4MHz/4) [4*10*(99+1)] = 4mS */
      & T2_POST_1_10);

      PR2 = 99;
}

    //***********************************************
//*        Write a Byte to EEPROM              *
//*  - ctrl : Control Byte of EEPROM  *
//*  - addr : Location of EEPROM  *
//*  - data : Data Byte of EEPROM    *
//***********************************************
void EEPROM_Write(unsigned char ctrl,unsigned char addr,unsigned char data)
{
 IdleI2C();                // ensure module is idle
  StartI2C();      // Start condition
 I2C_Done();      // Wait Start condition completed and clear SSPIF flag   

     WriteI2C(ctrl);    // Write Control+Write to EEPROM & Check BF flag
 while(SSPCON2bits.ACKSTAT);  // wait until received the AcknowLEDge from EEPROM
 I2C_Done();      // Clear SSPIF flag

     WriteI2C(addr);    // Write Address to EEPROM
 while(SSPCON2bits.ACKSTAT);  // wait until received the Acknowledge from EEPROM
 I2C_Done();

     WriteI2C(data);    // Write Data to EEPROM
 while(SSPCON2bits.ACKSTAT);  // wait until received the Acknowledge from EEPROM
 I2C_Done();

     StopI2C();      // Stop condition
 I2C_Done();      // Wait the Stop condition completed
}

    //***********************************************
//*        Pae Write to EEPROM               
//*
//*  - ctrl : Control Byte of EEPROM 
//*  - addr : Location of EEPROM   
//*  - length : Write counter
//*  - *dptr : RAM point --> EEPROM
//*
//***********************************************
void EE_Page_Write(unsigned char ctrl,unsigned char addr,unsigned char length,unsigned char *dptr)
{
 IdleI2C();                // ensure module is idle
  StartI2C();      // Start condition
 I2C_Done();      // Wait Start condition completed
 
 WriteI2C(ctrl);    // Write Control+Write to EEPROM & Check BF flag
 while(SSPCON2bits.ACKSTAT);  // wait until received the Acknowledge from EEPROM
 I2C_Done();      // Clear SSPIF flag

     WriteI2C(addr);    // Write Address to EEPROM
 while(SSPCON2bits.ACKSTAT);  // wait until received the Acknowledge from EEPROM
 I2C_Done();

     while (length!=0)    // Check write completed ?
 {
  WriteI2C(*dptr);  // Write data to EEPROM
  while(SSPCON2bits.ACKSTAT); // wait until received the Acknowledge from EEPROM
  I2C_Done();
  dptr++;      // Point to next byte
  length--;
 }
 
 StopI2C();      // Stop condition
 I2C_Done();      // Wait the Stop condition completed
}
 
//***********************************************
//*        EEPROM Acknowledge Polling          *
//*  --  The routine will polling the ACK  *
//*      response from EEPROM      *
//*  --  ACK=0 return        *
//*  --  ACK=1 send Restart & loop check  *
//***********************************************
void EEPROM_ACK(unsigned char ctrl)
{
 unsigned char i;

     IdleI2C();                // ensure module is idle
  StartI2C();      // Start condition
 I2C_Done();      // Wait Start condition completed

     WriteI2C(ctrl);    // Write Control to EEPROM (WRITE)
 I2C_Done();      // Clear SSPIF flag

     while (SSPCON2bits.ACKSTAT)  // test for Acknowledge from EEPROM
    {
  for (i=0;i<100;i++);  // Delay for next Repet-Start

          RestartI2C();              // initiate Repet-Start condition
  I2C_Done();          // Wait Repet-Start condition completed

      WriteI2C(ctrl);    // Write Control to EEPROM (WRITE)
  I2C_Done();      // Clear SSPIF flag
    } 
 StopI2C();                      // send STOP condition
 I2C_Done();      // wait until stop condition is over
}

    //***********************************************
//*    Random Read a Byte from EEPROM          *
//*  - ctrl : Control Byte of EEPROM (Write) *
//*    (Ctrl +1 ) : Read Command    *
//*  - addr : Address Byte of EEPROM  *
//*  - Return : Read Data from EEPROM  *
//***********************************************
unsigned char EEPROM_Read(unsigned char ctrl,unsigned char addr)
{
 unsigned char f;
 
 IdleI2C();                // ensure module is idle
  StartI2C();      // Start condition
 I2C_Done();      // Wait Start condition completed

     WriteI2C(ctrl);    // Write Control to EEPROM   
    while(SSPCON2bits.ACKSTAT);    // test for ACK condition, if received
 I2C_Done();      // Clear SSPIF flag

     WriteI2C(addr);    // Write Address to EEPROM       
    while(SSPCON2bits.ACKSTAT);  // test for ACK condition, if received 

上一页  [1] [2] [3]  下一页


本文关键字:程序  C语言  源码-程序单片机-工控设备 - 源码-程序