编写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线.没有释放总线,使总线一直处于主机拉低状态.

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

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

相关文章推荐

DS18B20 驱动编写

嵌入式开发平台:mini2440 DS18B20 所用GPIO:S3C2410_GPF(3) 一、DS18B20 时序分析         DS18B20的一线工作协议流程是:初始化→ROM操作指...

S3C2440 温度传感器ds18b20的驱动编写与测试

ds18b20的详细信息百度百科都有比较详细的介绍:http://www.baidu.com/link?url=tgDW0RZumyv2JQbC7ohrnKj_jtFZmqkrnJd7vp3V24KC...

arm+linux fl2440 ds18b20 温度传感器驱动编写及测试

---------------------------------------------------------------------------------------            ...

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

简单粗暴的使用单从机模式下的DS18B20

1-Wire总线-DS18B20及其驱动程序编写

1、 1-Wire总线-DS18B20         DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小,抗干扰能力强,精度高的特点。        ...

Ubuntu下编写ds18b20驱动程序

本程序是在大三实习阶段的时候写的一个驱动程序,当时对于驱动程序的理解不是很彻底,只是在别人的框架下自己去填写代码,先把ds18b20的时序图读懂,照着时序图写代码就可以了,但是要注意的就是时序图中的延...

DS18B20驱动程序编写

首先,数据手册一定要看懂。其次,单片机的延时计算一定要精确。多的不说,上程序: #include /***********将读入的温度转化为待显示数据*********/void ConvertTe...

DS18B20时序分析详细步骤

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

树莓派 GPIO学习笔记(3)--DS18B20温度传感器

接线方式18B20接线方式需要在VCC和数据端连接一个4.7k的电阻. 电阻被用于拉高数据输出线(data-line),并且保持数据输出的稳定。要注意DS18B20的方向,弧形的一边在图中的左侧。如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编写ds18b20的感想
举报原因:
原因补充:

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