新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > 基于DS18B20與TMS320LF2407A的測溫系統

        基于DS18B20與TMS320LF2407A的測溫系統

        作者: 時間:2010-02-26 來源:網絡 收藏

          這些匯編語句所占用的時間可以計算成公式:DELAY=(9N+4)*單個指令周期。

          3、測試出一個指令周期

          系統所用晶振為20M,倍頻以后的時鐘頻率為40M,定時器1的分頻為1,也就是說定時器的計時周期為25ns。開啟定時器,單步運行上面的匯編語句,看定時器每次運行后所增加的數值。測試得到,在每次單步運行占一個指令周期的匯編語句后,定時器的數值增加10。也就是說,每個單指令周期的指令占用的時間為:25ns*10=250ns,也就是0.25us。

          4、延時程序的最終計算公式為:

          DELAY =(9n+4)*0.25us。

          由公式可以看出,當n=0時,DELAY=1us,當n=65535時,DELAY= 150ms。

        3.2 主要程序

          由于文章篇幅的關系,這里只給出復位程序、讀字節程序和整個讀溫度的主程序,寫命令字的程序可以根據上面所述的時序自行編寫。

        #define nop() {asm( nop );}
        #define DATA_PORT PADATDIR
        #define DATA_MODE 0x0040
        #define DATA_OUT 0x4000
        #define DATA_BIT 0x0040
        #define PIN_HIGH() {PADATDIR=PADATDIR|DATA_OUT|DATA_BIT;}
        #define PIN_LOW() {DATA_PORT=(PADATDIR|DATA_OUT)(~DATA_BIT);}
        #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); /*返回應答信號 */
        }



        關鍵詞: 2407A 2407 18B B20

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 原平市| 长春市| 哈巴河县| 兰坪| 香格里拉县| 宾阳县| 深州市| 桐城市| 乃东县| 台南市| 铁岭县| 牡丹江市| 宝丰县| 阳东县| 南岸区| 马关县| 壤塘县| 云梦县| 蕲春县| 石城县| 深圳市| 靖安县| 神池县| 周至县| 鲁山县| 方山县| 丘北县| 缙云县| 于田县| 临沭县| 称多县| 平原县| 蒙自县| 香河县| 界首市| 四会市| 亚东县| 喀喇沁旗| 德化县| 永春县| 夏河县|