• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > PIC:讀寫24LCxx系列的EEPROM的實例C語言程序

    PIC:讀寫24LCxx系列的EEPROM的實例C語言程序

    作者: 時間:2011-05-06 來源:網絡 收藏

    C

    本文引用地址:http://www.czjhyjcfj.com/article/172809.htm

    //*********************************************************
    //* 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 _Write(unsigned char,unsigned char,unsigned char);
    void _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
    }

    c語言相關文章:c語言教程



    上一頁 1 2 3 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 吴旗县| 黔西| 城市| 新泰市| 东平县| 嘉祥县| 塔河县| 石景山区| 北碚区| 资溪县| 东明县| 伽师县| 大庆市| 黄冈市| 蒲江县| 海晏县| 荣成市| 项城市| 义乌市| 朝阳县| 西城区| 孝昌县| 明溪县| 平乐县| 绵阳市| 伊通| 温宿县| 苏州市| 闽侯县| 广饶县| 邵武市| 邯郸县| 华阴市| 昌乐县| 江北区| 招远市| 南汇区| 南木林县| 潮州市| 宁安市| 天台县|