新聞中心

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

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

        作者: 時間:2013-05-11 來源:網絡 收藏

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


        BYTETPH;//存放溫度值的高字節
        BYTETPL;//存放溫度值的低字節 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();//讀溫度低字節
        TPH=DS18B20_ReadByte();//讀溫度高字節 while(1);
        } /**************************************
        延時X微秒(@12M)
        不同的工作環境,需要調整此函數
        此延時函數是使用1T的指令周期進行計算,與傳統的12T的MCU不同
        **************************************/
        voidDelayXus(BYTEn)
        {
        while(n--)
        {
        _nop_();
        _nop_();
        }
        } /**************************************
        復位DS18B20,并檢測設備是否存在
        **************************************/
        voidDS18B20_Reset()
        {
        CY=1;
        while(CY)
        {
        DQ=0;//送出低電平復位信號
        DelayXus(240);//延時至少480us
        DelayXus(240);
        DQ=1;//釋放數據線
        DelayXus(60);//等待60us
        CY=DQ;//檢測存在脈沖
        DelayXus(240);//等待設備釋放數據線
        DelayXus(180);
        }
        } /**************************************
        從DS18B20讀1字節數據
        **************************************/
        BYTEDS18B20_ReadByte()
        {
        BYTEi;
        BYTEdat=0; for(i=0;i8;i++)//8位計數器
        {
        dat>>=1;
        DQ=0;//開始時間片
        DelayXus(1);//延時等待
        DQ=1;//準備接收
        DelayXus(1);//接收延時
        if(DQ)dat|=0x80;//讀取數據
        DelayXus(60);//等待時間片結束
        } returndat;
        } /**************************************
        向DS18B20寫1字節數據
        **************************************/
        voidDS18B20_WriteByte(BYTEdat)
        {
        chari; for(i=0;i8;i++)//8位計數器
        {
        DQ=0;//開始時間片
        DelayXus(1);//延時等待
        dat>>=1;//送出數據
        DQ=CY;
        DelayXus(60);//等待時間片結束
        DQ=1;//恢復數據線
        DelayXus(1);//恢復延時
        }
        }

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


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


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安化县| 靖安县| 阳山县| 鹤庆县| 浦江县| 邹平县| 青田县| 卢氏县| 佛坪县| 民丰县| 建湖县| 稷山县| 启东市| 海淀区| 青河县| 灵台县| 万山特区| 淳化县| 京山县| 海门市| 曲阳县| 奉节县| 漳州市| 阿坝| 崇义县| 中西区| 图木舒克市| 平昌县| 吴桥县| 汕头市| 波密县| 高平市| 上犹县| 十堰市| 和平县| 甘肃省| 措美县| 普定县| 来凤县| 福州市| 杭锦后旗|