您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > DS18B20温度传感器的使用方法
这是关于DS18B20的读写程序,数据脚P2.2,晶振11.0592mhz;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒;可以将检测到的温度直接显示到AT89C51的两个数码管上;显示温度00到99度,很准确无需校正!ORG0000H;单片机内存分配申明!TEMPER_LEQU29H;用于保存读出温度的低8位TEMPER_HEQU28H;用于保存读出温度的高8位FLAG1EQU38H;是否检测到DS18B20标志位a_bitequ20h;数码管个位数存放内存位置b_bitequ21h;数码管十位数存放内存位置MAIN:LCALLGET_TEMPER;调用读温度子程序;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度;显示范围00到99度,显示精度为1度;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度;这个转化温度的方法可是我想出来的哦~~非常简洁无需乘于0.0625系数MOVA,29HMOVC,40H;将28H中的最低位移入CRRCAMOVC,41HRRCAMOVC,42HRRCAMOVC,43HRRCAMOV29H,ALCALLDISPLAY;调用数码管显示子程序CPLP1.0AJMPMAIN;这是DS18B20复位初始化子程序INIT_1820:SETBP2.2NOPCLRP2.2;主机发出延时537微秒的复位低脉冲MOVR1,#3TSR1:MOVR0,#107DJNZR0,$DJNZR1,TSR1SETBP2.2;然后拉高数据线NOPNOPNOPMOVR0,#25HTSR2:JNBP2.2,TSR3;等待DS18B20回应DJNZR0,TSR2LJMPTSR4;延时TSR3:SETBFLAG1;置标志位,表示DS1820存在CLRP1.7;检查到DS18B20就点亮P1.7LEDLJMPTSR5TSR4:CLRFLAG1;清标志位,表示DS1820不存在CLRP1.1LJMPTSR7TSR5:MOVR0,#117TSR6:DJNZR0,TSR6;时序要求延时一段时间TSR7:SETBP2.2RET;读出转换后的温度值GET_TEMPER:SETBP2.2LCALLINIT_1820;先复位DS18B20JBFLAG1,TSS2CLRP1.2RET;判断DS1820是否存在?若DS18B20不存在则返回TSS2:CLRP1.3;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!MOVA,#0CCH;跳过ROM匹配LCALLWRITE_1820MOVA,#44H;发出温度转换命令LCALLWRITE_1820;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALLDISPLAYLCALLINIT_1820;准备读温度前先复位MOVA,#0CCH;跳过ROM匹配LCALLWRITE_1820MOVA,#0BEH;发出读温度命令LCALLWRITE_1820LCALLREAD_18200;将读出的温度数据保存到35H/36HCLRP1.4RET;写DS18B20的子程序(有具体的时序要求)WRITE_1820:MOVR2,#8;一共8位数据CLRCWR1:CLRP2.2MOVR3,#5DJNZR3,$RRCAMOVP2.2,CMOVR3,#21DJNZR3,$SETBP2.2NOPDJNZR2,WR1SETBP2.2RETREAD_18200:;读DS18B20的程序,从DS18B20中读出两个字节的温度数据MOVR4,#2;将温度高位和低位从DS18B20中读出MOVR1,#29H;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOVR2,#8;数据一共有8位RE01:CLRCSETBP2.2NOPNOPCLRP2.2NOPNOPNOPSETBP2.2MOVR3,#8RE10:DJNZR3,RE10MOVC,P2.2MOVR3,#21RE20:DJNZR3,RE20RRCADJNZR2,RE01MOV@R1,ADECR1DJNZR4,RE00RET;显示子程序display:mova,29H;将29H中的十六进制数转换成10进制movb,#10;10进制/10=10进制divabmovb_bit,a;十位在amova_bit,b;个位在bmovdptr,#numtab;指定查表启始地址movr0,#4dpl1:movr1,#250;显示1000次dplop:mova,a_bit;取个位数MOVCA,@A+DPTR;查个位数的7段代码movp0,a;送出个位的7段代码clrp2.7;开个位显示acalld1ms;显示1mssetbp2.7mova,b_bit;取十位数MOVCA,@A+DPTR;查十位数的7段代码movp0,a;送出十位的7段代码clrp2.6;开十位显示acalld1ms;显示1mssetbp2.6djnzr1,dplop;100次没完循环djnzr0,dpl1;4个100次没完循环ret;1MS延时D1MS:MOVR7,#80DJNZR7,$RET;实验板上的7段数码管0~9数字的共阴显示代码numtab:DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBHEND
本文标题:DS18B20温度传感器的使用方法
链接地址:https://www.777doc.com/doc-2910388 .html