亚洲自慰无码专区|国产又黄又爽又色视频|精品久久久久久天美传媒|欧美成人一区二区三区影院|人妻毛片A一级毛片免费看|最新国产精品拍自在线播放|免费观看av片在线手机观看|国产一区二区三区亚洲欧美软件

下載手機汽配人

stc12c5a60s2?18B20溫度傳感器相關問題

官網上程序: #include "REG51.H" #include "INTRINS.H" typedef unsigned char BYTE; sbit DQ = P3^3; //DS18B20的數據口位P3.3 BYTE TPH; //存放溫度值的高字節(jié) BYTE TPL; //存放溫度值的低字節(jié) void DelayXus(BYTE n); void DS18B20_Reset(); void DS18B20_WriteByte(BYTE dat); BYTE DS18B20_ReadByte(); void main() { DS18B20_Reset(); //設備復位 DS18B20_WriteByte(0xCC); //跳過ROM命令 DS18B20_WriteByte(0x44); //開始轉換命令 while (!DQ); //等待轉換完成 DS18B20_Reset(); //設備復位 DS18B20_WriteByte(0xCC); //跳過ROM命令 DS18B20_WriteByte(0xBE); //讀暫存存儲器命令 TPL = DS18B20_ReadByte(); //讀溫度低字節(jié) TPH = DS18B20_ReadByte(); //讀溫度高字節(jié) while (1); } /************************************** 延時X微秒(STC12C5A60S2@12M) 不同的工作環(huán)境,需要調整此函數 此延時函數是使用1T的指令周期進行計算,與傳統(tǒng)的12T的MCU不同 **************************************/ void DelayXus(BYTE n) { while (n--) { _nop_(); _nop_(); } } /************************************** 復位DS18B20,并檢測設備是否存在 **************************************/ void DS18B20_Reset() { CY = 1; while (CY) { DQ = 0; //送出低電平復位信號 DelayXus(240); //延時至少480us DelayXus(240); DQ = 1; //釋放數據線 DelayXus(60); //等待60us
提問者:網友 2018-07-31
最佳回答
你的程序不全,CY應該是定義的一個全局變量。 1、在void DS18B20_Reset() 函數中,CY的作用是用來判斷數據線接收到的是高電平還是低電平,如果是低電平(表示復位成功)則退出while循環(huán); 2、在void DS18B20_WriteByte(BYTE dat) 中CY就有點莫名其妙了。你可以參考這樣寫: void DS18B20_WriteByte(BYTE dat) { char i; for (i=0; i<8; i++) //8位計數器 { DQ = 0; //開始時間片 DelayXus(1); //延時等待 if(dat & 0x01) DQ=1; //如果低位為1,輸出1 else DQ=0; //否則輸出0 dat >>= 1; //送出數據 DelayXus(60); //等待時間片結束 DQ = 1; //恢復數據線 DelayXus(1); //恢復延時 } } 3、如果CY是一個全局變量,對你的程序沒有影響,因為你用兩個IO口讀兩個18B20是分開的,并不是同時進行。但是TPH和TPL需要有所區(qū)分,以免混淆。
回答者:網友
產品精選
搜索問答
還沒有汽配人賬號?立即注冊

我要提問

汽配限時折扣

本頁是網友提供的關于“stc12c5a60s2?18B20溫度傳感器相關問題”的解答,僅供您參考,汽配人網不保證該解答的準確性。
巴马| 娄底市| 和顺县| 东海县| 永年县| 罗江县| 枣阳市| 商水县| 千阳县| 梅州市| 海阳市| 泰州市| 永登县| 洪湖市| 夹江县| 黔江区| 屏边| 肇源县| 额尔古纳市| 霍山县| 平凉市| 兴安盟| 浦北县| 阆中市| 富民县| 那曲县| 武宣县| 靖边县| 达日县| 无锡市| 五莲县| 教育| 郎溪县| 师宗县| 赫章县| 南乐县| 祥云县| 寿阳县| 吕梁市| 阿巴嘎旗| 龙州县|