新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STC12C5A60S2控制溫度傳感器DS18B20 c程序

        STC12C5A60S2控制溫度傳感器DS18B20 c程序

        作者: 時間:2013-05-11 來源:網(wǎng)絡 收藏

        控制 c程序工作頻率:12.000MHz
        #include"REG51.H"
        #include"INTRINS.H" typedefunsignedcharBYTE; sbitDQ=P3^3;//的數(shù)據(jù)口位P3.3


        BYTETPH;//存放溫度值的高字節(jié)
        BYTETPL;//存放溫度值的低字節(jié) voidDelayXus(BYTEn);
        void_Reset();
        voidDS18B20_WriteByte(BYTEdat);
        BYTEDS18B20_ReadByte(); voidmain()
        {
        DS18B20_Reset();//設備復位
        DS18B20_WriteByte(0xCC);//跳過ROM命令
        DS18B20_WriteByte(0x44);//開始轉換命令
        while(!DQ);//等待轉換完成 DS18B20_Reset();//設備復位
        DS18B20_WriteByte(0xCC);//跳過ROM命令
        DS18B20_WriteByte(0xBE);//讀暫存存儲器命令
        TPL=DS18B20_ReadByte();//讀溫度低字節(jié)
        TPH=DS18B20_ReadByte();//讀溫度高字節(jié) while(1);
        } /**************************************
        延時X微秒(@12M)
        不同的工作環(huán)境,需要調整此函數(shù)
        此延時函數(shù)是使用1T的指令周期進行計算,與傳統(tǒng)的12T的MCU不同
        **************************************/
        voidDelayXus(BYTEn)
        {
        while(n--)
        {
        _nop_();
        _nop_();
        }
        } /**************************************
        復位DS18B20,并檢測設備是否存在
        **************************************/
        voidDS18B20_Reset()
        {
        CY=1;
        while(CY)
        {
        DQ=0;//送出低電平復位信號
        DelayXus(240);//延時至少480us
        DelayXus(240);
        DQ=1;//釋放數(shù)據(jù)線
        DelayXus(60);//等待60us
        CY=DQ;//檢測存在脈沖
        DelayXus(240);//等待設備釋放數(shù)據(jù)線
        DelayXus(180);
        }
        } /**************************************
        從DS18B20讀1字節(jié)數(shù)據(jù)
        **************************************/
        BYTEDS18B20_ReadByte()
        {
        BYTEi;
        BYTEdat=0; for(i=0;i8;i++)//8位計數(shù)器
        {
        dat>>=1;
        DQ=0;//開始時間片
        DelayXus(1);//延時等待
        DQ=1;//準備接收
        DelayXus(1);//接收延時
        if(DQ)dat|=0x80;//讀取數(shù)據(jù)
        DelayXus(60);//等待時間片結束
        } returndat;
        } /**************************************
        向DS18B20寫1字節(jié)數(shù)據(jù)
        **************************************/
        voidDS18B20_WriteByte(BYTEdat)
        {
        chari; for(i=0;i8;i++)//8位計數(shù)器
        {
        DQ=0;//開始時間片
        DelayXus(1);//延時等待
        dat>>=1;//送出數(shù)據(jù)
        DQ=CY;
        DelayXus(60);//等待時間片結束
        DQ=1;//恢復數(shù)據(jù)線
        DelayXus(1);//恢復延時
        }
        }

        傳感器相關文章:傳感器工作原理


        風速傳感器相關文章:風速傳感器原理
        塵埃粒子計數(shù)器相關文章:塵埃粒子計數(shù)器原理


        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 茶陵县| 虞城县| 吴旗县| 安康市| 夹江县| 广元市| 锦州市| 三台县| 闽清县| 合阳县| 巴林右旗| 两当县| 利辛县| 卫辉市| 巴东县| 渝中区| 马龙县| 南郑县| 五指山市| 武陟县| 弋阳县| 依兰县| 江华| 青川县| 博兴县| 文成县| 喀喇| 中江县| 阳泉市| 安仁县| 保定市| 平乐县| 公主岭市| 新兴县| 通州市| 紫金县| 榆树市| 寿光市| 凤凰县| 丹棱县| 东源县|