新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > I2C 24LC02 C讀寫程序設計

        I2C 24LC02 C讀寫程序設計

        作者: 時間:2011-11-22 來源:網絡 收藏

        /*************************************************************
        起動總線函數
        函數原型: void start_i2c();
        Function: start on the bus
        *************************************************************/
        void start_i2c()
        {
        SDA=1; //發送啟始條件的數據信號
        nop();
        SCL=1;
        nop();nop();nop();nop();nop(); //要求建立時間大于4,7S
        SDA=0; //發送起始信號
        nop();nop();nop();nop();nop();
        SCL=0; //鉗住總線,準備發送數據或接收數據
        nop();nop();
        }


        /*************************************************************
        停止總線函數
        函數原型: void stop_i2c();
        Function: stop the bus
        **************************************************************/
        void stop_i2c()
        {

        SDA=0; //發送結束條件的數據信號
        nop();
        SCL=1;
        nop();nop();nop();nop();nop();
        SDA=1;
        nop();nop();nop();nop();
        }

        /*====================================================
        字節數據傳送函數
        函數原型: void send_byte(uchar c);
        Function: 將數據C發送出去,可以是地址,也可以是數據,發完后等待回應,并對此狀態
        位進行操作(不應答或非應答都使ack=0 ),發送數據正常,ack=1;ack=0
        表示被控器無應答或損壞。
        ====================================================*/
        void send_byte(uchar c)
        {
        uchar bit_count;
        for (bit_count=0;bit_count8;bit_count++)
        {
        if ((cbit_count)0x80) {SDA=1;}
        else {SDA=0;}
        nop();
        SCL=1;
        nop();nop();nop();nop();nop();
        SCL=0;
        }
        nop();nop();
        SDA=1;
        nop();nop();
        SCL=1;
        nop();nop();nop();
        if (RC4==1) ack=0;
        else ack=1; //用ASK=1為有應答信號
        SCL=0;
        nop();nop();
        }

        /*================================================
        字節數據接收函數
        函數原型:uchar receive_byte();
        FUNCTION: 用來接收從器件傳來的數據,并判斷總線錯誤(不發應答信號),
        發完后請用應答函數。
        ====================================================*/
        uchar receive_byte()
        {
        uchar retc,bit_count;
        retc=0;
        SDA=1;
        for (bit_count=0;bit_count8;bit_count++)
        {
        nop();
        SCL=0;
        nop();nop();nop();nop();nop();
        SCL=1;
        nop();nop();
        retc=retc1;
        if (RC4==1) retc=retc+1;
        nop();nop();
        }
        SCL=0;
        nop();nop();
        return (retc);
        }


        /*=================================================
        向有子地址器件發送多字節數據函數
        函數原型: bit I_send_str(uchar sla,uchar suba,uchar *s,uchar no);
        Function: 從啟動總線到發送地址,數據,結束總線的全過程,從器件地址sla。如果
        返回1表示操作成功,否則操作有誤。
        ================================================*/
        void I_send_str(uchar sla,uchar suba,uchar *s,uchar no)
        {
        uchar i;
        start_i2c();
        send_byte(sla);
        if (ack==0) i2c_error();
        send_byte(suba);
        if (ack==0) i2c_error();
        for (i=0;ino;i++)
        {
        send_byte(*s);
        if (ack==0) i2c_error();
        s++;
        }
        stop_i2c();
        // return(1);
        }

        /*****************************************************************
        延時函數
        函數原型: void delay_250ms();
        FUNCTION: 延明250ms
        *****************************************************************/
        void delay_250ms()
        {
        unsigned int d=24999;
        while (--d);
        }

        /*****************************************************************
        總線錯誤函數
        函數原型: void i2c_error();
        Function: 通過RD7閃動8次表示總線操作失敗一次報警。
        *****************************************************************/
        void i2c_error ()
        {
        uchar i;
        for (i=0;i8;i++)
        {
        RD7=0;
        delay_250ms();
        RD7=1;
        delay_250ms();
        }

        }
        /**********END**************/

        本文引用地址:http://www.104case.com/article/150033.htm
        塵埃粒子計數器相關文章:塵埃粒子計數器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 台山市| 澜沧| 边坝县| 英德市| 白山市| 新巴尔虎右旗| 中牟县| 斗六市| 杭锦后旗| 博兴县| 泸定县| 崇阳县| 宜黄县| 双峰县| 汶上县| 安徽省| 郎溪县| 龙岩市| 湖州市| 呼伦贝尔市| 福建省| 出国| 金堂县| 远安县| 华安县| 隆林| 白河县| 海宁市| 资中县| 同江市| 荆州市| 海晏县| 台安县| 毕节市| 景谷| 沙河市| 兖州市| 五华县| 鲁甸县| 榆中县| 双流县|