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

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

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

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

    //********************************************************* 
//*            Using I2C Master Mode for aCCess Slave (EEPRM) 
//*               
//* Written by:  Richard Yang                               
//*              Sr. Corporate Application Engineer           
//*              MicroChip Technology Inc.               
//* Date:        Oct. 3nd '2002                           
//* Revision: 1.00
//* Language tools : MPLAB-C18 v2.09.13
//*      MPLINK v3.10
//*      MPLAB-IDE v6.00.17 & ICD2                                 
//***********************************************************
/* Include Header files  */

    #i nclude <p18f452.h>
#i nclude <i2c.h>  // Load I2C Header file from defult direct
#i nclude <timers.h>
#i nclude "P18LCD.h"  // Load P18LCD Header file form current working direct

    /* Declare the Function Prototype */

    void Initialize_I2C_Master(void);
void EE_Page_Write(unsigned char,unsigned char,unsigned char,unsigned char *);
void EE_SEQU_Read(unsigned char,unsigned char,unsigned char,unsigned char *);
void EEPROM_Write(unsigned char,unsigned char,unsigned char);
void EEPROM_ACK(unsigned char);
unsigned char EEPROM_Read(unsigned char,unsigned char);
void I2C_Done(void);
void Initialize_Timer2(void);
void isr_high_direct(void);
void isr_high(void);

    #pragma romdata My_romdata=0x1000
const rom far unsigned char LCD_MSG1[]="SW2: Byte Write ";
const rom far unsigned char LCD_MSG2[]="SW6: Random Read";
const rom far unsigned char LCD_MSG3[]="Byte Write Mode ";
const rom far unsigned char LCD_MSG4[]="Random Read Mode";
const rom far unsigned char LCD_MSG5[]="Sended:        ";
const rom far unsigned char LCD_MSG6[]="Send:          ";
const rom unsigned char I2C_Write_Buffer[]="Microchip Technology";
#pragma romdata

    /* Define following array in data memory */

    unsigned char I2C_Read_Buffer [32];

    /* define following variable in data memory at Access Bank */
#pragma udata access My_RAM
near unsigned char Debounce;
near unsigned char Send_Addr;
near unsigned char Send_Data;
near unsigned char Send_Length;
near unsigned char Read_Data;
near unsigned char P_SW2;
near unsigned char P_SW6;
#pragma udata

    #define Page_Length 8
#define SW2  PORTAbits.RA4
#define SW6  PORTEbits.RE1
#define Bounce_Time 6
#define EE_CMD 0xA0

    //***********************************************************
/*                */
/*      Main  Program        */
/*                */
//***********************************************************

   

     

   
void main(void)
{
 ADCON1=0b00000110;  // DISAble A/D Function
 TRISAbits.TRISA4=1;  // Set SW2 for input
 TRISEbits.TRISE1=1;  // Set SW6 for Input
 Initialize_Timer2( );
 Initialize_I2C_Master( );
 OpenLCD( );
 
 if (SW2 & SW6)Debounce=0;
 else Debounce = Bounce_Time;
 
 while(1)
 {
  LCD_Set_Cursor(0,0);    // Put LCD Cursor on (0,0)
  putrsLCD(LCD_MSG1);
  LCD_Set_Cursor(1,0);    // Put LCD Cursor on (1,0)
  putrsLCD(LCD_MSG2);
 
  P_SW2=P_SW6=0;
  Send_Addr=0;
 
  while(1)
  {
  if (P_SW2)
  {
    P_SW2=0;
    Debounce = Bounce_Time;
    LCD_Set_Cursor(0,0);    // Put LCD Cursor on (0,0)
    putrsLCD(LCD_MSG3);
    LCD_Set_Cursor(1,0);    // Put LCD Cursor on (0,0)
    putrsLCD(LCD_MSG5);
   
    do
    {
    while (!P_SW2);
    P_SW2=0;
    LCD_Set_Cursor(1,8);
    Send_Data=I2C_Write_Buffer[Send_Addr];
    EEPROM_Write(EE_CMD,Send_Addr,Send_Data);
    puthexLCD(EE_CMD);
    putcLCD(' ');
    puthexLCD(Send_Addr);
    putcLCD(' ');
    puthexLCD(Send_Data);
    EEPROM_ACK(EE_CMD);
    Send_Addr++;
    } while (I2C_Write_Buffer[Send_Addr]!=0x00);
  break;
  }
 
  if (P_SW6)
  {
    P_SW6=0;
    Debounce = Bounce_Time;
    LCD_Set_Cursor(0,0);    // Put LCD Cursor on (0,0)
    putrsLCD(LCD_MSG4);
    LCD_Set_Cursor(1,0);    // Put LCD Cursor on (0,0)
    putrsLCD(LCD_MSG6);
   
 
    while(1)
    {
    if (P_SW6)
    {
    P_SW6=0;
    LCD_Set_Cursor(1,5);
    Read_Data = EEPROM_Read(EE_CMD,Send_Addr);
    puthexLCD(EE_CMD);
    putcLCD(' ');
    puthexLCD(Send_Addr);
    putcLCD(' ');
    puthexLCD(EE_CMD);
    putcLCD(' ');
    puthexLCD(Read_Data);
    Send_Addr++;
    }
    if (P_SW2) break;
    }
    if (P_SW2) break;
  }
  if (P_SW2)
  {
    P_SW2=0;
    break;
  }
  }
 }
}
//************************************************
//*      #pragma Interrupt Declarations        *
//*            *
//* Function: isr_high_direct                    *
//*  - Direct execution to the actual          *
//*    high-priority interrupt code.            *
//************************************************
#pragma code isrhighcode = 0x0008

    void isr_high_direct(void)
{         
    _asm      //begin in-line assembly
    goto isr_high  //go to isr_high function
    _endasm    //end in-line assembly
}



www.55dianzi.com


#pragma code

     

    //************************************************
//* Function: isr_high(void)                    *   
//*  High priority interrupt for Timer2        *       

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


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