无码av毛片一级不卡|一本综合九九国产二区|AⅤ高清无码免费看大片|国产真实高潮太爽了十八|国内精品久久无码人妻影院|亚洲AV影院一区二区三区|国产精品久久久久久中文麻豆|97精品一区二区视频在线观看

    <source id="wsbxs"></source><track id="wsbxs"><dl id="wsbxs"><delect id="wsbxs"></delect></dl></track>
    1. 下載手機(jī)汽配人

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

      并行采集DS18B20(一個(gè)IO接一個(gè)傳感器),串口傳輸?shù)缴衔粰C(jī),如果一個(gè)傳感器壞了,不工作了(實(shí)際被我拔下來(lái)),在上位機(jī)上顯示其他通道是正常的,而這路的溫度就從拔下來(lái)的那個(gè)時(shí)刻的溫度就一直不變化了,為什么是這樣的?
      問(wèn) 提問(wèn)者:網(wǎng)友 2018-08-27
      最佳回答
      其實(shí)我也發(fā)現(xiàn)了,當(dāng)時(shí)沒(méi)在意。隨便找了個(gè)程序看看,發(fā)現(xiàn)uint Get_Tmp() 是onewire讀兩次賦值給 a b,但一直沒(méi)有清0的操作,如果讀失敗則 a b 值沒(méi)被改變。建議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)品精選
      搜索問(wèn)答
      還沒(méi)有汽配人賬號(hào)?立即注冊(cè)

      我要提問(wèn)

      汽配限時(shí)折扣

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