五月丁香综合缴情六月|日韩精品无码专区一区|亚洲熟女乱综合一区二区|中文字幕无码一日不在线|国产欧美视频一区二区三区|国产精品日韩欧美在线播放|亚洲第一极品精品无码不卡|99ri在线精品视频在线播放

下載手機(jī)汽配人

并行采集DS18B20(一個(gè)IO接一個(gè)傳感器),串口傳輸?shù)缴衔粰C(jī)

并行采集DS18B20(一個(gè)IO接一個(gè)傳感器),串口傳輸?shù)缴衔粰C(jī),如果一個(gè)傳感器壞了,不工作了(實(shí)際被我拔下來),在上位機(jī)上顯示其他通道是正常的,而這路的溫度就從拔下來的那個(gè)時(shí)刻的溫度就一直不變化了,為什么是這樣的?
提問者:網(wǎng)友 2018-08-27
最佳回答
其實(shí)我也發(fā)現(xiàn)了,當(dāng)時(shí)沒在意。隨便找了個(gè)程序看看,發(fā)現(xiàn)uint Get_Tmp() 是onewire讀兩次賦值給 a b,但一直沒有清0的操作,如果讀失敗則 a b 值沒被改變。建議18B20 初始化時(shí),賦值給 a b,取值是個(gè)很大或很小的數(shù),然后程序判斷是否超范圍,是則觸發(fā)報(bào)警 uint Get_Tmp() // 獲取溫度 get the temperature { float tt; uchar a,b; Init_Ds18b20(); // 初始化 Write_One_Byte(0xcc); // 忽略 ROM 指令 Write_One_Byte(0x44); // 溫度轉(zhuǎn)換指令 Init_Ds18b20(); // 初始化 Write_One_Byte(0xcc); // 忽略 ROM 指令 Write_One_Byte(0xbe); // 讀暫存器指令 a = Read_One_Byte(); // 讀取到的第一個(gè)字節(jié)為溫度 LSB b = Read_One_Byte(); // 讀取到的第一個(gè)字節(jié)為溫度 MSB temp = b; // 先把高八位有效數(shù)據(jù)賦于 temp temp <<= 8; // 把以上 8 位數(shù)據(jù)從 temp 低八位移到高八位 temp = temp|a; // 兩字節(jié)合成一個(gè)整型變量 tt = temp*0.0625; // 得到真實(shí)十進(jìn)制溫度值 // 因?yàn)?DS18B20 可以精確到 0.0625 度 // 所以讀回?cái)?shù)據(jù)的最低位代表的是 0.0625 度 temp = tt*10+0.5; // 放大十倍 // 這樣做的目的將小數(shù)點(diǎn)后第一位也轉(zhuǎn)換 為可顯示數(shù)字 // 同時(shí)進(jìn)行一個(gè)四舍五入操作。 return temp; } uint Get_Tmp() // 獲取溫度 get the temperature { float tt; uchar a,b; Init_Ds18b20(); // 初始化 Write_One_Byte(0xcc); // 忽略 ROM 指令 Write_One_Byte(0x44); // 溫度轉(zhuǎn)換指令 Init_Ds18b20(); // 初始化 Write_One_Byte(0xcc); // 忽略 ROM 指令 Write_One_Byte(0xbe); // 讀暫存器指令 a = Read_One_Byte(); // 讀取到的第一個(gè)字節(jié)為溫度
回答者:網(wǎng)友
產(chǎn)品精選
搜索問答
還沒有汽配人賬號(hào)?立即注冊(cè)

我要提問

汽配限時(shí)折扣

本頁是網(wǎng)友提供的關(guān)于“并行采集DS18B20(一個(gè)IO接一個(gè)傳感器),串口傳輸?shù)缴衔粰C(jī)”的解答,僅供您參考,汽配人網(wǎng)不保證該解答的準(zhǔn)確性。