国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于DS18B20與TMS320LF2407A的測溫系統(tǒng)

發(fā)布時間:2011-1-23 21:56    發(fā)布者:conniede
關(guān)鍵詞: DS18B20 , TMS320LF2407A , 測試
1 前 言

DS18B2普遍都是和單片機配合使用,很少有關(guān)于DSP與DS18B20的連接的接口報道,所以此文詳細(xì)介紹了TMS320LF2407與 DS18B20的連接方法,并且很詳細(xì)的介紹了如何用C語言完成精確的軟件延時,從而完成DS18B20與TMS320LF2407之間的基于單線總線協(xié)議的數(shù)據(jù)通訊。

2 DS18B20的時序

2. 1 復(fù)位時序

復(fù)位使用DS18B20時,首先需將其復(fù)位,然后才能執(zhí)行其它命令。復(fù)位時,主機將數(shù)據(jù)線拉為低電平并保持480us~960us,然后釋放數(shù)據(jù)線,再由上拉電阻將數(shù)據(jù)線拉高15~60us,等待DS18B20發(fā)出存在脈沖,存在脈沖有效時間為60~240us,這樣,就完成了復(fù)位操作。

2.2 寫時序

在主機對DS18B20寫數(shù)據(jù)時,先將數(shù)據(jù)線置為高電平,再變?yōu)榈碗娖,該低電平?yīng)大于1us。在數(shù)據(jù)線變?yōu)榈碗娖胶?5us內(nèi),根據(jù)寫“1”或?qū)憽?” 使數(shù)據(jù)線變高或繼續(xù)為低。DS18B20將在數(shù)據(jù)線變成低電平后15us~60us內(nèi)對數(shù)據(jù)線進(jìn)行采樣。要求寫入DS18B20的數(shù)據(jù)持續(xù)時間應(yīng)大于 60us而小于120us,兩次寫數(shù)據(jù)之間的時間間隔應(yīng)大于1us。

2.3 讀時序

讀時隙當(dāng)主機從DS18B20讀數(shù)據(jù)時,主機先將數(shù)據(jù)線置為高電平,再變?yōu)榈碗娖剑摰碗娖綉?yīng)大于1us,然后釋放數(shù)據(jù)線,使其變?yōu)楦唠娖。DS18B20在數(shù)據(jù)線從高電平變?yōu)榈碗娖降?5us內(nèi)將數(shù)據(jù)送到數(shù)據(jù)線上。主機可在15us后讀取數(shù)據(jù)線.。

3 TMS320LF2407與DS18B20的連接

DS18B20有三個引腳。其與TMS320LF2407A的接線圖如下。VDD管腳接5V電壓傳感器供電。DQ管腳為數(shù)據(jù)線,與 TMS320LF2407A的IOPA6連接的同時,還要接一個4.7K的上拉電阻,并接到5V的電源上,使數(shù)據(jù)線在空閑狀態(tài)下能自動上拉為高電平。 GND管腳接地。


4 軟件設(shè)計

4.1 精確的軟件定時的實現(xiàn)

眾所周知,TMS320LF2407的內(nèi)核屬于C2000系列的處理器,處理速度達(dá)到30MIPs,也就是每條指令所花的時間理論上只有33ns。但是實際情況是,由于DSP外部電路的數(shù)據(jù)處理速度和數(shù)據(jù)調(diào)用等因素,往往處理速度達(dá)不到這個數(shù)量級。那怎樣測出每條指令的處理時間從而計算出軟件延時程序的精確時間呢?計算方法如下:

1)、延時程序的C語言代碼為:

for(loopindex=0;loopindex

其中l(wèi)oopindex 為unsigned int,無符號整形數(shù)值, N為常量,根據(jù)所要求的延時時間,計算得出。具體算法在下面給出。

2)、這個for語句在CCS中的編譯器編譯后所產(chǎn)生的匯編語言為:

LACL #0h

SACL *, 0

LACL *

SUB N(計算得到的循環(huán)次數(shù))

BCND 轉(zhuǎn)移的地址,GEQ

LACC *, 0

ADD #1h

SACL *, 0

LACL *

SUB N(計算得到的循環(huán)次數(shù))

BCND 轉(zhuǎn)移的地址,LT

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

3)、測試出一個指令周期

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

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

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

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


4.2 主要程序

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

#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;}

/* 傳感器復(fù)位程序 */

unchar reset(void)

{ unchar retval;

unint loopindex="0";

PIN_HIGH();

nop();nop();nop();nop(); /* 延時1us*/

PIN_LOW();

for(loopindex=0;loopindex<213;loopindex++){;} /*置總線為低電平并保持至少480us */

PIN_HIGH();

for(loopindex=0;loopindex<26;loopindex++){;} /*等電阻拉高總線并保持15-60us */

PIN_LEAVE(); /*接受應(yīng)答信號*/

nop();

if((DATA_PORT & DATA_BIT) == 0x0000)

{ retval = 0; }

else

{ retval = 1; }

PIN_HIGH();

for(loopindex=0;loopindex<106;loopindex++){;} /*延時60-240us */

return(retval); /*返回應(yīng)答信號 */

}

/* 從傳感器中讀一個字節(jié) */

void read_byte(unchar *ReadByte)

{

int i;

unchar temp="0";

unint loopindex="0";

PIN_HIGH();

for(i=0;i<8;i++)

{

temp="temp">>1;

PIN_LOW();

nop();nop();nop();nop(); /*延時2us */

nop();nop();nop();nop();

PIN_HIGH();

for(loopindex=0;loopindex<6;loopindex++){;} /* 延時14us */

PIN_LEAVE();

nop();

if((DATA_PORT & DATA_BIT) == 0x0000)

{ temp="temp" & 0x7F; }

else

{ temp="temp" | 0x80; }

PIN_HIGH();

nop();nop();nop();nop(); /* 延時1us*/

}

*ReadByte=temp;

return;

}

/* 將讀得的溫度轉(zhuǎn)化為十進(jìn)制 */

float transform(unchar *T)

{

unchar temp="0";

float temprature="0";

temp=temp|(*(T+1)<<8);

temp=temp|*T;

if((temp&0x0F800)==0x0F800)

{ temprature="0-"((~temp)+1)*0.0625; }

else

{ temprature="temp"*0.0625; }

return(temprature);

}

/* 讀取溫度主函數(shù),返回十進(jìn)制溫度數(shù) */

float read_temp()

{

Unchar buff;

float temprature="0";

unint loopindex="0";

while (reset()==1){}; /* 復(fù)位等待從機應(yīng)答 */

write_byte(0xCC); /* 忽略ROM匹配 */

write_byte(0x44); /* 發(fā)送溫度轉(zhuǎn)化命令 */

for(loopindex=0;loopindex<65535;loopindex++){;} /* 延時300ms,等待數(shù)模轉(zhuǎn)換 */

for(loopindex=0;loopindex<65535;loopindex++){;}

while(reset()==1){}; /* 再次復(fù)位,等待從機應(yīng)答 */

write_byte(0xCC); /* 忽略ROM匹配 */

write_byte(0xBE); /* 發(fā)送讀溫度命令 */

read_byte(buff); /* 讀出溫度低8位 */

read_byte(buff+1); /* 讀出溫度高8位 */

temprature="transform"(buff);

PIN_HIGH(); /* 釋放總線 */

return(temprature);

}

5 結(jié)束語

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

6 本文創(chuàng)新點

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

2)、通常DS18B20都是與單片機配合使用的,而本文則詳細(xì)的介紹了DS18B20與DSP的結(jié)合使用方法,其區(qū)別主要是在端口的操作上和延時的控制上。
本文地址:http://www.qingdxww.cn/thread-50645-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 你仿真過嗎?使用免費的MPLAB Mindi模擬仿真器降低設(shè)計風(fēng)險
  • 深度體驗Microchip自動輔助駕駛應(yīng)用方案——2025巡展開啟報名!
  • 我們是Microchip
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 青青草国产一区二区三区 | 妹子草网 | 欧美黑大粗硬免费看 | 国产日产韩产麻豆1区 | 日韩免费视频观看 | www.四虎影视 | 五月天婷婷精品视频 | 国产成人啪精品午夜在线观看 | 国内性爱视频 | 成都4片p高清完整版在线观看 | 2级毛片| 色综合久久久久久久久五月性色 | 欧美高清视频在线 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 南京巨根无套操到你窒息 | 丁香综合在线 | 成人影片在线免费观看 | 欧美很黄视频在线观看 | 日本不卡视频在线视频观看 | 成年人黄色一级片 | 福利在线一区二区 | 99re在线| 五月婷婷丁香花 | 婷婷丁香视频 | 日韩欧美精品有码在线观看 | 国产黄色片在线观看 | 一区二区在线观看视频在线 | 国产1区2区3区 | 日韩精品免费观看 | 免费亚洲视频 | 天天操精品视频 | 国产对白在线观看 | 成人午夜一区二区三区视频 | 精品一区二区三区在线成人 | 亚洲男人天堂影院 | 国产成人啪精品午夜在线观看 | 九九热爱视频精品视频高清 | 四虎在线最新地址4hu | www.中文字幕.com| 亚洲国产高清在线观看视频 | 久久久久国产精品免费看 |