标题: 我写ds18b20程序为啥不行啊 [打印本页]

作者: 王家光军    时间: 2021-3-20 21:50
标题: 我写ds18b20程序为啥不行啊
我把程序分成了一块块,求各位大佬帮帮我

-1010afd8a39f8102.png (82.93 KB, 下载次数: 31)

-1010afd8a39f8102.png

3d4de77619e27f1d.png (56.12 KB, 下载次数: 34)

3d4de77619e27f1d.png

-73ad6457f3724880.png (59.2 KB, 下载次数: 37)

-73ad6457f3724880.png

64d5f5ab00b24cf9.png (80.51 KB, 下载次数: 43)

64d5f5ab00b24cf9.png

7b3480cb3875e38f.png (160.79 KB, 下载次数: 30)

7b3480cb3875e38f.png

55cc74cf34a4ffa2.png (10.38 KB, 下载次数: 37)

55cc74cf34a4ffa2.png

7a44378c34fc9953.png (30.09 KB, 下载次数: 31)

7a44378c34fc9953.png

作者: 王家光军    时间: 2021-3-20 21:53
我上面写的程序我改了很多次,所以有一些无用的程序,请大佬不要在意那些没用的程序
作者: daemondong    时间: 2021-3-21 12:51
首先要检查DS18B20是否能初始化,否则你以后的读写都没意义。我的初始化程序如下
  1. BOOL InitDS18B20 ()
  2. {
  3.   BYTE presence=1;
  4.   BYTE tryTimes;
  5.   
  6.   tryTimes = 0;
  7.   while(presence && tryTimes < 3)
  8.   {
  9.     PIN_OUT(AIRTEMP);
  10.         PIN_ON(AIRTEMP);
  11.         tryTimes++;
  12.         tryTimes--;//从高拉倒低
  13.     PIN_OFF(AIRTEMP);
  14.     delay(300); //500 us
  15.     PIN_ON(AIRTEMP);
  16.     delay(20); //34 us
  17.         PIN_IN(AIRTEMP,0);
  18.     presence=PIN_GET(AIRTEMP); //presence=0 复位成功,继续下一步
  19.         tryTimes++;
  20.   }
  21.   delay(300); //延时500 us
  22.   PIN_OUT(AIRTEMP);
  23.   PIN_ON(AIRTEMP);; //拉高电平
  24.   
  25. //  if (presence == 0) { ledFlickTimes = 10; return TRUE; }
  26. //  else  {ledFlickTimes = 5; return FALSE; }
  27.   if (presence == 0)
  28.   {
  29.     ifNotDS18B20 = 0;
  30.     MemoryPutByte((WORD)&nvmApplDescriptor.EE_IFNOTDS18B20_far,ifNotDS18B20);
  31.     return TRUE;
  32.   }
  33.   else  
  34.   {
  35.     ifNotDS18B20 = 1;
  36.     MemoryPutByte((WORD)&nvmApplDescriptor.EE_IFNOTDS18B20_far,ifNotDS18B20);
  37.   }
  38.   return FALSE;
  39. }
复制代码




作者: 王家光军    时间: 2021-3-21 14:02
daemondong 发表于 2021-3-21 12:51
首先要检查DS18B20是否能初始化,否则你以后的读写都没意义。我的初始化程序如下

好的大佬




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1