久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

DS18B20溫度偏差大、溫度亂跳動原因及解決辦法

作者:佚名   來源:互聯網   點擊數:  更新時間:2014年08月14日   【字體:

 

 
在DS18B20按鍵設定上下限溫度報警系統中,遇到的最大問題,就是在測溫過程中偶爾溫度會跳變幾十、幾百甚至變成2000度,究其原因,就是其中用到的中斷程序,18b20有嚴格的讀寫時序,過程中不可以被打斷。否則就會出現上述數據。
 
解決問題的辦法也很假單。只需要在讀溫度是關閉中斷,讀完之后開啟中斷就可以了。
 
/*------------------------------------------------
                    讀取溫度
------------------------------------------------*/
unsigned int ReadTemperature(void)
{
 
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
EA=0;//關閉中斷
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
DelayMs(10);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作 
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar();   //低位
b=ReadOneChar();   //高位
 
b<<=8;
t=a+b;
EA=1;//開啟中斷
return(t);
}
 
 
 
 
 
===================原因解析======================
 
1 初始化總線時序
 
手冊上只給出了單片機拉低總線的最短時間480us,注意,這里并未給出最大時間,所以在這480us 時間內不必關中斷,即使被中斷了,也只是延長了拉低時間而已。
下一段是單片機釋放總線到18B20拉低總線作為響應的時間,15~60us。這段是要關中斷了(其實如果中斷函數執行時間非常短,比如3us,不關中斷也是可以的)。
再下一段是等待18B20釋放總線,同樣不必關中斷。
 
2 讀總線
讀總線的最小時間60us,其實只要單片機采樣之后就可以開中斷了,剩下的時間就沒有那么嚴格的要求了
 
3 寫總線
寫總線的最小時間同樣是60us,為了保證18B20能讀到正確數據,這段時間都要關中斷
 
綜上所述,其實在總線操作過程中,關中斷的最長時間是60us其余時間都不必關中斷。這對于要進行數碼管動態掃描這樣實時性較高的應用還是可以滿足要求的。
關閉窗口

相關文章

主站蜘蛛池模板: 国产黄色一区二区 | 日本久久视频 | 日韩在线欧美 | 国产一区二区三区 | 日本免费高清 | 久久99精品国产麻豆91樱花 | 视频一区在线播放 | 97国产精品 | 亚洲人成在线观看 | 伊人久久精品视频 | 国产精品999 | 18岁毛片 | 久久久久国产精品夜夜夜夜夜 | 久久依人| 999在线视频 | 国产无限资源 | 97在线免费视频 | 日本乱子伦 | 69精品视频 | 国产午夜精品视频 | 在线观看a视频 | 久久久久国产 | 日本激情视频 | 日韩黄色影院 | 久久精品观看 | 成年人免费视频网站 | 国内精品国产成人国产三级 | 国产成人精品一区二区 | 欧美日韩在线一区二区 | 日韩精品片 | 综合网久久 | 毛片视频免费 | 欧美精品亚洲精品 | 日韩精品一区在线 | 国产麻豆一区二区 | 日韩免费 | 久久久久a | 亚洲高清在线视频 | 香蕉视频在线免费看 | 亚洲精品视频在线播放 | 色哟哟一区二区 |