搜索
bottom↓
回复: 4

51 单片机复位一直不成功。

[复制链接]

出0入0汤圆

发表于 2014-7-7 17:40:00 | 显示全部楼层 |阅读模式
本帖最后由 Victorsixy 于 2014-7-7 17:42 编辑

  完全按照规格书时序写的,示波器测试都正常,就是读取温度值不对。只能求助大神了,这个太蛋疼了。以下的延时函数均用示波器测试过。



  1. #include"DS18B20.h"
  2. #include"UartPrintf.h"


  3. void DS18B20_Init(void)
  4. {
  5.                
  6.                 DS18B20_Reset();
  7.     DS18B20_WriteByte(0xCC);        
  8.     DS18B20_WriteByte(0x44);          
  9.                 DelayNms(500);              
  10.                 DelayNms(500);
  11.                 //while(!DQ);
  12.                
  13. }

  14. void Read_Value(unsigned char *p, unsigned char idata j)
  15. {
  16.                 int i;
  17.                 for(i=0;i<j; i++)
  18.                 {
  19.                                 *p = DS18B20_ReadByte();
  20.                                 p++;
  21.                                 DelayUS(20);
  22.                 }
  23. }


  24. int Get_Temp(unsigned char *p)
  25. {
  26.                 int  Temp;
  27.                 Temp = p[1]*0x100 + p[0];
  28.                 Temp /=16;
  29.                 return Temp;
  30. }


  31. /**************************************
  32. 1@2.4us
  33. 2@3.0us
  34. 3@4.4us
  35. 4@5.4us
  36. 5@6.4us
  37. 10@11.6us
  38. 20@20.8us
  39. 50@51.2us
  40. 200@200us
  41. *************************************/
  42. void DelayUS(unsigned char n)  //256
  43. {
  44.         while (--n)
  45.         {
  46.                 _nop_();
  47.         }
  48. }

  49. /********************************
  50. 1@1ms
  51. 2@2ms
  52. 3@3ms
  53. 10@10ms
  54. 800@800ms
  55. ********************************/
  56. void DelayNms(unsigned int n)
  57. {
  58.         unsigned int i;
  59.         while(n--)
  60.         {
  61.                 for(i=0;i<550;i++);
  62.         }
  63. }



  64. void DS18B20_Reset(void)
  65. {
  66.         while(1)
  67.         {
  68.                 DQ=0;
  69.                 DelayUS(200);
  70.                 DelayUS(200);
  71.                 DelayUS(80);
  72.                 DQ=1;
  73.                 DelayUS(60);
  74.                 if(!DQ)
  75.                 {
  76.                                 DQ=1;
  77.                                 DelayUS(200);
  78.                                 DelayUS(40);
  79.                                 DelayUS(200);
  80.                                 DelayUS(40);
  81.                                 break;
  82.                 }
  83.         }
  84. }




  85. /**************************************
  86. ´ÓDS18B20ÖжÁÈ¡1×Ö½ÚÊý¾Ý
  87. **************************************/
  88. unsigned char DS18B20_ReadByte(void )
  89. {
  90.     char i;
  91.     unsigned char dat;
  92.                 for (i=0; i<8; i++)            
  93.     {
  94.                                 dat >>= 1;
  95.                                 DQ=0;
  96.                                 _nop_();
  97.                                 _nop_();
  98.                                 DQ=1;   //ÊÍ·Å×ÜÏß
  99.                                 DelayUS(16);
  100.                                  if (DQ)
  101.                                  {
  102.                                                         dat |= 0x80;
  103.                                  }
  104.                                 DelayUS(60);
  105.     }
  106.     return dat;
  107. }

  108. /**************************************
  109. ÏòDS18B20д1×Ö½ÚµÄÊý¾Ý
  110. **************************************/
  111. void DS18B20_WriteByte(char dat)
  112. {
  113.     char i, datebuf;
  114.     for (i=0; i<8; i++)            
  115.     {
  116.                                 datebuf = dat>>i;
  117.                                 if(datebuf & 0x01)
  118.                                 {
  119.                                                 DQ=0;
  120.                                                 _nop_();
  121.                                                 _nop_();
  122.                                                 DQ=1;
  123.                                                 DelayUS(60);
  124.                                 }
  125.                                 else
  126.                                 {
  127.                                                 DQ=0;
  128.                                                 DelayUS(60);
  129.                                                 DQ=1;
  130.                                 }
  131.     }
  132. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-7-7 18:08:31 | 显示全部楼层
这都老黄历了,自己搜索一下看看吧,另外注意不能用推挽方式的

出0入0汤圆

发表于 2014-7-7 18:44:57 | 显示全部楼层
读写字节有问题,位起始低电平时间不够

出0入8汤圆

发表于 2014-7-7 19:46:42 | 显示全部楼层
标题不合格哦~明显是18b20的问题,不是51的问题~

出0入0汤圆

 楼主| 发表于 2014-7-16 16:09:20 | 显示全部楼层
很抱歉的确是标题错了,单最终不是读写数据的时间问题,而是DS18B20复位时存在问题,抱歉抱歉
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 07:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表