新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于DS18B20與TMS320LF2407A的溫度測量系統

        基于DS18B20與TMS320LF2407A的溫度測量系統

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

        #define PIN_LEAVE() {DATA_PORT=DATA_PORT(~DATA_OUT)|DATA_BIT;}
        /* 傳感器復位程序 */
        unchar reset(void)
        { unchar retval;
        unint loopindex="0";
        PIN_HIGH();
        nop();nop();nop();nop(); /* 延時1us*/
        PIN_LOW();
        for(loopindex=0;loopindex213;loopindex++){;} /*置總線為低電平并保持至少480us */
        PIN_HIGH();
        for(loopindex=0;loopindex26;loopindex++){;} /*等電阻拉高總線并保持15-60us */
        PIN_LEAVE(); /*接受應答信號*/
        nop();
        if((DATA_PORT DATA_BIT) == 0x0000)
        { retval = 0; }
        else
        { retval = 1; }
        PIN_HIGH();
        for(loopindex=0;loopindex106;loopindex++){;} /*延時60-240us */
        return(retval); /*返回應答信號 */
        }
        /* 從傳感器中讀一個字節 */
        void read_byte(unchar *ReadByte)
        {
        int i;
        unchar temp="0";
        unint loopindex="0";
        PIN_HIGH();
        for(i=0;i8;i++)
        {
        temp="temp">>1;
        PIN_LOW();
        nop();nop();nop();nop(); /*延時2us */
        nop();nop();nop();nop();
        PIN_HIGH();
        for(loopindex=0;loopindex6;loopindex++){;} /* 延時14us */
        PIN_LEAVE();
        nop();
        if((DATA_PORT DATA_BIT) == 0x0000)
        { temp="temp" 0x7F; }
        else
        { temp="temp" | 0x80; }
        PIN_HIGH();
        for(loopindex=0;loopindex26;loopindex++){;} /* 延時60us */
        }
        *ReadByte=temp;
        return;
        }
        /* 將讀得的溫度轉化為十進制 */
        float transform(unchar *T)
        {
        unchar temp="0";
        float temprature="0";
        temp=temp|(*(T+1)8);
        temp=temp|*T;
        if((temp0x0F800)==0x0F800)
        { temprature="0-"((~temp)+1)*0.0625; }
        else
        { temprature="temp"*0.0625; }
        return(temprature);
        }
        /* 讀取溫度主函數,返回十進制溫度數 */
        float read_temp()
        {
        Unchar buff[2];
        float temprature="0";
        unint loopindex="0";
        while (reset()==1){}; /* 復位等待從機應答 */
        write_byte(0xCC); /* 忽略ROM匹配 */
        write_byte(0x44); /* 發送溫度轉化命令 */
        for(loopindex=0;loopindex65535;loopindex++){;} /* 延時300ms,等待數模轉換 */
        for(loopindex=0;loopindex65535;loopindex++){;}
        while(reset()==1){}; /* 再次復位,等待從機應答 */
        write_byte(0xCC); /* 忽略ROM匹配 */
        write_byte(0xBE); /* 發送讀溫度命令 */
        read_byte(buff); /* 讀出溫度低8位 */
        read_byte(buff+1); /* 讀出溫度高8位 */
        temprature="transform"(buff);
        PIN_HIGH(); /* 釋放總線 */
        return(temprature);
        }

          4 結束語

          是一款非常優秀的單總線數字式傳感器。硬件設計簡單,運行可靠。通過分析C語言編譯后的匯編語言可以很明確的計算出軟件延時的時間,從而滿足單線總線通訊的時序要求,從而可以出色的完成DSP通訊的軟件設計。

          5 本文創新點有兩個:

          1、通過C編譯器編譯出來的相應的C語言的延時程序,從而得到其對應的匯編語言,再通過定時器計時,能夠知道單指令周期的時間,從而能夠精確的計算出軟件延時程序的延時時間。

          2、通常都是與單片機配合使用的,而本文則詳細的介紹了DS18B20與DSP的結合使用方法,其區別主要是在端口的操作上和延時的控制上。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 吉林市| 尉犁县| 广河县| 黄龙县| 扶绥县| 化隆| 南乐县| 宜兰市| 漳平市| 华蓥市| 元朗区| 凤台县| 海宁市| 临海市| 天长市| 高淳县| 永清县| 安宁市| 和平县| 泰顺县| 塔河县| 定西市| 平南县| 鸡西市| 白河县| 宜城市| 武清区| 玉山县| 定结县| 上犹县| 理塘县| 娱乐| 浦江县| 沙洋县| 白银市| 晋城| 招远市| 信阳市| 灌阳县| 合山市| 江油市|