|
需要DS1820的C51源程序看看這里,這邊需要雙DS1820.正在研究中。。。。
- 網上有很多這樣的例程啊。給你一個STC的,STC的下載程序方便,上手也比較快
- CPU:STC12C5A48S2
- #include "18B20.h"
- #include<intrins.h>
- #include <math.h> //要用到取絕對值函數abs()
- /**************************************
- 延時X微秒(STC12C5A60S2@12M)
- 不同的工作環境,需要調整此函數
- 此延時函數是使用1T的指令周期進行計算,與傳統的12T的MCU不同
- **************************************/
- sbit DQ=P1^0; //定義18B20數據腳為P1.0端口
- void DelayXus(uint n)
- {
- while (n--)
- {
- _nop_();
- _nop_();
- }
- }
- void getTmp_Update()
- {
- uint TPL,TPH,tmpvalue,value;
- float t;
-
- Room_tmep=0;
- DS18B20_Reset(); //設備復位
- DS18B20_WriteByte(0xCC); //跳過ROM命令
- DS18B20_WriteByte(0x44); //開始轉換命令
-
- while (!DQ){}; //等待轉換完成
- DS18B20_Reset(); //設備復位
- DS18B20_WriteByte(0xCC); //跳過ROM命令
- DS18B20_WriteByte(0xBE); //讀暫存存儲器命令
- TPL = DS18B20_ReadByte(); //讀溫度低字節
- TPH = DS18B20_ReadByte(); //讀溫度高字節
- tmpvalue = TPH;
- tmpvalue <<= 8;
- tmpvalue |= TPL;
- value = tmpvalue;
- t = value * 0.0625; //使用DS18B20的默認分辨率12位, 精確度為0.0625度, 即讀回數據的最低位代表0.0625度
- /* 如果將它放大100倍, 使顯示時可顯示小數點后兩位, 并對小數點后第三進行4舍5入, 如t=11.0625, 進行計數后, 得到value = 1106, 即11.06 度,
- 如t=-11.0625, 進行計數后, 得到value = -1106, 即-11.06 度 */
- Room_tmep= t; //得到最終溫度
- }
- /**************************************
- 復位DS18B20,并檢測設備是否存在
- **************************************/
- void DS18B20_Reset()
- {
- uchar i=0;
- CY = 1;
- while (CY)
- {
-
- DQ = 0; //送出低電平復位信號
- DelayXus(240); //延時至少480us
- DelayXus(240);
- DQ = 1; //釋放數據線
- DelayXus(60); //等待60us
- CY = DQ; //檢測存在脈沖
- DelayXus(240); //等待設備釋放數據線
- DelayXus(180);
- i++;
- if (i>50){AD_Error_code=1;return;}else{if (AD_Error_code==1) {AD_Error_code=0;}}
- }
- }
- /**************************************
- 從DS18B20讀1字節數據
- **************************************/
- uint DS18B20_ReadByte()
- {
- uchar i;
- uchar dat = 0;
- for (i=0; i<8; i++) //8位計數器
- {
- dat >>= 1;
- DQ = 0; //開始時間片
- DelayXus(1); //延時等待
- DQ = 1; //準備接收
- DelayXus(1); //接收延時
- if (DQ) dat |= 0x80; //讀取數據
- DelayXus(60); //等待時間片結束
- }
- return dat;
- }
- /**************************************
- 向DS18B20寫1字節數據
- **************************************/
- void DS18B20_WriteByte(uint dat)
- {
- uchar i;
- for (i=0; i<8; i++) //8位計數器
- {
- DQ = 0; //開始時間片
- DelayXus(1); //延時等待
- dat >>= 1; //送出數據
- DQ = CY;
- DelayXus(60); //等待時間片結束
- DQ = 1; //恢復數據線
- DelayXus(1); //恢復延時
- }
- }
復制代碼
|
-
-
Ds1820 源程序.zip
2018-5-6 20:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
42.39 KB, 下載次數: 10, 下載積分: 黑幣 -5
C51 讀DS1820
|