51单片机18B20程序

发布者:Enchanted2021最新更新时间:2016-12-10 来源: eefocus关键字:51单片机  18B20程序 手机看文章 扫描二维码
随时随地手机看文章

18b20复位函数:

bit ds18b20_reset(void)
{
    bit bitbuf;
    ds18b20=1;                   
    //10us
    TH0=0xff;
    TL0=0xf6;
      TF0=0;        
    while(!TF0);    
    ds18b20=0;
    //设置1-wire总线为低电平(占领总线)
    //延迟480us-960us,尽可能选小值(480us)                   
    //这里我们选490us    
    TH0=0xfe;
    TL0=0x3c;
      TF0=0;        
    while(!TF0);        
      ds18b20=1;    
    //设置1-wire总线为高电平(释放总线) 
    //最佳时间: 60us+7.5us              
    //这里我们选68us 
      TH0=0xff;
    TL0=0xc1;
      TF0=0;          
    while(!TF0);        
    ds18b20=1;
    // 探测总线上是否有器件 
    if(ds18b20==1) bitbuf=1;     //没有器件在线 
    else bitbuf=0;         //有器件在线 
    //保证DS18B20释放总线的时间
    //490-68=422us            
      TH0=0xfe;
    TL0=0x7b;
      TF0=0;           
    while(!TF0);  
    return(bitbuf);
}

18b20写字节函数:

void ds18b20_write(unsigned char val)
{
    unsigned char i;
    for (i=0;i<8;i++) //
    {              
        ds18b20=0;          // 设置1-wire总线为低电平 
        //2us          
        TH0=0xff;
        TL0=0xfe;
          TF0=0;        
        while(!TF0);
        ds18b20=val&0x01;      //最低位移出              
        val=val>>1;          //右移一位
        //60us~120us(实际不能到120us, 因为其它语句也用时间了!)
        //这里我们选62us
        TH0=0xff;
        TL0=0xc6;
          TF0=0;        
        while(!TF0);
        ds18b20=1;
    }     
}

18b20读字节函数:

unsigned char ds18b20_read(void)
{
    unsigned char i;
    unsigned char value = 0;
    for (i=0;i<8;i++)
    {
        //从总线拉低到读总线状态,不能大于15us!
        ds18b20=0;
        //2us          
        TH0=0xff;
        TL0=0xfe;
          TF0=0;        
        while(!TF0);
        ds18b20=1;
        //4us          
        TH0=0xff;
        TL0=0xfc;
          TF0=0;        
        while(!TF0);
        value>>=1;             
        if(ds18b20) value|=0x80;
        //62us,必须大于60us          
        TH0=0xff;
        TL0=0xc6;
          TF0=0;    
        while(!TF0);        
    }
    ds18b20=1;
    return(value);
}

启动18b20温度转换:

void convert_T(void) 
{ 
    if(ds18b20_reset()==0)          // 如果复位成功
    {   
        ds18b20_write(0xcc);     // 跳过多器件识别 
        ds18b20_write(0x44);     // 启动温度转换 
    } 
}

读18b20温度函数:

void read_T(void) 
{ 
    unsigned char Lsb,Msb;            
    if(ds18b20_reset()==0)           // 如果复位成功 
    {  
        ds18b20_write(0xcc);      // 跳过多器件识别 
        ds18b20_write(0xbe);      // 读暂存器 
        Lsb=ds18b20_read();       // 低字节 
        Msb=ds18b20_read();        // 高字节 
        temp2=Lsb&0x0f;
        temp1=(Lsb>>4)|(Msb<<4);
    }     
}


关键字:51单片机  18B20程序 引用地址:51单片机18B20程序

上一篇:51单片机STC15W408AS驱动无感无刷电机BLDC
下一篇:stc51单片机硬件SPI驱动nrf24l01程序

推荐阅读最新更新时间:2024-03-16 15:24

8051单片机教程第五课:延时程序分析
上一次课中,我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。 DELAY:MOVR7,#250;(6) D1:MOVR6,#250;(7) D2:DJNZR6,D2;(8) DJNZR7,D1;(9) RET;(10) MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一个人的手上传到另一个人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOVR7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这条指令中被省略了(注意:并不是每一条传递指令都会省的,事实上大部份数据传递指令都会有传递者
[单片机]
80<font color='red'>51单片机</font>教程第五课:延时<font color='red'>程序</font>分析
51单片机-UART口发送一个字符
UART口,又叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是单片机常用功能的一部分,也是早期台式电脑必备的一个硬件接口。 当年我调试UART口的时候,用的还是超级终端,现在都用串口助手了,比我们当时方便多了。 UART口按位发送和接收字节,虽然相比于并口,慢了很多,但是在有限的IO资源面前,这种方式是非常可取的。 UART口主要用于ASCII码的传输,传输过程遵循ANSI/EIA-232标准。ASCII码是啥?看下表: 就是说,当我想发送字符“A”的时候,我要向串口发送十进制数65,或者十六进制数41。 驱动电
[单片机]
学<font color='red'>51单片机</font>-UART口发送一个字符
通过51单片机实现直流电机调速
一、项目背景及目的 随着各种工业生产设备和机械设备的广泛使用,直流电机调速技术的研究和应用越来越受到人们的重视,具有广泛的应用前景。本项目通过51单片机实现直流电机调速功能,为实际工程应用提供一个可靠和有效的调速方案。 二、设计思路 (1)系统原理 本系统采用PWM(脉冲宽度调制)技术对直流电机进行调速控制。通过改变输出信号的占空比,实现对直流电机的转速控制。系统中包括51单片机、直流电机、电路板以及控制程序。 (2)硬件设计 电机:使用24V直流电机实现实际转速控制。 驱动电路:使用四个寄生二极管三相全桥驱动电路控制电机,使电机可以正反转,并控制电机的速度。 51单片机:使用STC89C52单片机,作为控制核心。单片机
[单片机]
通过<font color='red'>51单片机</font>实现直流电机调速
51单片机外围模块——DS18B20温度传感器
一. DS18B20简介 DS18B20数字温度传感器接线方便,封装后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 二. DS18B20的特点 适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 DS18B20支持多点组
[单片机]
<font color='red'>51单片机</font>外围模块——DS18B20温度传感器
51单片机一个输出口显示多位输出
电路图 #include reg51.h sbit LE0=P3^0; sbit LE1=P3^1; sbit LE2=P3^2; sbit LE3=P3^3; int i,j,k; int xx ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void yanchi(int ms) { while(ms--) { for(i=0;i 100;i++); } } void main() { while(1) { for(j=0;j 10000;j++) { P2=xx ;//千 LE
[单片机]
<font color='red'>51单片机</font>一个输出口显示多位输出
c51中断优先级c语言,51单片机的中断优先级及中断嵌套
说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。 中断的优先级有两个:查询优先级和执行优先级。 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级: 外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、T
[单片机]
51单片机中的一些关键字(不断更新中)
extern变量:作用域从申明到整个程序的结束 sbit使用:sbit P1_1=P1^1 或者sbit P1_1=0X91 sizeof使用:sizeof(变量),返回变量占内存大小 sizeof(数组),返回数组大小,不是元素多少 typedef作用是给XXX取别名,例如:typedef unsigned char uchar
[单片机]
AT89C51单片机在LED显示屏控制电路设计中的应用
LED显示屏又叫电子显示屏,是由LED点阵组成,通过红色或绿色灯珠的亮灭来显示文字、图片、动画、视频,内容可以随时更换,通常由显示模块、控制系统及电源系统组成。显示模块由LED灯组成的点阵构成,负责发光显示;控制系统通过控制相应区域的亮灭,可以让屏幕显示文字、图片、视频等内容,恒舞动卡主要是播放动画的;电源系统负责将输入电压电流转为显示屏需要的电压电流。   LED显示屏广泛应用于信息指示灯,大屏幕显示,液晶显示的背光灯,固体照明等。本文设计一种由4个16×16点阵LED模块组成的显示屏,由单片机作控制器,平滑移动显示任意多个文字或图形符号,本电路可级联扩展实现由任意多个16×16点阵LED模块组成的显示屏。   一、控制
[单片机]
AT89C<font color='red'>51单片机</font>在LED显示屏控制电路设计中的应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved