找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2321|回复: 0
收起左侧

需要DS1820的C51单片机源程序看看这里

[复制链接]
ID:323716 发表于 2018-5-6 20:24 | 显示全部楼层 |阅读模式
需要DS1820的C51源程序看看这里,这边需要双DS1820.正在研究中。。。。
  1. 网上有很多这样的例程啊。给你一个STC的,STC的下载程序方便,上手也比较快

  2. CPU:STC12C5A48S2

  3. #include "18B20.h"  
  4. #include<intrins.h>
  5. #include <math.h>  //要用到取绝对值函数abs()
  6. /**************************************
  7. 延时X微秒(STC12C5A60S2@12M)
  8. 不同的工作环境,需要调整此函数
  9. 此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同
  10. **************************************/
  11. sbit  DQ=P1^0;   //定义18B20数据脚为P1.0端口

  12. void DelayXus(uint n)
  13. {
  14.     while (n--)
  15.     {                                                         
  16.         _nop_();
  17.         _nop_();
  18.     }
  19. }
  20. void getTmp_Update()
  21. {  
  22.     uint TPL,TPH,tmpvalue,value;
  23.     float t;
  24.        
  25.     Room_tmep=0;
  26.     DS18B20_Reset();                //设备复位
  27.     DS18B20_WriteByte(0xCC);        //跳过ROM命令
  28.     DS18B20_WriteByte(0x44);        //开始转换命令
  29.        
  30.     while (!DQ){};                    //等待转换完成
  31.     DS18B20_Reset();                //设备复位
  32.     DS18B20_WriteByte(0xCC);        //跳过ROM命令
  33.     DS18B20_WriteByte(0xBE);        //读暂存存储器命令
  34.     TPL = DS18B20_ReadByte();       //读温度低字节
  35.     TPH = DS18B20_ReadByte();       //读温度高字节
  36.         tmpvalue = TPH;
  37.     tmpvalue <<= 8;
  38.     tmpvalue |= TPL;
  39.     value = tmpvalue;

  40. t = value * 0.0625;          //使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度
  41.                           /* 如果将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入, 如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度,
  42.                                                  如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度 */
  43.          Room_tmep=        t;                 //得到最终温度
  44. }
  45. /**************************************
  46. 复位DS18B20,并检测设备是否存在
  47. **************************************/
  48. void DS18B20_Reset()
  49. {         
  50.     uchar  i=0;
  51.     CY = 1;
  52.     while (CY)
  53.     {       
  54.             
  55.         DQ = 0;                     //送出低电平复位信号
  56.         DelayXus(240);              //延时至少480us
  57.         DelayXus(240);
  58.         DQ = 1;                     //释放数据线
  59.         DelayXus(60);               //等待60us
  60.         CY = DQ;                    //检测存在脉冲
  61.         DelayXus(240);              //等待设备释放数据线
  62.         DelayXus(180);       
  63.                 i++;
  64.                 if (i>50){AD_Error_code=1;return;}else{if (AD_Error_code==1)        {AD_Error_code=0;}}
  65.     }
  66. }
  67. /**************************************
  68. 从DS18B20读1字节数据
  69. **************************************/
  70. uint DS18B20_ReadByte()
  71. {
  72.     uchar i;
  73.     uchar dat = 0;
  74.     for (i=0; i<8; i++)             //8位计数器
  75.     {
  76.         dat >>= 1;
  77.         DQ = 0;                     //开始时间片
  78.         DelayXus(1);                //延时等待
  79.         DQ = 1;                     //准备接收
  80.         DelayXus(1);                //接收延时
  81.         if (DQ) dat |= 0x80;        //读取数据
  82.         DelayXus(60);               //等待时间片结束
  83.     }
  84.     return dat;
  85. }
  86. /**************************************
  87. 向DS18B20写1字节数据
  88. **************************************/
  89. void DS18B20_WriteByte(uint dat)
  90. {
  91.     uchar i;
  92.     for (i=0; i<8; i++)             //8位计数器
  93.     {
  94.         DQ = 0;                     //开始时间片
  95.         DelayXus(1);                //延时等待
  96.         dat >>= 1;                  //送出数据
  97.         DQ = CY;
  98.         DelayXus(60);               //等待时间片结束
  99.         DQ = 1;                     //恢复数据线
  100.         DelayXus(1);                //恢复延时
  101.     }
  102. }

复制代码


Ds1820 源程序.zip

42.39 KB, 下载次数: 10, 下载积分: 黑币 -5

C51 读DS1820

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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