51单片机实验板DS18B20测温程序

发布者:开国古泉最新更新时间:2012-12-05 来源: 51hei关键字:51单片机  DS18B20  测温程序 手机看文章 扫描二维码
随时随地手机看文章

/***********************************************
** 实验名:51单片机实验板温度测量(DS18B20) 
** 创建人: 谢军洋
** 描 述:P3.7口输入,输出数据。
**------------------------------------------------------------------
** CPU:MCS-51
** 语言:汇编
** Fosc=12M
点击浏览下一页
此次试验的仿真图
***************************************************/

GE_BIT   EQU 30H
SHI_BIT  EQU 31H
BAI_BIT  EQU 32H
DI_8BIT  EQU 33H
GAO_8BIT EQU 34H
DQ       EQU P3.7
ORG 0000H
LJMP START
ORG 0020H
START:
      MOV SP,#60H
    LCALL ZHUANHUAN ;调用读温度子程序
   LCALL CHULI
      LCALL DISPLAY ;调用数码管显示子程序
   LJMP START

;-------------------------------------------------
;这是DS18B20复位初始化子程序
INIT_1820:
       SETB DQ
          NOP
       CLR DQ ;主机发出延时537微秒的复位低脉冲
       MOV R1,#3
DU_1:
     MOV R0,#107
  DJNZ R0,$
  DJNZ R1,DU_1
  SETB DQ ;然后拉高数据线
  NOP
  NOP
  NOP
  MOV R0,#25H
DU_2:JNB DQ,DU_3 ;等待DS18B20回应
  DJNZ R0,DU_2
  LJMP DU_4 ;延时
DU_3:SETB F0   ;置标志位,表示DS1820存在
  LJMP DU_5
DU_4:CLR F0   ;清标志位,表示DS1820不存在
  LJMP DU_7
DU_5:MOV R0,#117
DU_6:DJNZ R0,DU_6 ;时序要求延时一段时间
DU_7:SETB DQ
  RET [page]
;-------------------------------------------------
;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:MOV R2,#8 ;一共8位数据
        CLR C
WR1:CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET

;-------------------------------------------------
;读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_1820:MOV R4,#2     ;将温度高位和低位从DS18B20中读出
       MOV R1,#DI_8BIT ;低位存入DI_8BIT,高位存入GAO_8BIT
RE0:MOV R2,#8             ;数据一共有8位
RE1:CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
RE2:DJNZ R3,RE2
MOV C,DQ
MOV R3,#23
RE3:DJNZ R3,RE3
RRC A
DJNZ R2,RE1
MOV @R1,A
INC R1
DJNZ R4,RE0
/* DEC R1
MOV A,GAO_8BIT
XCHD A,@R1
XCH A,@R1
MOV GAO_8BIT,A
MOV A,@R1
SWAP A
MOV @R1,A  */
RET    
;-------------------------------------------------
;读出后转换的温度值
ZHUANHUAN:
       //SETB DQ
       LCALL INIT_1820 ;先复位DS18B20
       JB F0,ZH1
       RET ;判断DS1820是否存在?若DS18B20不存在则返回
ZH1:MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令
LCALL WRITE_1820
LCALL DISPLAY ;等待AD转换结束,12位的话750微秒
LCALL INIT_1820 ;准备读温度前先复位
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令
LCALL WRITE_1820
LCALL READ_1820
RET  
;-------------------------------------------------
;数据处理子程序
CHULI:
      MOV P0,GAO_8BIT
   MOV P2,DI_8BIT
      MOV A,GAO_8BIT
   JB ACC.7,FU
      MOV A,DI_8BIT
   MOV  B,#16
   DIV  AB
      
   MOV 35H,A ;将DI_8BIT的高四位右移四位,存入35H中(温度值)
      MOV A,B ;将TEMPER_L的低四位X10/16得小数后一位数.
   MOV B,#10
   MUL AB
   MOV B,#16
   DIV AB
   MOV 36H,A ;将小数后一位数.存入36H中
   MOV A,GAO_8BIT ;TEMPER_H中存放高8位数,权重16
   MOV B,#16
   MUL AB
   ADD A,35H ;35H中存入温度值的整数部分
   MOV B,#10
   DIV AB
   MOV GE_BIT,B ;个位存入30H中
   MOV B,#10 ;
   DIV AB ;
   MOV SHI_BIT,B ;十位存入31H中
   MOV B,#10 ;
   DIV AB ;
   MOV BAI_BIT,B ;百位存入32H中
   MOV A,GAO_8BIT
   MOV 37H,#10H ;
   JB ACC.7,EXIT
   MOV 37H,#00H
   SJMP EXIT
   FU:
      MOV A,DI_8BIT
      CPL A
   ADD A,#1
   MOV B,#16
   DIV AB
      MOV 35H,A ;将DI_8BIT的高四位右移四位,存入35H中(温度值)
      MOV A,B ;将TEMPER_L的低四位X10/16得小数后一位数.
   MOV B,#10
   MUL AB
   MOV B,#16
   DIV AB
  // MOV 36H,A ;将小数后一位数.存入36H中
  // MOV A,GAO_8BIT ;TEMPER_H中存放高8位数,权重16
   MOV B,#16
   MUL AB
   ADD A,35H ;35H中存入温度值的整数部分
   MOV B,#10
   DIV AB
   MOV GE_BIT,B ;个位存入30H中
   MOV B,#10 ;
   DIV AB ;
   MOV SHI_BIT,B ;十位存入31H中
   MOV B,#10 ;
   DIV AB ;
   MOV BAI_BIT,B ;百位存入32H中
   MOV A,GAO_8BIT
   MOV 37H,#10H ;
   JB ACC.7,EXIT
   MOV 37H,#00H
   SJMP EXIT
EXIT:RET   [page]
;-------------------------------------------------
;注:此次ds18b20温度测量实验在51hei单片机实验板http://www.51hei.com上进行,测试一切ok,下面是数据显示子程序
CL0:INC A
AJMP  CL1
CHULI:MOV A,DI_8BIT
  MOV  B,#16
  DIV  AB
  JB B.3,CL0
CL1:MOV 35H,A ;将DI_8BIT的高四位右移四位,存入35H中(温度值)
MOV A,B ;将TEMPER_L的低四位X10/16得小数后一位数.
MOV B,#10
MUL AB
MOV B,#16
DIV AB
MOV 36H,A ;将小数后一位数.存入36H中
MOV A,GAO_8BIT ;TEMPER_H中存放高8位数,权重16
MOV B,#16
MUL AB
ADD A,35H ;35H中存入温度值的整数部分
MOV B,#10
DIV AB
MOV GE_BIT,B ;个位存入30H中
MOV B,#10 ;
DIV AB ;
MOV SHI_BIT,B ;十位存入31H中
MOV B,#10 ;
DIV AB ;
MOV BAI_BIT,B ;百位存入32H中
MOV A,GAO_8BIT
MOV 37H,#10H ;
JB ACC.7,EXIT
MOV 37H,#00H
EXIT: RET           */  

DISPLAY:MOV DPTR,#TABLE
        MOV R0,#4
    XUN:MOV R1,#250 ;显示1000次    
   HUAN:MOV A,#10   //显示‘-’
     MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.0
  LCALL DELAY1MS
  SETB P3.0
    
  MOV A,#10   //显示‘-’
  MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.1
  LCALL DELAY1MS
  SETB P3.1
    
  MOV A,BAI_BIT   //显示温度百位
     MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.2
  LCALL DELAY1MS
  SETB P3.2
  MOV A,SHI_BIT   //显示温度十位
     MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.3
  LCALL DELAY1MS
  SETB P3.3
  MOV A,GE_BIT   //显示温度个位
     MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.4
  LCALL DELAY1MS
  SETB P3.4
    
  MOV A,#11    //显示\'C\'
     MOVC A,@A+DPTR
        MOV P1,A
  CLR P3.5
  LCALL DELAY1MS
  SETB P3.5
    
  MOV A,#10   //显示‘-’
  MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.6
  LCALL DELAY1MS
  SETB P3.6
    
/* MOV A,#10   //显示‘-’
  MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.7
  LCALL DELAY1MS
  SETB P3.7  */
  DJNZ R1,HUAN ;250次没完循环
     DJNZ R0,XUN ;4个250次没完循环
   RET  
  
DELAY10MS:MOV R7,#1     //延时10MS子程序
       L1:NOP
    DJNZ R7,L1
DELAY1MS:RET    
    
TABLE:DB 3FH ;0
   DB 06H ;1
      DB 5BH ;2
   DB 4FH ;3
   DB 66H ;4
   DB 6DH ;5
   DB 7DH ;6
   DB 07H ;7
   DB 7FH ;8
   DB 6FH ;9
   DB 01000000B ;-
   DB 39H ;C    
END

关键字:51单片机  DS18B20  测温程序 引用地址:51单片机实验板DS18B20测温程序

上一篇:51单片机频率计程序(4位不带小数点)
下一篇:单片机驱动16*16点阵LED汉字显示c51程序

推荐阅读最新更新时间:2024-03-16 13:14

51单片机定时计数器控制LED1s闪烁一次
#include reg51.h //头文件 sbit LED=P2^0;//位定义LED灯 void Timer0()//使用定时计数器所做的处理函数,用做定时器 { TMOD=0x01;//定时器0,方式1 TH0=0xFC;//定时1ms的初值 TL0=0x18;//定时1ms的初值 ET0=1;//打开定时计数器0使能控制位 EA=1;//打开总中断 TR0=1;//打开定时计数器0的启动控制位 } void main()//主函数 { Timer0();//调用函数 while(1); } void ledxs()interrupt 1//中断执行内容函数,用定时器
[单片机]
手把手教学51单片机 | 1602液晶
像这种含有芯片的元器件,最重要的是去学习怎样学会看懂这个芯片的引脚功能,而不是去背诵这个芯片的语句,不同厂家的同款元器件还有微小的差异,所以购买这种东西的时候,要向厂家索要一份芯片手册,看着手册设计程序或是电路。 1602液晶 1602:16意思是一行能显示16个字符,02表示一共有两行 只能显示数字和字符 写数据时序图 RS 低电平就是选择数据,高电平就是选择指令 RW 高电平就是读,低电平就是写 E是使能信号,发出高低脉冲 按照时序图,先写指令(数据),延迟,给脉冲 写指令(数据) 先选择写指令,然后把P0口赋值,接下来就是按照时序图的指示写程序啦。写数据也是一样的 就不展开了。 void write
[单片机]
手把手教学<font color='red'>51单片机</font> | 1602液晶
51单片机的cpu主要由什么组成_51单片机的字长是多少
  51单片机的cpu主要由什么组成   51单片机的cpu主要组成部分有中央处理器( CPU )、内部数据存储器( RAM)、内部程序存储器( ROM)、定时器/计数器、并行I/0口、口、中断控制系统、定时与控制部件。   单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到-块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。  
[单片机]
基于C语言51单片机电子密码锁的设计与仿真
  0、引言   电子密码锁是现代生活中常用的加密工具。它克服了机械式密码锁密码量少、安全性能差的缺点,尤其是的智能电子密码锁;不仅具有电子密码锁的功能”还可引人智能化管理功能,从而使密码锁具有更离的安全性和可靠性。   电子密码锁通常使用ARM和单片机控制,单片机相对ARM实现较为简单,功能较为完善,因此使用单片机控制较多。用单片机控制的窖码锁常使用汇编语言编写程序,显示器多数用。而本文所介绍的电子密犸锁使用移植性及可读性强的高级语言C语言编写,便于修改和增减功能蚤同时采用显示清楚数码管,功率消耗小而且寿命长的 液晶显示器,显示更加直观,使用更加方便。从经济实用的角度出发,采用STC89C52单片机设计出一种具有密码设置、报
[单片机]
基于C语言<font color='red'>51单片机</font>电子密码锁的设计与仿真
51单片机C语言教程(七) 表达式1
上课到这一课相隔了好长一段时间,这些日子里收到不少网友的来信支持和鼓励,要求尽快完成余下的部分。出门在外的人不得不先为吃饭而努力,似乎这也成为我的借口,以后每晚抽空打一些吧这样大家也就可以不用隔太久就能看到一些新东西。或许我的笔记并不是很正确,但我尽量的保证每课的实验都会亲自做一次,包括硬件的部分,已求不会误人子弟。 随着访问量不断的增加,网站已启用了www.cdle.net的国际域名,在这里我感谢各位一直支持磁动力工作室的朋友,更要感激身在远方一直默默支持我的女友。                     明浩 2003-7-14 晚   呵,费话少说了。上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧。这个语句
[单片机]
<font color='red'>51单片机</font>C语言教程(七) 表达式1
基于AT89C51单片机实现串行总线芯片测试实验平台的设计
应用串行接口芯片扩展系统时,在初步选择了串行接口的芯片后,为了对芯片的资源更好地了解,开发者一般在系统设计前搭建一个简单的硬件电路并编制相应的软件对其测试,待性能验证后再确定最终的设计方案。本文根据这一需要设计了一个用于串行总线芯片测试的实验平台。该平台以PC机为人机接口、采用单片机产生芯片串行通信时序。应用这一平台可以大大简化芯片使用前的测试过程。这一平台也为单片机串行扩展的初学者提供了快捷的学习工具。本平台目前集成了SPI、One-wire、Microware、I2C四种串行接口,在今后的使用中,可根据需要增加串行接口的种类。 1 串行扩展平台的结构 SPI、One-wire、Microware、I2C是目前单片机应用系统
[单片机]
基于AT89C<font color='red'>51单片机</font>实现串行总线芯片测试实验平台的设计
怎么去设计一种基于51单片机的便携式恒温箱
一、功能简介 本项目使用Proteus8.12仿真51单片机控制器,使用报警模块、LCD1602显示模块、DS18B20温度模块、加热制冷模块、按键模块、HC05蓝牙模块等。 主要功能: 系统运行后,LCD1602显示传感器检测的温度值; 可通过按键K3设置恒定温度,K1和K2进行加减调节,恒定温度范围是0-10,设定好后可再次按下K3保存。系统会根据当前温度与目标温度比对,通过PID算法控制加热或制冷工作。若温度高于报警上限或低于报警下限值则蜂鸣器报警。检测温度会实时将数据通过串口传输到手机终端显示。 主要功能如下: (1)温度实时检测; (2)LCD1602液晶显示; (3)手机终端显示; (4
[单片机]
怎么去设计一种基于<font color='red'>51单片机</font>的便携式恒温箱
基于89C51单片机的环境噪声测量仪
   1 引 言      环境噪声监测,是人类提高生活质量,加强环境保护的一个重要环节,在各大城市的繁华街区和居民区,已有大型环境噪声显示器竖立街头。但目前国内的便携式噪声测试仪,多为价格昂贵的进口专用设备,除卫生、计量等环保专业部门拥有外,无法作为民用品推广普及。本文介绍一种以89C51单片机为核心,采用V/F转换技术构成的低成本、便携式数字显示环境噪声测量仪。该仪器工作稳定、性能良好,经校验定标后能满足一般民用需要,可广泛应用于工矿企业、机关、学校等需要对环境噪声进行测量和控制的场合。 2 声压级的测量机理   人耳的听阈一般是20μPa,痛阈一般是200 Pa,其间相差107倍,这样宽广的声压范围很不易测量,
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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