资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
ORG 0000H ;DS18B20.ASM 0-125 度的温度计 原创:陈永飞 QQ:49204743 地址:江苏省南京市TEMPER_L EQU 41H ;用于保存读出温度的低 8 位 信箱:baiyni888163.comTEMPER_H EQU 40H ;用于保存读出温度的高 8 位FLAG1 EQU 38H ;是否检测到 DS18B20 标志位A_BIT1 EQU 31H ;数码管个位数存放内存位置B_BIT1 EQU 32H ;数码管十位数存放内存位置D_BIT1 EQU 35H ;数码管百位数存放内存位置DQ EQU P3.2 ;30H,31H,32H,33H: X 个位 十位 XMOD7: MOV SP,#60HLCALL GET_TEMPER ;调用读温度子程序LCALL TEMPCOVLCALL JDQGZLCALL DISPLAY ;调用数码管显示子程序AJMP MOD7TEMP0: INC AAJMP TEMP1TEMPCOV: MOV A,TEMPER_L ;数据处理子程序 TEMPCOVMOV B,#16DIV ABJB B.3,TEMP0TEMP1: MOV 34H,A ;将 TEMPER_L 的高四位右移四位,存入 34H 中(温度值)MOV A,B ;将 TEMPER_L 的低四位 X10/16 得小数后一位数.MOV B,#10MUL ABMOV B,#16DIV ABMOV 30H,A ;将小数后一位数.存入 30H 中MOV A,TEMPER_H ;TEMPER_H 中存放高 8 位数,权重 16MOV B,#16MUL ABADD A,34H ;34H 中存入温度值的整数部分MOV B,#10DIV ABMOV 31H,B ;个位存入 31H 中MOV B,#10 ;DIV AB ;MOV 32H,B ;十位存入 32H 中MOV B,#10 ;DIV AB ;MOV 35H,B ;百位存入 33H 中MOV A,TEMPER_HMOV 33H,#10H ;JB ACC.7,EXIT7MOV 33H,#00HEXIT7: RETINIT_1820: ;这是 DS18B20 复位初始化子程序SETB DQNOPCLR DQ ;主机发出延时 537 微秒的复位低脉冲MOV R1,#3TSR1: MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB DQ ;然后拉高数据线NOPNOPNOPMOV R0,#25HTSR2: JNB DQ,TSR3 ;等待 DS18B20 回应DJNZ R0,TSR2LJMP TSR4 ;延时TSR3: SETB FLAG1 ;置标志位,表示 DS1820 存在LJMP TSR5TSR4: CLR FLAG1 ;清标志位,表示 DS1820 不存在LJMP TSR7TSR5: MOV R0,#117TSR6: DJNZ R0,TSR6 ;时序要求延时一段时间TSR7: SETB DQRET;-GET_TEMPER: ;读出转换后的温度值SETB DQLCALL INIT_1820 ;先复位 DS18B20JB FLAG1,TSS2RET ;判断 DS1820 是否存在?若 DS18B20 不存在则返回TSS2: MOV A,#0CCH ;跳过 ROM 匹配LCALL WRITE_1820MOV A,#44H ;发出温度转换命令LCALL WRITE_1820LCALL DISPLAY ;等待 AD 转换结束,12 位的话 750 微秒LCALL INIT_1820 ;准备读温度前先复位MOV A,#0CCH ;跳过 ROM 匹配LCALL WRITE_1820MOV A,#0BEH ;发出读温度命令LCALL WRITE_1820LCALL READ_18200 ;将读出的温度数据保存到 35H/36HRET;写 DS18B20 的子程序(有具体的时序要求)WRITE_1820: MOV R2,#8 ;一共 8 位数据CLR CWR1: CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET;读 DS18B20 的程序,从 DS18B20 中读出两个字节的温度数据READ_18200: MOV R4,#2 ;将温度高位和低位从 DS18B20 中读出MOV R1,#TEMPER_L ;低位存入 TEMPER_L(TEMPER_L),高位存入(TEMPER_H)RE00: MOV R2,#8 ;数据一共有 8 位RE01: CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#9RE10: DJNZ R3,RE10MOV C,DQMOV R3,#23RE20: DJNZ R3,RE20RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00RET;显示子程序DISPLAY: MOV DPTR,#TAB ;指定查表启始地址MOV R0,#4DPL1: MOV R1,#250 ;显示 1000 次DPLOP: MOV A,A_BIT1 ;取个位数MOVC A,A+DPTR ;查个位数的 7 段代码MOV P1,A ;送出个位的 7 段代码CLR P3.7 ;开个位显示ACALL D1MS ;显示 1MSSETB P3.7MOV A,B_BIT1 ;取十位数MOVC A,A+DPTR ;查十位数的 7 段代码MOV P1,A ;送出十位的 7 段代码CLR P3.5 ;开十位显示ACALL D1MS ;显示 1MSSETB P3.5MOV A,D_BIT1 ;取百位数MOVC A,A+DPTR ;查百位数的 7 段代码MOV P1,A ;送出百位的 7 段代码CLR P3.4 ;开百位显示ACALL D1MS ;显示 1MSSETB P3.4MOV P1,#00HDJNZ R1,DPLOP ;100 次没完循环DJNZ R0,DPL1 ;4 个 100 次没完循环RETJDQGZ:MOV R7,34H ;34H 为温度的整数位.MOV A,#10 ;这里以 10 度为例,若高于 10 度,刚开启继电器SUBB A,R7 ;10 度减当前温度.JC KAI ;如果高于 10 度,则 KAISETB P3.3 ;关闭,P3.3 接 PNP 三极管AJMP JDQFHKAI: CLR P3.3JDQFH: RET;1MS 延时(按 12MHZ 算)D1MS: MOV R7,#0FFHDJNZ R7,$; DJNZ R7,$RET;实验板上的 7 段数码管 09 数字的共阴显示代码TAB: DB 07DH;0DB 018H;1DB 06EH;2DB 03EH;3DB 01BH;4DB 037H;5DB 077H;6DB 01CH;7DB 07FH;8DB 03FH;9END
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号