久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4992|回復: 1
打印 上一主題 下一主題
收起左側(cè)

單片機+DS18B20多點溫度測試程序+詳細教程資料

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:535176 發(fā)表于 2020-3-30 14:22 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
DS18B20溫度傳感器
一、簡介:
圖示有字的一面,注意GNDVCC不要接反。工作電壓3.0v~5.5V,采集溫度-55度到正125度,可編程溫度9-12位,精度分別是0.5度,0.25度,0.1250.0625度,默認都是12位,12位轉(zhuǎn)換時間是750ms9位是93.75ms,電壓負壓特性(不會因電源接反發(fā)熱燒壞)。
二、電路連接:

接一個上拉電阻。
三、通信方式:
單總線通信:
單總線是一種具有一個總線主機和一個或若干個從機的系統(tǒng)。嚴格按照器件的時間要求進行復位,寫命令,讀寫數(shù)據(jù)等。整個過程在一條線上進行。
四、DS18B20的內(nèi)部結構:

64位光刻ROM,溫度傳感器,非易失性的溫度報警觸發(fā)器THTL,配置寄存器。出廠前ROM的排列是:開始8位產(chǎn)品類型標號(28H),接著48位是DS18B20全球唯一序列號,最后8位是前面56位的循環(huán)冗余校驗碼。
DS18B20存儲器:
Byte0Byte1分別存儲溫度寄存器的低字節(jié)和高字節(jié),這兩個字節(jié)是只讀的。我們一般只操作這兩個字節(jié)。

五、DS18B20的指令:
命令有兩種,一種ROM的指令,一種暫存器的指令。
六、操作時序:
分為4個步驟:
1. 復位:單片機發(fā)一個低電平給DS18B20DS18B20返回一個低電平給單片機,完成喚醒握手。
2. 發(fā)送ROM命令
3. 發(fā)送暫存器指令
4. 發(fā)送數(shù)據(jù)或接受數(shù)據(jù)
單個溫度測試代碼:
  1. #include<All.h>

  2. uchar xdata DS18B20_Buffer[2]=0;//保存溫度的數(shù)據(jù)

  3. void Delay500us()        //@24.000MHz

  4. {

  5. unsigned char i, j;

  6. i = 16;

  7. j = 147;

  8. do

  9. {

  10. while (--j);

  11. } while (--i);

  12. }

  13. void Delay80us()        //@24.000MHz

  14. {

  15. unsigned char i, j;

  16. _nop_();

  17. _nop_();

  18. i = 3;

  19. j = 123;

  20. do

  21. {

  22. while (--j);

  23. } while (--i);

  24. }

  25. void Delay60us()        //@24.000MHz

  26. {

  27. unsigned char i, j;

  28. _nop_();

  29. i = 2;

  30. j = 220;

  31. do

  32. {

  33. while (--j);

  34. } while (--i);

  35. }

  36. void Delay10us()        //@24.000MHz

  37. {

  38. unsigned char i;

  39. i = 78;

  40. while (--i);

  41. }

  42. void Delay2us()        //@24.000MHz

  43. {

  44. unsigned char i;

  45. i = 14;

  46. while (--i);

  47. }

  48. /*********************************

  49. * @函數(shù)名:DS18B20_Reset

  50. * @描   述:復位

  51. * @說   明:

  52. * @參   數(shù):無

  53. * @返回值:無

  54. *********************************/

  55. void DS18B20_Reset()

  56. {

  57.     DS18B20_DQ=0;//總線拉低

  58. Delay500us();//保持500us

  59. DS18B20_DQ=1;//短暫拉高

  60. Delay80us();//80us



  61. //等待拉低

  62. Delay500us();//返回一個106us的低電平

  63. DS18B20_DQ=1;

  64. _nop_();//短暫拉高

  65. _nop_();

  66. }

  67. /*********************************

  68. * @函數(shù)名:DS18B20_Write_Com

  69. * @描   述:寫寄存器指令

  70. * @說   明:

  71. * @參   數(shù):dat 要寫入的數(shù)據(jù)

  72. * @返回值:無

  73. *********************************/

  74. void DS18B20_Write_Com(uchar com)

  75. {

  76. uchar idata i;

  77. for(i=0;i<8;i++)

  78. {

  79.       DS18B20_DQ=0;

  80.    Delay10us();//先拉低15us

  81. _nop_();

  82. DS18B20_DQ=(bit)(com&0x01);//先發(fā)低位

  83. com>>=1;//移位

  84. Delay60us();//繼續(xù)拉低15us

  85. DS18B20_DQ=1;//短暫拉高

  86. Delay2us();

  87. }

  88. }

  89. /*********************************

  90. * @函數(shù)名:DS18B20_Read_Data

  91. * @描   述:讀數(shù)據(jù)

  92. * @說   明:

  93. * @參   數(shù):無

  94. * @返回值:dat  讀出的數(shù)據(jù)

  95. *********************************/

  96. uchar DS18B20_Read_Data()

  97. {

  98. uchar idata i,value;

  99. for(i=0;i<8;i++)

  100. {

  101. DS18B20_DQ=0;

  102. Delay10us();

  103. value>>=1;

  104. DS18B20_DQ=1;

  105. //Ds18B20會返回值。,無論是0還是1,都延遲15us

  106. Delay2us();

  107. //        Delay15us();//先拉低15us

  108. if(DS18B20_DQ)//是1

  109. value|=0x80;//最低位

  110. Delay60us();

  111. }

  112. return value;

  113. }

  114. /*********************************

  115. * @函數(shù)名:DS18B20_Handle

  116. * @描   述:溫度處理

  117. * @說   明:1. 復位 2.發(fā)送ROM命令 3.發(fā)送暫存器指令 讀RAM 4.數(shù)據(jù)

  118. * @參   數(shù):無

  119. * @返回值:無

  120. *********************************/

  121. void DS18B20_Handle()

  122. {

  123. uchar xdata value_High,value_Low;

  124. float num;//保存小數(shù)

  125.     DS18B20_Reset();//復位

  126. DS18B20_Write_Com(0xcc);//發(fā)送指令CCH,跳過ROM操作

  127. //DS18B20_Write_Com(0x33);//讀64位ROM

  128. DS18B20_Write_Com(0x44);//發(fā)送指令44H,啟動溫度轉(zhuǎn)換

  129. Delay10us();

  130. DS18B20_Reset();//復位

  131. DS18B20_Write_Com(0xcc);//發(fā)送指令CCH,跳過ROM操作

  132. DS18B20_Write_Com(0xbe);//發(fā)送指令BEH,讀取9字節(jié)RAM數(shù)據(jù)的前兩個數(shù)據(jù)

  133. Delay10us();

  134. value_Low=DS18B20_Read_Data();//先讀低字節(jié)Byte0

  135. value_High=DS18B20_Read_Data();//高字節(jié)Byte1


  136. value_High<<=4;//整數(shù)的高3位

  137. value_High+=(value_Low&0xf0)>>4;//整數(shù)的低4位

  138. DS18B20_Buffer[0]=value_High;//整數(shù)

  139. num=(value_Low&0x0f)*0.0625;//小數(shù)

  140. DS18B20_Buffer[1]=(uchar)(num*100);//小數(shù)

  141. }
復制代碼
多點測試:(兩個)
步驟:
1. 先讀出每個傳感器的唯一ROM序列;
  1. /*********************************

  2. * @函數(shù)名:DS18B20_Read_64Rom

  3. * @描   述:讀64位的ROM 唯一標識

  4. * @說   明:

  5. * @參   數(shù):*buffer 讀出的8個字節(jié)的數(shù)據(jù)

  6. * @返回值:無

  7. *********************************/

  8. void DS18B20_Read_64Rom(uchar *buffer)

  9. {

  10.           uchar i;

  11.     DS18B20_Reset();//復位

  12. DS18B20_Write_Com(0x33);//讀64位ROM

  13. for(i=0;i<8;i++) //讀取64個字節(jié)

  14. buffer[i]=DS18B20_Read_Data();
  15. }
復制代碼
2. 用兩個數(shù)組存讀出來的序列號:

3.寫入ROm序列號,并啟動轉(zhuǎn)換溫度:
  1. /*********************************

  2. * @函數(shù)名:DS18B20_Write_Rom

  3. * @描   述:寫64ROM

  4. * @說   明:發(fā)送匹配ROM命令 0x55再寫入8字節(jié)的ROM

  5. * @參   數(shù):*buffer 要發(fā)送的存放ROM的數(shù)組

  6. * @返回值:無

  7. *********************************/

  8. void DS18B20_Write_Rom(uchar *buffer)

  9. {

  10. uchar i;

  11.    DS18B20_Write_Com(0x55); //ROM匹配

  12. for(i = 0;i < 8;i++)

  13. DS18B20_Write_Com(buffer[i]); //寫入8個字節(jié)的ROM

  14. }

  15. /*********************************

  16. * @函數(shù)名:DS18B20_Handle

  17. * @描   述:溫度處理

  18. * @說   明:1. 復位 2.發(fā)送ROM命令 3.發(fā)送暫存器指令 讀RAM 4.數(shù)據(jù)

  19. * @參   數(shù):無

  20. * @返回值:無

  21. *********************************/

  22. void DS18B20_Handle(uchar *buffer)

  23. {

  24. uchar xdata value_High,value_Low;

  25. float num;//保存小數(shù)

  26.     DS18B20_Reset();//復位

  27. //DS18B20_Write_Com(0xcc);//發(fā)送指令CCH,跳過ROM操作

  28. //DS18B20_Write_Com(0x33);//讀64位ROM

  29.     DS18B20_Write_Rom(buffer); //匹配ROM 并寫入64ROM

  30. DS18B20_Write_Com(0x44);//發(fā)送指令44H,啟動溫度轉(zhuǎn)換

  31. Delay10us();

  32. DS18B20_Reset();//復位

  33. DS18B20_Write_Rom(buffer); //匹配ROM 并寫入64ROM

  34. DS18B20_Write_Com(0xbe);//發(fā)送指令BEH,讀取9字節(jié)RAM數(shù)據(jù)的前兩個數(shù)據(jù)

  35. Delay10us();

  36. value_Low=DS18B20_Read_Data();//先讀低字節(jié)Byte0

  37. value_High=DS18B20_Read_Data();//高字節(jié)Byte1


  38. value_High<<=4;//整數(shù)的高3位

  39. value_High+=(value_Low&0xf0)>>4;//整數(shù)的低4位

  40. DS18B20_Buffer[0]=value_High;//整數(shù)

  41. num=(value_Low&0x0f)*0.0625;//小數(shù)

  42. DS18B20_Buffer[1]=(uchar)(num*100);//小數(shù)

  43. }
復制代碼
其他的都和單個測試是一樣的。
測試結果:
另外附上主函數(shù):
  1. /*********************************

  2. * @函數(shù)名:main

  3. * @描   述:main函數(shù),程序入口

  4. * @說   明:

  5. * @參   數(shù):無

  6. * @返回值:無

  7. *********************************/

  8. void main()

  9. {

  10. //uchar a[8];//存放讀出來的ROM

  11. Uart1_Init();//串口初始化

  12. Send_String("多點溫度測試:\n");

  13.   while(1)

  14. {

  15.     DS18B20_Handle(DS18B20_Rom1);

  16. printf("溫度1:%bd.%bd",DS18B20_Buffer[0],DS18B20_Buffer[1]);//串口打印溫度

  17.         putchar_End();//換行

  18. //        DS18B20_Read_64Rom(a);

  19. //        Send_String(a);

  20.             Delay1000ms();

  21. DS18B20_Handle(DS18B20_Rom2);

  22. printf("溫度2:%bd.%bd",DS18B20_Buffer[0],DS18B20_Buffer[1]);//串口打印溫度

  23. Delay1000ms();

  24. putchar_End();//換行

  25. }
  26. }
復制代碼
DS18B20程序和資料: DS18B20.zip (4.21 MB, 下載次數(shù): 113)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發(fā)
ID:798201 發(fā)表于 2021-1-11 11:57 | 只看該作者
寫得非常詳細,謝謝分享!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久草福利 | 免费观看成人鲁鲁鲁鲁鲁视频 | 中文字幕一区在线观看视频 | 国产伦精品一区二区三区高清 | 一区观看 | 亚洲精品一区二区二区 | 亚洲一区二区中文字幕在线观看 | 岛国av一区二区 | 真人女人一级毛片免费播放 | 国产欧美日韩在线一区 | 日韩精品一区二区三区在线观看 | 九色.com| 亚洲综合第一页 | 少妇一级淫片aaaaaaaaa | 日韩在线视频免费观看 | 超碰在线国产 | 一区二区三区精品在线 | 国产精品二区三区 | av在线免费观看网站 | 国产激情视频网址 | 中文字幕1区 | 最新黄色毛片 | 亚洲女人的天堂 | 国产精品大片 | 欧美国产一区二区 | 最新国产精品视频 | 91在线看视频 | 精品久久精品 | 伊人一区| 看一级毛片 | 国产精品久久久久国产a级 欧美日韩国产免费 | 亚洲欧美一区二区三区国产精品 | 日本不卡一区二区三区 | 丝袜毛片| 日本精品视频在线观看 | 天堂久久天堂综合色 | 最新中文字幕一区 | 亚洲精品乱码久久久久久蜜桃 | 国产成人小视频 | 国产黄视频在线播放 | 国产欧美精品区一区二区三区 |