资源描述:
《DS18B20温度测量程序(汇编).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ORG0000H;单片机内存分配申明!TEMPER_LEQU29H;用于保存读出温度的低8位TEMPER_HEQU28H;用于保存读出温度的高8位FLAG1 EQU38H;是否检测到DS18B20标志位a_bit equ20h;数码管个位数存放内存位置b_bit equ21h;数码管十位数存放内存位置 ;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度;显示范围00到99度,显示精度为1度;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字
2、节就是实际测量获得的温度;这个转化温度的方法非常简洁无需乘于0.0625系数MAIN: LCALLGET_TEMPER;调用读温度子程序 MOVA,29H MOVC,40H;将28H中的最低位移入C RRCA MOVC,41H RRCA MOVC,42H RRCA MOVC,43H RRCA MOV29H,A LCALLDISPLAY;调用数码
3、管显示子程序 JNBFLAG1,MM1CLRP1.0SJMPMAINMM1: SETBP1.0 SJMPMAININIT_1820: SETBP2.2 ;这是DS18B20复位初始化子程序 NOP CLRP2.2 MOVR1,#3;主机发出延时537微秒的复位低脉冲TSR1: MOVR0,#107 DJNZR0,$ DJNZR1,TSR1 SETBP2.2;然后拉高数据线
4、 NOP NOP NOP MOVR0,#25HTSR2: JNBP2.2,TSR3;等待DS18B20回应 DJNZR0,TSR2 LJMPTSR4;延时TSR3: SETBFLAG1;置标志位,表示DS1820存在 LJMPTSR5TSR4: CLRFLAG1;清标志位,表示DS1820不存在 LJMPTSR7TSR5: MOVR0,#70TSR6: DJNZR0,TSR6;时序要
5、求延时一段时间TSR7: SETBP2.2 RETGET_TEMPER:SETBP2.2 ;读出转换后的温度值 LCALLINIT_1820;先复位DS18B20 JBFLAG1,TSS2 RET;判断DS1820是否存在?若DS18B20不存在则返回TSS2: MOVA,#0CCH;跳过ROM匹配 LCALLWRITE_1820 MOVA,#44H;发出温度转换命令 LCALLWRITE_1820
6、 LCALLDISPLAY ;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒 LCALLINIT_1820;准备读温度前先复位 MOVA,#0CCH;跳过ROM匹配 LCALLWRITE_1820 MOVA,#0BEH;发出读温度命令 LCALLWRITE_1820 LCALLREAD_18200;将读出的温度数据保存到35H/36H RETWRITE_1820:MOVR2,#8;写DS18B2
7、0的子程序(有具体的时序要求),一共8位数据 CLRCWR1: CLRP2.2 MOVR3,#5 DJNZR3,$ RRCA MOVP2.2,C MOVR3,#21 DJNZR3,$ SETBP2.2 NOP DJNZR2,WR1 SETBP2.2 RETREAD_18200:MOVR4,#