新聞中心

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

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

        作者: 時間:2012-07-18 來源:網絡 收藏

        PIC:C

        本文引用地址:http://www.104case.com/article/171142.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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 合川市| 庆安县| 洪洞县| 望都县| 前郭尔| 黔南| 沅江市| 碌曲县| 呼伦贝尔市| 阿拉善左旗| 丹江口市| 库车县| 颍上县| 东源县| 鸡泽县| 厦门市| 枣阳市| 思茅市| 姚安县| 墨脱县| 静宁县| 延川县| 贺州市| 常德市| 彭泽县| 武邑县| 开阳县| 连城县| 南投市| 襄城县| 唐山市| 雷波县| 巴林右旗| 巴楚县| 句容市| 定日县| 寿阳县| 钟祥市| 简阳市| 图木舒克市| 上虞市|