stc12c5a60s2?18B20溫度傳感器相關問題
- 官網(wǎng)上程序: #include "REG51.H" #include "INTRINS.H" typedef unsigned char BYTE; sbit DQ = P3^3; //DS18B20的數(shù)據(jù)口位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); //開始轉(zhuǎn)換命令 while (!DQ); //等待轉(zhuǎn)換完成 DS18B20_Reset(); //設備復位 DS18B20_WriteByte(0xCC); //跳過ROM命令 DS18B20_WriteByte(0xBE); //讀暫存存儲器命令 TPL = DS18B20_ReadByte(); //讀溫度低字節(jié) TPH = DS18B20_ReadByte(); //讀溫度高字節(jié) while (1); } /************************************** 延時X微秒(STC12C5A60S2@12M) 不同的工作環(huán)境,需要調(diào)整此函數(shù) 此延時函數(shù)是使用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; //釋放數(shù)據(jù)線 DelayXus(60); //等待60us
-
問
提問者:網(wǎng)友
2018-07-31