DS18B20温度控制数码管显示(汇编非常详细)

合集下载

DS18B20数码管显示程序

DS18B20数码管显示程序

#include #define F_CPU 11059200UL#include #define DQ PA5#define BIT(X) (1>=1;}}//DS1302读字节函数unsigned char DS1302_Read(){unsigned char i,Temp=0;for(i=0;i<8;i++){Temp>>=1; //数据右移DDRA|=BIT(DQ); //DQ为输出状态PORTA&=~BIT(DQ); //拉低总线,启动输入PORTA|=BIT(DQ); //释放总线DDRA&=~BIT(DQ); //DQ为输入状态if(PINA&BIT(DQ)) Temp|=0x80;_delay_us(45); //延迟45微妙(最大45微妙)}return Temp;}//读温度函数unsigned int Read_Temperature(){unsigned int Temp1,Temp2;DS1302_Reset(); //DS1302复位DS1302_Write(0xCC); //跳过ROMDS1302_Write(0x44); //温度转换DS1302_Reset(); //DS1302复位DS1302_Write(0xCC); //跳过ROMDS1302_Write(0xbe); //读取RAMTemp1=DS1302_Read(); //读低八位,LS Byte, RAM0Temp2=DS1302_Read(); //读高八位,MS Byte, RAM1DS1302_Reset(); //DS1302复位,表示读取结束return (((Temp2<<8

DS18B20介绍、流程图和程序源代码

DS18B20介绍、流程图和程序源代码

DS18B20单线数字温度传感器

DALLAS半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器,体积更小、适用电压更宽、更经济。一线总线独特而且经济的特点,使用户可轻松地组建温度传感器网络,为测量系统的构建引入全新概念。DS18B20、DS1822 “一线总线”数字化温度传感器同DS1820一样,支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C,而DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。

DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C,分辨率设定,以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS1822与DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。

DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。

1、 DS18B20性能特点

DS18B20的性能特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含

第31课温度传感器DS18B20详解

第31课温度传感器DS18B20详解

DS18B20的命令
ROM操作命令
(1)读ROM--33H (2)匹配ROM--55H (3)跳过ROM--CCH (4)搜索ROM—F0H (5)报警搜索ROM--ECH
功能命令
(1)写暂存寄存器命令--4EH (2)读暂存寄存器指令--BEH (3)复制暂存寄存器命令—48H (4)启动温度转换命令—44H (5)回传EEPROM内容指令--B8H (6)读电源类型指令--B4H
DS18B20简介
DS18B20是DALLS公司推出的“1-WIRE”接口的 数字温度传感器,可以直接将温度转换为9~12位串行 数字信号供单片机处理。它具有体积小、功耗低、精度 高、抗干扰能力强等优点。
DS18B20引脚和封装
DS18B20的内部结构
DS18B20当分辨率为9,10,11,和12位时,分别对应与0.5℃, 0.25℃,0.125℃,0.0625℃的温度增量
如何用DS18B20来采集温度
访问一个DS18B20必须经过初始化、ROM命令和功能命令这三个步骤 。 单个DS18B20发命令顺序 第一步: DS18B20初始化----跳过ROM命令(CCH)----启动温度转换命令(44H) 第二步: DS18B20初始化----跳过ROM命令(CCH)----读暂存寄存器指令(BEH)
实验现象
通过对DS18B20的控制,读取出DS18B20所采集的温度数据并在 数码管的第4、5、6、7位ຫໍສະໝຸດ Baidu行显示,温度精确到小数点后一位。

基于51单片机的DS18B20共阴数码管显示

基于51单片机的DS18B20共阴数码管显示

基于51单片机的DS18B20温度测量四位共阴数码管显示

硬件电路要求,51单片机P0口依次与数码管段选接口接上,低位接低位,高位接高位,位选用8550三极管驱动。基极接P2口第四位,按自己布局可适当调整。

程序功能:实现一个DS18B20采集温度,并显示于共阴数码管上。采集范围0~99度,显示精度0.1度,如果要实现负温度显示,可以自行加显示负温度的函数即可。

本人亲测可以,转换速度小于750MS

/*MCUstc89c52rc,晶振12MHZ

程序功能:实现一个DS18B20采集温度,并显示于共阴数码管上。采集范围0~99度,显示精度0.1度,只可显示正温度显示*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit ds=P1^0; //定义传感器接口,可自行根据需要修改

#define wei P2

uint temp;

float f_temp;

unsigned char code table[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x01 };//0~9共阴段码void delay(uint z)//延时函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void dsreset(void) //18B20复位函数

{

uint i;

ds=0;

i=103;

while(i>0)i--;

ds=1;

基于DS18B20--+89C52单片机的数字温度计设计)

基于DS18B20--+89C52单片机的数字温度计设计)

基于DS18B20+89C52单片机的数字温度计设计

简介

数字温度计是现代生活中常见的电子设备之一,其广泛应用于医疗、环境监测、生产制造等领域。本文介绍基于DS18B20+89C52单片机的数字温度计设计。

DS18B20是一款高精度数字温度传感器,能够实现0.5℃的温度测量精度,同时具备防水、防腐等特性。89C52是一款高性能单片机,具备高速计算、高稳定性等

特点。本文将分析DS18B20的原理及使用方法,并结合89C52单片机设计出一款

数字温度计。

DS18B20工作原理

DS18B20是一种数字温度传感器,内置了AD转换器、数字信号处理器等。其

工作原理为利用其内部的温度传感器测量物体的温度,将温度转换为增量数字量输出,输出端为单总线,同时具备多级地址识别能力,因此可进行多个传感器测温。

DS18B20使用方法

1.按照DS18B20的引脚标识将其连接至单总线上;

2.DS18B20提供了ROM查询指令,用于查询DS18B20的唯一地址;

3.测温需要通过读取DS18B20的EEPROM寄存器得到,读取指令由主

控制器发出,DS18B20在收到读取指令后进行温度转换,然后将转换后的温

度值存储至EEPROM中;

4.读取温度值需要使用读温度命令,该命令由主控制器发出,DS18B20

回送温度值。

89C52单片机使用方法

89C52是一款AT89C系列单片机,具备丰富的I/O端口、高速时钟、EEPROM等特点。在使用89C52进行数字温度计设计时,需要进行以下操作: 1.

通过端口设定进行DS18B20的唤醒和读温度操作; 2. 通过定时器进行延时操作,

DS18B20温度检测仪表(数码管显示)

DS18B20温度检测仪表(数码管显示)

目录ﻩ

第1章绪论ﻩ错误!未定义书签。

1.1选题目的............................................................ 错误!未定义书签。

1.2设计要求ﻩ错误!未定义书签。

第2章电路结构及工作原理............................................ 错误!未定义书签。

2.1电路方框图........................................................... 错误!未定义书签。

2.1.1电路图.................................................. 错误!未定义书签。

2.1.2 系统流程ﻩ错误!未定义书签。

2.2芯片介绍............................................................... 错误!未定义书签。

2.2.1 DS18B20ﻩ错误!未定义书签。

2.2.1.1 DS18B20的工作原理ﻩ错误!未定义书签。

2.2.1.2 DS18B20的使用方法............... 错误!未定义书签。

2.2.2 AT89C51.................................................. 错误!未定义书签。

2.2.2.1 AT89C51简介ﻩ8

第3章整机工作原理 (10)

第4章系统调试与分析ﻩ错误!未定义书签。

4.1 系统的调试........................................................ 错误!未定义书签。

DS18B20程序

DS18B20程序

一.概述

DS18B20是一种单总线数字温度传感器。测试温度范围-55℃-125℃,温度数据位可配置为9、10、11、12位,对应的刻度值分别为0.5℃、0.25℃、0.125℃、0.0625℃,对应的最长转换时间分别为93.75ms、187.5ms、375ms、750ms。出厂默认配置为12位数据,刻度值为0.0625℃,最长转换时间为750ms。从以上数据可以看出,DS18B20

数据位越低、转换时间越短、反应越快、精度越低。

单总线,意味着没有时钟线,只有一根通信线。单总线读写数据是靠控制起始时间和采样时间来完成,所以时序要求很严格,这也是DS18B20驱动编程的难点。

需要注意的是,DS18B20和同一系列的DS18S20,在读写上,时序、命令一致,但因温度值存放的位置不一样,对温度数据的处理也不一样,所以程序不能直接套用。

二.电路设计

在WSF-51DB开发板上,利用AT89S52单片机的P1.1脚来驱动DS18B20,上拉电阻阻值为4.7K欧姆。DS18B20的上拉电阻的阻值是一个需要注意的参数,如果DS18B20放置的位置离电路板较远,需要用较长的电缆来连接时,上拉电阻要相应减小,以弥补线路损耗,而且连接电缆要选用优质的三芯带屏蔽层的电缆,否则不能正常读写数据。

三.软件设计

/*****************************************************************

*程序名称:DS18B20驱动

*程序功能:读写DS18B20,数码管显示温度值,温度值精度为0.1度。

DS18B20测温程序,四位数码管显示两位小数

DS18B20测温程序,四位数码管显示两位小数

#include<reg51.H>

#include<absacc.H>

#include <intrins.h>

#include<stdio.h>

#define uchar unsigned char

#define uint unsigned int

uchar code TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code TAB1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; sbit DQ=P3^3;

void delay(uint i)

{

while(i--);

}

void DelayMS(uint ms)

{

uchar i;

while(ms--) for(i=0;i<120;i++);

}

void display(int k)//数码管显示

{

P2=0x08;

P0=TAB[k%10];

DelayMS(5);

P2=0x04;

P0=TAB[k/10%10];

DelayMS(5);

P2=0x02;

P0=TAB1[k/100%10];

DelayMS(5);

P2=0x01;

P0=TAB[k/1000];

DelayMS(5);

}

init_DS(void)

{

uchar x=0;

DQ=1;

delay(8);

DQ=0;

delay(85);

DQ=1;

delay(14);

x=DQ;

delay(20);

}

Read(void)

数码管显示实时温度共10页

数码管显示实时温度共10页

模块化数码管显示实时温度DS18B20

单片机 AT89C51

温度芯片 DS18B20

数码管共阳 7407驱动

采用模块化编程

/*delay.h*/

#ifndef _DELAY_H

#define _DELAY_H_

#define uint unsigned int

#define uchar unsigned char

void delay(uint xms); //秒级延时

void delayms(uint xms); //毫秒级延时,不可以更改,若更改,DS18B20将显示异常

#endif

/*delay.c*/

#include "delay.h"

void delay(uint xms)

uint i;

uchar j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

void delayms(uint xms)

while(xms--);

/*ds18b20.h*/

#ifndef _DS18B20_H

#define _DS18B20_H

#include <reg51.h>

#include "delay.h"

#include <intrins.h>

#define NOP() {_nop_(),_nop_(),_nop_(),_nop_()}

sbit DQ=P3^2; //DS18B20控制线,单线模式。

extern bit ng; //正负数标志位,ng=0,为正数,反之为负数,正数负数的处理方法不同,

extern bit DS18B20_IS_OK; //为1时表示当前读取温度正常,否则读取失败。

电子温度计 DS18B20 程序 电路图

电子温度计 DS18B20 程序 电路图

它的功能是:

1.读出当前温度值。

2.可通过按键调整报警温度上下限。按第一个键,进入温度上线调节模式,第二个

键温度加,第三个键温度减,再按一下第一个键,进入温度下线调节模式,第二个键温度加,第三个键温度键,再按一下第一个键,正常显示当前温度。

3.当进入报警温度上下限调节时,红灯亮,当显示当前温度是,绿灯亮。

4.当当前温度超过上限温度时,或者低于下限温度时,蜂鸣器报警且黄灯闪烁。需要说明的是,

一般情况下,DQ引脚应该有一个上拉电阻来拉高电平,但是我通过观察发现,初始状态下,89C52单片机的引脚都为高电平,故我将上拉电阻去除,1820与单片机正常通信,加上上拉电阻,反而不能正常通信。

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P3^0;

sbit Speak=P1^7;

sbit Out=P3^2;

sbit Button1=P1^4;

sbit Button2=P1^5;

sbit Button3=P1^6;

sbit Ledblue=P1^0;

sbit Ledred=P1^1;

bit Point;

uint T;

int Up=980,Down=300,Tplace=0;

code uchar Ledcode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x8f}; /*数码管显示的数字0123456789℃*/

code uchar Ledcode_s[]={0xbf,0x86,0xdb,0xcf, /*带小数点数码管显示0123456789-*/

ds18b20测温度数码管显示

ds18b20测温度数码管显示

#include

#include

#define uint unsigned int

#define uchar unsigned char

//-------函数声明-------

void init();

void disp();

void delay(uint x);

void delayms(uint x);

uchar rst_ds18b20();

void write_byte(uchar com);

uchar read_byte();

void read_temperature();

void calculate_temperature();

uchar code table[] = {0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0xA7,0xFF,0xEF,0xC0,0x00}; uchar code bitsel[] = {0x7f,0xbf,0xdf,0xef};

uchar smg[4];

sbit DQ=P1^0;

sbit led=P1^5;

uchar ready;

bit ds18b20_is_ok;

uchar temperature_value[2];

//-----------主函数-----------

void main()

{

init();

while(1)

{

if(ready == 0)

{

led = 0;

}

read_temperature();

if(ds18b20_is_ok == 1)

{

calculate_temperature();

// rst_ds18b20();

(完整word版)DS18B20水温控制系统+电路图程序

(完整word版)DS18B20水温控制系统+电路图程序

水温控制系统

摘要:该水温控制系统采用单片机进行温度实时采集与控制。温度信号由“一线总线”数字化温度传感器DS18B20提供,DS18B20在-10~+85°C范围内,固有测温分辨率为0.5 ℃。水温实时控制采用继电器控制电热丝和风扇进行升温、降温控制.系统具备较高的测量精度和控制精度,能完成升温和降温控制。

关键字:AT89C51 DS18B20 水温控制

Abstract: This water temperature control system uses the Single Chip Microcomputer to carry on temperature real-time gathering and controling。DS18B20,digitized temperature sensor, provides the temperature signal by "a main line”. In -10~+85℃the scope,DS18B20’s inherent measuring accuracy is 0.5 ℃. The water temperature real-time control system uses the electricity nichrome wire carring on temperature increiseament and operates the electric fan to realize the temperature decrease control。The system has the higher measuring accuracy and the control precision,it also can complete the elevation of temperature and the temperature decrease control. Key Words:AT89C51 DS18B20 Water temperature control

18b20测温数码管显示实验--精确到小数点后4位

18b20测温数码管显示实验--精确到小数点后4位

18b20测温数码管显示实验--精确到小数点后4位//滑国虎于09.9.20完成//

//DS18B20的读写程序,数据脚P1.5 //

//温度传感器18B20程序,采用器件默认的12位转化 //

//最大转化时间750微秒,显示温度-55到+125度,显示精度 // //为0.1度,显示采用4位LED共阳显示测温值 //

//P0口为段码输入,P27~P21为位选 //

/***************************************************/

#include "reg51.h"

#include "intrins.h" //_nop_();延时函数用 #define Disdata P0 //段码输出口 #define discan P2 //扫描口 #define uchar unsigned char #define uint unsigned int

sbit DQ=P1^5; //温度输入口 sbit DIN=P0^7; //LED小数点控制 uint h;

uint temp;

//

uchar code

dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x bf};

//共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮"

"-"

uchar code scan_con[7]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd}; //列扫描控制字

DS18B20汇编程序(完整版)

DS18B20汇编程序(完整版)

DS18B20汇编程序(完整版)

DS18B20汇编程序

;实验目的:熟悉DS18B20的使用

;六位数码管显示温度结果,其中整数部分2位,小数部分4位

;每次按下RB0键后进行一次温度转换。

;硬件要求:把DS18B20插在18B20插座上

; 拨码开关S10第1位置ON,其他位置OFF

; 拨码开关S5、S6全部置ON,其他拨码开关全部置OFF

;*****************以下是暂存器的定义*****************************

#INCLUDE

#DEFINE DQ PORTA,0 ;18B20数据口

__CONFIG

_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF &_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS _OSC CBLOCK 20H

DQ_DELAY1

DQ_DELAY2

TEMP

TEMP1

TEMP2 ;存放采样到的温度值

TEMP3

COUNT

COUNT1

ENDC

TMR0_VALUE EQU 0AH ;寄存器初值为6,预分频比1:4,中断一次时间为4*(256-6)=1000us

DQ_DELAY_VALUE1 EQU 0FAH

DQ_DELAY_VALUE2 EQU 4H

;**********************以下是程序的开始************************ ORG 00H

NOP

GOTO MAIN ;入口地址

ORG 04H

RETFIE ;在中断入口出放置一条中断返回指令,防止干扰产生中断TABLE

DS18B20温度传感器和数码管显示例程

DS18B20温度传感器和数码管显示例程

//DS18B20温度传感器和数码管显示

//编程时间:连线表: CPU=stc89C52 SysClock=12MHz

// LEDLE= 控制位高电平有效 LEDSEG=P2 KEYBOARD=P3 LEDWEI=,LED高到底//**********************************************************

//DS18B20

//**********************************************************

//连线表: CPU=stc89C52 SysClock=12MHz *

//单总线: TMDAT=

//

//**********************************************************

#include <>

#define uchar unsigned char

#define uint unsigned int

uchar discount=0;//显示扫描位计数

uchar last=0;//最终温度值

uchar itcount=0x13;//定时器延时计数

uchar seg[4];//数码管显示暂存

uchar tem[2];//读取温度暂存

uchar flag=0;//温度正负标志位

/********************LED引脚定义********************/

sfr LEDSEG=0x80;//P2

sfr LEDWEI=0xA0;//P3

/********************DS18B20引脚定义********************/

郭天祥讲解的DS18B20测温度的程序

郭天祥讲解的DS18B20测温度的程序

郭天祥讲解的DS18B20测温度的程序#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit ds=P2^2; //温度传感器信号线

sbit dula=P2^6; //数码管段选线

sbit wela=P2^7; //数码管位选线

sbit beep=P2^3; //蜂鸣器

uint temp;

float f_temp;

uint warn_l1=260;

uint warn_l2=250;

uint warn_h1=300;

uint warn_h2=320;

sbit led0=P1^0;

sbit led1=P1^1;

sbit led2=P1^2;

sbit led3=P1^3;

unsigned char code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0xbf,0x86,

0xdb,0xcf,0xe6,0xed,

0xfd,0x87,0xff,0xef}; //不带⼩数点的编码

void delay(uint z)//延时函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void dsreset(void) //18B20复位,初始化函数{

uint i;

ds=0;

i=103;

while(i>0)i--;

ds=1;

while(i>0)i--;

}

bit tempreadbit(void) //读1位函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

; DS18B20温度控制数码管显示(汇编非常详细)

*

;* 1、P1.6= → 进入设定温度报警值TL 状态:

*

;* L--20

*

;* 2、P1.6 → 进入设定温度报警值TH 状态:

*

;* H--28

*

;* 3、P1.6 → 返回

*

;* 4、设定过程:P1.4 →加键(UP),P1.5 →减键(DOWN),可快速调。* ;*

**

TIMER_L DATA 23H

TIMER_H DATA 24H

TIMER_COUN DATA 25H

TEMPL DATA 26H

TEMPH DATA 27H

TEMP_TH DATA 28H

TEMP_TL DATA 29H

TEMPHC DATA 2AH

TEMPLC DATA 2BH

TEMP_ZH DATA 2CH

BEEP EQU P3.7

DATA_LINE EQU P3.3

RELAY EQU P1.3

FLAG1 EQU 20H.0

FLAG2 EQU 20H.1

;-------------------------------------------------

K1 EQU P1.4

K2 EQU P1.5

K3 EQU P1.6

K4 EQU P1.7

;=================================================

ORG 0000H

JMP MAIN

ORG 000BH

AJMP INT_T0

;--------------------------------------------------

MAIN: MOV SP,#30H

MOV TMOD,#01H ;T0,方式1

MOV TIMER_L,#00H ;50ms定时值

MOV TIMER_H,#4CH

MOV TIMER_COUN,#00H ;中断计数

MOV IE,#82H ;EA=1,ET0=1

LCALL READ_E2

;LCALL RE_18B20

MOV 20H,#00H

SETB BEEP

SETB RELAY

MOV 7FH,#0AH ;熄灭符

CALL RESET ;复位与检测DS18B20

JNB FLAG1,MAIN1 ;FLAG1=0,DS18B20不存在

JMP START

MAIN1: CALL RESET

JB FLAG1,START

LCALL BEEP_BL ;DS18B20错误,报警

JMP MAIN1

START:

MOV A,#0CCH ; 跳过ROM匹配

CALL WRITE

MOV A,#044H ; 发出温度转换命令

CALL WRITE

CALL RESET

MOV A,#0CCH ; 跳过ROM匹配

CALL WRITE

MOV A,#0BEH ; 发出读温度命令

CALL WRITE

CALL READ ;读温度数据

CALL CONVTEMP

CALL DISPBCD

CALL DISP1

CALL SCANKEY

LCALL TEMP_COMP

JMP MAIN1

;=====================================================

;DS18B20 复位与检测子程序

;FLAG1=1 OK, FLAG1=0 ERROR

;======================================================

RESET:

SETB DA TA_LINE

NOP

CLR DATA_LINE

MOV R0,#64H ;主机发出延时600微秒的复位低脉冲

MOV R1,#03H

RESET1: DJNZ R0,$

MOV R0,#64H

DJNZ R1,RESET1

SETB DA TA_LINE ;然后拉高数据线

NOP

MOV R0,#25H

RESET2: JNB DA TA_LINE,RESET3 ;等待DS18B20回应

DJNZ R0,RESET2

JMP RESET4 ; 延时

RESET3: SETB FLAG1 ; 置标志位,表示DS1820存在

JMP RESET5

RESET4: CLR FLAG1 ; 清标志位,表示DS1820不存在

JMP RESET6

RESET5: MOV R0,#064H

DJNZ R0,$ ; 时序要求延时一段时间

RESET6: SETB DATA_LINE

RET

;===========================================================

;

;=========================================================== WRITE: MOV R2,#8 ;一共8位数据

CLR CY

WR1:

CLR DATA_LINE ;开始写入DS18B20总线要处于复位(低)状态

MOV R3,#09

DJNZ R3,$ ;总线复位保持18微妙以上

RRC A ;把一个字节DA TA 分成8个BIT环移给C

MOV DATA_LINE,C ;写入一个BIT

MOV R3,#23

DJNZ R3,$ ;等待46微妙

SETB DA TA_LINE ;重新释放总线

相关文档
最新文档