数字温度计Word文档下载推荐.docx
《数字温度计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字温度计Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
![数字温度计Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/9/8144b721-de7c-40db-92ae-f8bbcb2f2c07/8144b721-de7c-40db-92ae-f8bbcb2f2c071.gif)
ORG0013H
LJMPINT01
ORG0050H
START:
MOV20H,#00H;
设20H为模式单元,
为00H时循环显示,
为0FFH时指定显示
MOV2AH,#01H;
2AH单元中存指定显示的路数(ZD)
MOVIE,#85H;
允许外部中断0,1中断
SETBIT0;
设外部中断0为下降沿触发
SETBIT1;
设外部中断1为下降沿触发
MOVSP,#60H
MOV40H,#0AH
MOV41H,#0AH
MOV42H,#0AH
MOV43H,#0AH
KSH:
MOVA,20H
CJNEA,#00H,ZHIDING;
为指定显示,
转ZHIDING程序段
LCALLGETTEMP1;
为循环显示,
;
调显示第一路子程序
CJNEA,#00H,ZHIDING
LCALLGETTEMP2;
显示完第一路后,
调显示第二路子程序
LJMPKSH;
循环显示完第一路、第二
路后,转回开始(KSH)
ZHIDING:
MOVA,2AH;
为指定显示,从42H单元
中取要显示的路数
CJNEA,#01H,DIER;
不第一路,转DIER(第二)
是第一路,
显示完指定的第一路后,
转回开始(KSH)
DIER:
是第二路,
显示完指定的第二路后,
GETTEMP1:
;
显示第一路子程序
LCALLINI1;
DS18B20初始化
MOVA,#0CCH;
发SKIPROM命令(跳过ROM
命令,单点测温度时,执行
此命令跳过ROM来节省访问时间)
LCALLWRITE1
MOVA,#44H;
发开始温度转换命令
LCALLINI1
发SKIPROM命令
MOVA,#0BEH;
发读存储器命令(读的字节
暂存存储器命令,
在此命令后进行读操作)
LCALLREAD1;
读出已转换的温度值低字节
MOV2BH,A
读出已转换的温度值高字节
MOV2CH,A
LCALLERSH;
二进制转化成十进制
MOVR2,#200;
给R2赋值200
MOV40H,#1
KJ1:
MOVR1,#40H;
显示路数,从40H单元中开始取值
LCALLDISPL;
调用动态显示的子程序
CJNEA,#00H,BACK1;
为指定显示,转ZHIDING程序段
DJNZR2,KJ1;
重复显示第一路200次
BACK1:
RET
GETTEMP2:
显示第二路子程序
LCALLINI2
发SKIPROM命令
LCALLWRITE2
发开始温度转换命令
LCALLWRITE2
LCALLINI2
发读存储器命令
LCALLREAD2;
读出已转换的温度值
LCALLREAD2
LCALLERSH
MOVR2,#200
MOV40H,#2
KJ2:
显示第二路温度值,
从40H单元中开始取值
LCALLDISPL
CJNEA,#00H,BACK2;
DJNZR2,KJ2
BACK2:
************第一个DS18B20初始化子程序****************
INI1:
第一个DS18B20初始化子程序
L01:
CLRP3.0
L11:
CLRP3.0
DJNZR2,L11;
主机发置位脉冲
持续3μs*200=600μs
SETBP3.0;
主机释放总线控制P1.6口改为输入口
MOVR2,#30
L41:
DJNZR2,L41;
DS18B20等待2μs*30=60μs
CLRC
ORLC,P3.0;
DS18B20数据线应变低
JCL01;
DS18B20没准备好,重来
MOVR3,#80
L51:
ORLC,P3.0
JCL31;
DS18B20数据线变高,初始化成功
DJNZR3,L51;
DS18B20数据线低电平状态
可持续3μs*80=240μs
SJMPL01;
初始化失败,重来
L31:
MOVR2,#240
L21:
DJNZR2,L21;
DS18B20应答过程最少
2μs*240=480μs
***************************************************
写第一个DS18B20子程序
WRITE1:
第一个写DS18B20子程序
MOVR3,#8
WR11:
保证了连续写2位间的间隙大于1μs
MOVR4,#8
RRCA
WR21:
DJNZR4,WR21;
DS18B20在数据线变低后
2μs*8=16μs开始采样数据
MOVP3.0,C;
将命令字从低位开始按位依
次送给DS18B20
MOVR4,#20
WR31:
DJNZR4,WR31;
保证整个写过程持续2μs*20=40μs
DJNZR3,WR11;
送完整个命令字
SETBP3.0
************************************************
读第一个DS18B20子程序
READ1:
第一个读DS18B20子程序
RE11:
MOVR4,#4
NOP;
低电平持续2μs
P1.6口设为输入口
RE21:
DJNZR4,RE21;
等待2μs*4=8μs
MOVC,P3.0;
主机(从低位开始)按位读入DS18B20的数据
RRCA;
数据逐位(先低位后高位)送入A
MOVR5,#30
RE31:
DJNZR5,RE31;
保证读数据过程持续2μs*30=60μs
DJNZR3,RE11;
读完整个转换值(不包括符号位)并存入21H中,并且
*************************************************
第二个DS18B20初始化程序
INI2:
L02:
CLRP3.1
L12:
DJNZR2,L12
SETBP3.1
L42:
DJNZR2,L42
ORLC,P3.1
JCL02
MOVR6,#80
L52:
JCL32
DJNZR6,L52
SJMPL02
L32:
L22:
DJNZR2,L22
***********************************************
写第二个DS18B20子程序
**********************************************
WRITE2:
CLREA
WR12:
WR22:
DJNZR4,WR22
MOVP3.1,C
WR32:
DJNZR4,WR32
DJNZR3,WR12
读第二个DS18B20子程序
READ2:
MOVR6,#8
RE12:
NOP
RE22:
DJNZR4,RE22
MOVC,P3.1
RE32:
DJNZR5,RE32
DJNZR6,RE12
判断是否为负数
温度精度转换
ERSH:
MOVA,2CH;
把温度的高字节给了A
RLCA
JCBB;
温度为负转变补(BB1)程序段
MOVR7,#0FFH;
温度为正不点亮
ZHCH:
MOVA,2BH;
屏蔽温度低字节的小数位
ANLA,#0F0H
SWAPA
MOV2DH,A
屏蔽温度高字节的符号位
ANLA,#07H
SWAPA
ADDA,2DH
CFZH:
MOVB,#10
DIVAB
MOV41H,B;
41H中为个位
MOVB,#10
MOV42H,B;
42H中存放十位
ESHD:
低精度二十进制转换小数处理程序
JBACC.3,JF1;
小数十分位为1,则跳转到JF1
MOV43H,#00H
JF1:
MOV43H,#05H;
43H中存放的是小数
BB:
MOVR7,#0BFH;
是负数让第一个数码管显示为“-”
负数补码求补
CPLA
ADDA,#1
MOV2BH,A;
负温度低字节求补后送2BH
MOVA,2CH
ADDCA,#0
MOV2CH,A;
负温度高字节求补后送2CH
LJMPZHCH;
负数求补后转到ZHCH
********************************************************
显示子程序
*********************************************************
DISPL:
MOVDPTR,#CSTAB;
字段码表首址送DPTR
MOVR1,#40H
MOVA,#0FFH;
关闭段选
MOVP1,A
SETBP3.4;
138A脚置1,关闭所有位码
SETBP3.5;
138B脚置1
SETBP3.7;
138C脚置1
DISPL1:
MOVA,R7;
取显示的正负号
MOVP1,A;
发送字段代码
CLRP3.4;
选第一个数码管,即Y6为0
ACALLDL2MS
MOVA,@R1;
取显示缓冲区地址指针
ANLA,#0FH
MOVCA,@A+DPTR;
显示路数
CLRP3.5;
Y5=0
CLRP3.7
SETBP3.4
SETBP3.5
INCR1
MOVA,@R1
MOVCA,@A+DPTR
ANLA,#7FH
MOVP1,A
CLRP3.4;
Y3=0
CLRP3.5
CLRP3.7
ACALLDL2MS;
个位
SETBP3.7
SETBP3.5
INCR1
MOVCA,@A+DPTR
CLRP3.7;
Y4=0
CLRP3.5
十位
SETBP3.4
SETBP3.7
CLRP3.4
CLRP3.7;
Y2=0
小数
CSTAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H;
字段表显示
DB82H,0F8H,80H,90H,0FFH;
0,1,2,3,4,5,6,7,8,9,空
DL2MS:
CPLPSW.4
MOVR3,#02H;
2ms延时
DL2MS1:
MOVR4,#0FFH
DL2MS2:
DJNZR4,DL2MS2
DJNZR3,DL2MS1
**************************************************
外部中断0服务子程序
INT00:
CLREA;
外部中断0服务子程序
PUSHPSW
PUSHACC
MOVA,R2
MOVA,R5
MOVR5,#40
DEL10MS:
MOVR2,#125;
延时40*2μS*125=10MS,防抖动
DJNZR2,$
DJNZR5,DEL10MS
MOV20H,#0FFH
MOV2AH,#01H
SETBEA
POPACC
MOVR5,A
MOVR2,A
POPPSW
RETI
外部中断1服务子程序
INT01:
外部中断1服务子程序
DE10mS:
MOVR2,#125
DJNZR2,$;
DJNZR5,DE10mS
MOV20H,#0FFH
MOV2AH,#02H
SETBEA
RETI
END
四、成品调试
4.1故障
第一次接电源后,数码管没有亮;
第二次接通后,数码管显示不正常。
初步判定为虚焊。
4.2分析与排除
数码管没有亮,隔一段时间触摸各个器件,器件没有发热,说明没有正常工作。
原因很多。
经过对成品的验证、查看三实验手册,以及与其他人的共同探讨,发现原来是没有下载程序。
下载程序后,数码管有示数。
数码管显示不正常,虚焊的原因是首当其冲的。
仔细检查电路焊接处,贴片电阻有一个没有焊接,是只是点了一点锡。
对焊接处继续加工后接电源,显示正常。
用手紧捏温度传感器电阻,示数变化并接近体温。
说明实验成功。
五、总结
********************************************************************************************************************************************************************************