基于DS18B20與TMS320LF2407A的測溫系統(tǒng)
/* 從傳感器中讀一個字節(jié) */
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);
}
/* 讀取溫度主函數(shù),返回十進制溫度數(shù) */
float read_temp()
{
Unchar buff[2];
float temprature=0;
unint loopindex=0;
while (reset()==1){}; /* 復位等待從機應答 */
write_byte(0xCC); /* 忽略ROM匹配 */
write_byte(0x44); /* 發(fā)送溫度轉化命令 */
for(loopindex=0;loopindex65535;loopindex++){;} /* 延時300ms,等待數(shù)模轉換 */
for(loopindex=0;loopindex65535;loopindex++){;}
while(reset()==1){}; /* 再次復位,等待從機應答 */
write_byte(0xCC); /* 忽略ROM匹配 */
write_byte(0xBE); /* 發(fā)送讀溫度命令 */
read_byte(buff); /* 讀出溫度低8位 */
read_byte(buff+1); /* 讀出溫度高8位 */
temprature=transform(buff);
PIN_HIGH(); /* 釋放總線 */
return(temprature);
} 本文引用地址:http://www.ex-cimer.com/article/195524.htm
4 結束語
DS18B20是一款非常優(yōu)秀的單總線數(shù)字式傳感器。硬件設計簡單,運行可靠。通過分析C語言編譯后的匯編語言可以很明確的計算出軟件延時的時間,從而滿足單線總線通訊的時序要求,從而可以出色的完成DSP與DS18B20通訊的軟件設計。
5 本文創(chuàng)新點有兩個:
1、通過C編譯器編譯出來的相應的C語言的延時程序,從而得到其對應的匯編語言,再通過定時器計時,能夠知道單指令周期的時間,從而能夠精確的計算出軟件延時程序的延時時間。
2、通常DS18B20都是與單片機配合使用的,而本文則詳細的介紹了DS18B20與DSP的結合使用方法,其區(qū)別主要是在端口的操作上和延時的控制上。
評論