新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > I2C總線C語言源程序

        I2C總線C語言源程序

        作者: 時間:2016-11-23 來源:網絡 收藏
        /*VIICC.H*/
        #pragmadbcdsmall
        #include
        #include
        #defineNOPnop();nop();nop();nop()
        #defineSDAP1^7
        #defineSCLP1^6

        voidsta();
        voidcack();
        voidstop();
        voidmnack();
        voidmack();
        voidwrbyt(ucharshu);
        voidwrnbyta(ucharslaw,uchargg[],ucharn);
        voidwrnbyt(ucharslaw,ucharff[],ucharnumber);
        ucharrdbyt();
        voidrdnbyt(ucharslar,ucharqq[],ucharnumber);
        源程序由9個函數組成,程序清單如下:
        voidsta()/*啟動I2C總線*/
        {
        SDA=1;
        SCL=1;
        NOP;
        SDA=0;
        NOP;
        SCL=0;
        }

        voidstop()/*停止I2C總線
        */
        {
        SDA=0;
        SCL=1;
        NOP;
        SDA=1;
        NOP;
        SCL=0;
        }

        voidmack()/*發送應答位*/
        {
        SDA=0;
        SCL=1;
        NOP;
        SCL=0;
        SDA=1;
        }

        voidmnack()/*發送非應答位*/
        {
        SDA=1;
        SCL=1;
        NOP;
        SCL=0;
        SDA=0;
        }

        voidcack()/*應答位檢查*/
        {
        SDA=1;
        SCL=1;
        F0=0;
        if(SDA==1)
        F0=1;
        SCL=0;
        nop();
        }
        /*向虛擬I2C總線上發送1個數據字節*/
        voidwrbyt(ucharshu)
        {
        uchari;
        for(i=0;i<8;i++){
        if((shu&0x80)>0){
        SDA=1;
        SCL=1;
        NOP;
        SCL=0;
        SDA=0;
        }
        else{
        SDA=0;
        SCL=1;
        NOP;
        SCL=0;
        }
        shu=shu<<1;
        }
        }
        /*從I2C總線上讀取1個數據字節*/
        ucharrdbyt()
        {
        ucharnn=0xff,mm=0x80,uu=0x7f;
        ucharj;
        for(j=0;j<8;j++){
        SDA=1;
        SCL=1;
        if(SDA==0)
        nn=(nn&uu);
        else
        nn=(nn|mm);。
        nn=crol(nn,1);
        SCL=0;
        }
        return(nn);
        }

        voidwrnbyta(ucharslaw,uchargg[],ucharn)
        {
        do{
        sta();
        wrbyt(slaw);
        cack();
        }while(F0==1);
        wrbyt(gg[n]);
        cack();





        }
        /*向虛擬I2C總線上發送n個字節的數據*/
        voidwrnbyt(ucharslaw,ucharff[],ucharnumber)
        {
        ucharidatak;
        do{
        sta();
        wrbyt(slaw);
        ?cack();
        }while(F0==1);
        for(k=0;kwrbyt(ff[k]);
        cack();
        while(F0==1)
        wrnbyta(slaw,ff,k);
        }
        stop();
        }
        /*從虛擬I2C總線上讀取n個字節的數據*/
        voidrdnbyt(ucharslar,ucharqq[],ucharnumber)
        {
        ucharidatadata0,l;
        do{
        sta();
        wrbyt(slar);
        cack();
        }while(F0==1);?
        for(l=0;ldata0=rdbyt();
        qq[l]=data0;
        mack();
        }
        data0=rdbyt();
        qq[l]=data0;
        mnack();
        stop();
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 英吉沙县| 成安县| 镇康县| 阿尔山市| 昔阳县| 斗六市| 甘南县| 彭阳县| 文成县| 兖州市| 石河子市| 门头沟区| 高尔夫| 新竹县| 敦煌市| 车致| 青龙| 西乡县| 武定县| 宁远县| 亳州市| 阿尔山市| 涞水县| 武威市| 佛坪县| 忻城县| 临江市| 淳化县| 逊克县| 丽江市| 化德县| 庆阳市| 德安县| 永川市| 家居| 通化县| 当涂县| 连城县| 衡东县| 东兴市| 措美县|