DS18B20温度测量程序(汇编)(共5页)_第1页
DS18B20温度测量程序(汇编)(共5页)_第2页
DS18B20温度测量程序(汇编)(共5页)_第3页
DS18B20温度测量程序(汇编)(共5页)_第4页
DS18B20温度测量程序(汇编)(共5页)_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ORG 0000H;单片机内存分配申明!TEMPER_L EQU 29H;用于保存读出温度的低8位TEMPER_H EQU 28H;用于保存读出温度的高8位FLAG1 EQU 38H;是否检测到DS18B20标志位a_bit equ 20h ;数码管个位数存放内存位置b_bit equ 21h ;数码管十位数存放内存位置;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度;显示范围00到99度,显示精度为1度;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的

2、温度;这个转化温度的方法非常简洁无需乘于0.0625系数MAIN: LCALL GET_TEMPER;调用读温度子程序 MOV A,29H MOV C,40H;将28H中的最低位移入C RRC A MOV C,41H RRC A MOV C,42H RRC A MOV C,43H RRC A MOV 29H,A LCALL DISPLAY;调用数码管显示子程序 JNB FLAG1,MM1CLR P1.0SJMP MAINMM1: SETB P1.0 SJMP MAININIT_1820: SETB P2.2 ; 这是DS18B20复位初始化子程序 NOP CLR P2.2 MOV R1,#3

3、;主机发出延时537微秒的复位低脉冲TSR1: MOV R0,#107 DJNZ R0,$ DJNZ R1,TSR1 SETB P2.2 ;然后拉高数据线 NOP NOP NOP MOV R0,#25HTSR2: JNB P2.2,TSR3 ;等待DS18B20回应 DJNZ R0,TSR2 LJMP TSR4 ; 延时TSR3: SETB FLAG1 ; 置标志位,表示DS1820存在 LJMP TSR5TSR4: CLR FLAG1 ; 清标志位,表示DS1820不存在 LJMP TSR7TSR5: MOV R0,#70TSR6: DJNZ R0,TSR6 ; 时序要求延时一段时间TSR7

4、: SETB P2.2 RETGET_TEMPER: SETB P2.2 ; 读出转换后的温度值 LCALL INIT_1820;先复位DS18B20 JB FLAG1,TSS2 RET ; 判断DS1820是否存在?若DS18B20不存在则返回TSS2: MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 LCALL DISPLAY ;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒 LCALL INIT_1820;准备读温度前先复位 MOV A,#0CCH

5、; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200; 将读出的温度数据保存到35H/36H RETWRITE_1820: MOV R2,#8;写DS18B20的子程序(有具体的时序要求),一共8位数据 CLR CWR1: CLR P2.2 MOV R3,#5 DJNZ R3,$ RRC A MOV P2.2,C MOV R3,#21 DJNZ R3,$ SETB P2.2 NOP DJNZ R2,WR1 SETB P2.2 RETREAD_18200: MOV R4,#2 ; 读D

6、S18B20的程序,从DS18B20中读出两个字节的温度数据,将温度高位和低位从DS18B20中读出 MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00: MOV R2,#8;数据一共有8位RE01: CLR C SETB P2.2 NOP NOP CLR P2.2 NOP NOP NOP SETB P2.2 MOV R3,#8RE10: DJNZ R3,RE10 MOV C,P2.2 MOV R3,#21RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV R1,A DEC R1 DJNZ R4,RE00

7、RETdisplay: mov a,29H;显示子程序将29H中的十六进制数转换成10进制 mov b,#10 ;10进制/10=10进制 div ab mov b_bit,a ;十位在a mov a_bit,b ;个位在b mov dptr,#numtab ;指定查表启始地址 mov r0,#4dpl1: mov r1,#250 ;显示1000次dplop: mov a,a_bit ;取个位数 MOVC A,A+DPTR ;查个位数的7段代码 mov p0,a ;送出个位的7段代码 clr p2.6 ;开个位显示 acall d1ms ;显示1ms setb p2.6 mov a,b_bit ;取十位数 MOVC A,A+DPTR ;查十位数的7段代码 mov p0,a ;送出十位的7段代码 clr p2.7 ;开十位显示 acall d1ms ;显示1ms setb p2.7 djnz r1,dplop ;100次没完循环 djnz r0,dpl1 ;4个100次没完循环 retD1MS: MOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论