编写ds18b20的感想

原创 2007年10月07日 00:39:00

#include "delay.h"
#include <reg51.h>
#include <intrins.h>
void delay_nus(unsigned char n)        //延时n + 4  + 1  个周期
{
    #pragma asm                //第三方发送到发送到
         DJNZ R7,$                       
    #pragma endasm
}

/**********************************************
/对于DS18B20的读时隙是从主机把单总线拉低之后,
/在15秒之内就得释放单总线,以让DS18B20把数据
/传输到单总线上。DS18B20在完成一个读时序过程,
/至少需要60us才能完成
**********************************************/
unsigned char Read_Byte(void)
{
    unsigned char dat;
    unsigned char i;
    dat = 0;
    for (i = 0; i < 8; ++i)
    {   
        dat >>= 1 ;
        
         DQ = 0;
         delay_nus(1);
         DQ = 1;
         _nop_();
         if (DQ == 1)
         {
              dat |= 0x80;
         }
         DQ = 1;
         delay_nus(50);
    }  
    return dat;
}
/**********************************************
/对于DS18B20的读时隙是从主机把单总线拉低之后,
/DS18B20在15秒~60秒对I/O线采样, ,线上为1就写1
/为0则写0,总过程至少需要60us才能完成
**********************************************/
void Write_Byte(unsigned char dat)
{
    unsigned char i;
    DQ = 1;
    for (i = 0; i < 8; ++i)
    {
        DQ = 0;
        delay_nus(1);
        DQ = dat & 0x01;
        DQ = dat & 0x01;
       
        delay_nus(40);
         DQ = 1;
        dat >>= 1;
    }
}

 今天花了两个多小时来写了这三个函数,之所以花那么多时间,一是因为对C嵌汇编不了解,为了写这个延时函数,花了不少时间. 二是对时序的理解能力还不够.

例如在写unsigned char Read_Byte(void)的时候开始以为是把总线拉低15秒,在这15秒内主机读I/O线.没有释放总线,使总线一直处于主机拉低状态.

现在完整的属于自己的程序还没写好,用来测试这三个函数的程序是已经可以使用的.写完在继续谈感想.不过语言太烂.

版权声明:本文为博主原创文章,未经博主允许不得转载。

慢慢写程序的感想

客户的有测试服务器,测试数据库,公司是自己的测试服务器,测试数据库,两者都不是一个。 1.客户那边的做测试,自己在本地把代码打包发往测试服务器上,当然在本机打包好后就测试自己做的模块,发现没有问...
  • dczjzz
  • dczjzz
  • 2015年04月23日 19:15
  • 608

DS18B20时序分析详细步骤

1、过程1、2是初始化过程,每次读取都要初始化,否则18b20处于待机状态,无法成功读取。过程1:拉低信号线480-700us,使它复位,然后释放总线15-60us,18b20会拉低总线60-240u...
  • farsight2009
  • farsight2009
  • 2016年04月11日 16:19
  • 10864

DS18B20传感器的原理

集成式数字温度传感器DS1820利用单总线的特点可以方便地实现多点温度的测量,它的出现开辟了温度传感器技术的新领域。而可组网数字式温度传感器DS18B20则是DS1820的更新产品,它在电压、特性及封...
  • u012163234
  • u012163234
  • 2015年02月23日 16:03
  • 14383

VHDL语言编写DS18B20温度传感器程序详解

简单粗暴的使用单从机模式下的DS18B20
  • Stack_mz
  • Stack_mz
  • 2016年11月05日 00:44
  • 3818

关于DS18B20温度传感器的时序详解及代码分析

关于DS18B20温度传感器的时序详解及代码分析简要说明测温工作**:**DS18B20的核心功能是它的直接读数字的温度传感器。温度传感器的精度为用户可编程的9,10,11或12位,分别以0.5℃,0...
  • xiaocheng_sky
  • xiaocheng_sky
  • 2016年02月26日 00:00
  • 17523

DS18B20设置高低温限值(写暂存器)

最近使用到DS18B20,一个总线挂载多个传感器,为了识别每个传感器的实际位置,想了一个办法:在使用前先对DS18B20编号并记录该编号的实际放置位置。这样在读取数据后即可得到是哪个位置编号的温度值。...
  • louyangyang91
  • louyangyang91
  • 2017年02月17日 15:50
  • 990

DS18B20调试笔记(一)

去五楼看
  • u011531419
  • u011531419
  • 2014年07月30日 11:58
  • 824

单片机DS18B20(内包括编程思路)

特点: 1. 通信方式:1-Wire单总线通信 2. 每个DS18B20都有唯一的64为序列号储存在板载ROM(只读存储器)中; 3. 无需外部器件 4. 电源范围3.0V~5.5V ...
  • wuyuzun
  • wuyuzun
  • 2017年02月26日 17:32
  • 586

单片机ds18b20的介绍和源码

学习了单片机,对于单片机温度传感器DS18B20的一些理解
  • baidu_35534327
  • baidu_35534327
  • 2016年09月25日 17:48
  • 897

网页制作小感悟

两个月的时间依然让我成长了一丢丢。。。。。。。。。。 开始学习时,使用dreameveaer,,后来慢慢发现原来不止这一个软件可以编写网页,,,,其他的例如eclipse。。。。PHPstorm,,...
  • strivenoend
  • strivenoend
  • 2017年04月24日 16:40
  • 699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编写ds18b20的感想
举报原因:
原因补充:

(最多只允许输入30个字)