24LCxx系列的读写EEPROM的例C语言源程序实例
void isr_high_direct(void)
{
_asm //begin in-line assembly
goto isr_high //go to isr_high function
_endasm //end in-line assembly
}
#pragma code
//************************************************
//* Function: isr_high(void) *
//* High priority interrupt for Timer2 *
//************************************************
#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 E
语言 源程序 实例 的例 EEPROM 系列 读写 24LCxx 相关文章:
- 基于TMS320C62X DSP的混合编程研究(07-12)
- 语音识别及其定点DSP实现(06-14)
- C语言编译过程中的错误分析(08-25)
- 基于仿真的嵌入式软件白盒覆盖测试系统设计(08-26)
- 基于FPGA的AD7862接口电路设计(01-01)
- 嵌入式系统设计方法的演化——从单片机到单片系统(01-28)