资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
数字温度计汇编驱动程序数字温度计汇编驱动程序;*端口的定义*;*CONFIG12 EQU 7FH ;DS18B20 的转换精度选择(0、R1、R2、1、1、1、1、1); 0 0 9 位测量; 0 1 10 位测量; 1 0 11 位测量; 1 1 12 位测量TEMPH EQU 71H ;高位温度原始数据的读入地址TEMPL EQU 70H ;低位温度原始数据的读入地址ZHENG EQU 73H ;温度中的整数部分数据暂存空间XIAO EQU 72H ;温度中的小数部分数据暂存空间BAIWEI EQU 77H ;温度的百位数据SHIWEI EQU 76H ;温度的十位数据GEWEI EQU 75H ;温度的个位数据DIANWEI EQU 74H ;温度的小数点后一位数据DAT EQU P1.0 ;DS18B20 与单片机通信的口线;*初始化子程序和主程序*;*ORG 0000HLJMP STARTORG 0030HSTART:MOV TEMPL,#0MOV TEMPH,#0LCALL INIT ;调用初始化子程序MAIN:LCALL RDTEMP ;调用读子程序,从 DS18B20 中读取出温度值LCALL DIVV ;调用运算子程序LCALL DISPLAY ;调用显示子程序显示当前温度值LJMP MAIN;*数据处理子程序*;*DIVV: ;数据处理子程序,负责将温度数据转换为 BCD 码MOV A,TEMPLMOV B,#16DIV AB ;分离温度数据低 8 位中的整数部分和小数部分(因为低字节第 4 位代表 1 度,但实际数值却是 2 的 4 次方=16,所以需要缩小 16 倍)MOV ZHENG,A ;将从温度数据低 8 位中分离出来的整数存放在整数存储空间中MOV XIAO,B ;将从温度数据低 8 位中分离出来的小数存放在小数存储空间中MOV A,XIAOMOV B,#10MUL AB ;将分离出的小数部分乘以 10,即扩大10 倍MOV B,#16DIV AB ;将已经扩大了 10 倍的小数再除以16,以求出小数点后一位的数据(例如 90/13=6 余 12,12*10/13=9余 3,那么 9 就是小数点后一位)MOV DIANWEI,A ;将小数点后一位数据存入小数点位MOV A,BMOV B,#10MUL ABMOV B,#16DIV AB ;用同样的方法求出小数点后第二位CLR CSUBB A,#4 ;判断小数点后的第二位是否大于或等于 5JC BUJIN ;如果有借位说明小数点后第二位小于5,则不向小数点后第一位产生进位INC DIANWEI ;如果小数点后第二位大于等于 5,则有借位产生,根据四舍五入原则,给小数点后第一位加 1 进位BUJIN:MOV A,TEMPHMOV B,#16MUL AB ;将温度数据高 8 位乘以 16(因为高字节第 0 位代表 2 的 4 次方=16,但实际数值却是 2 的 0 次方=1,所以需要扩大 16 倍)ADD A,ZHENG ;将温度数据高 8 位和低 8 位中代表整数的数据相加MOV ZHENG,A ;将最终求得的整数存放在整数存储空间中MOV A,ZHENGMOV B,#100DIV ABMOV BAIWEI,A ;求出整数中百位的 BCD 码,并存入百位存储空间中MOV A,BMOV B,#10DIV ABMOV SHIWEI,A ;求出整数中十位的 BCD 码,并存入十位存储空间中MOV GEWEI,B ;剩下的余数就是个位的 BCD 码,并存入个位存储空间中RET;*数据显示子程序*;*DISPLAY:MOV DPTR,#TAB ;通过查表来显示数据MOV A,BAIWEI ;显示百位MOVC A,A+DPTRMOV P0,AMOV P2,#11110111BMOV R7,#0FFH ;延时一下DJNZ R7,$MOV A,SHIWEI ;显示十位MOVC A,A+DPTR MOV P0,AMOV P2,#11111011BMOV R7,#0FFHDJNZ R7,$MOV A,GEWEI ;显示个位MOVC A,A+DPTRANL A,#0FEHMOV P0,AMOV P2,#11111101BMOV R7,#0FFHDJNZ R7,$MOV A,DIANWEI ;显示小数点后一位MOVC A,A+DPTRMOV P0,AMOV P2,#11111110BMOV R7,#0FFHDJNZ R7,$RETDELAY:MOV 30H,#200D1:MOV 31H,#250DJNZ 31H,$DJNZ 30H,D1RET;*DS18B20 控制子程序*;*INIT: ;DS18B20 初始化子程序LCALL RESET ;调用 DS18B20 复位子程序MOV A,#CONFIG12 ;将 DS18B20 的转换精度控制数据写入DS18B20,为提高转换精度选用 12 位精度LCALL WRITE ;调用向 DS18B20 的写子程序RETRDTEMP:LCALL RESET ;调用 DS18B20 复位子程序MOV A,#0CCH ;使 DS18B20 跳过读序列号的操作LCALL WRITEMOV A,#44H ;命令 DS18B20 启动温度转换操作LCALL WRITELCALL RESET ;在重新写入命令之前再次进行复位操作MOV A,#0CCHLCALL WRITEMOV A,#0BEH ;从 DS18B20 中将转换好的温度数据读出命令LCALL WRITELCALL READ ;调用读程序将低 8 位温度数据读入 AMOV TEMPL,A ;将低 8 位温度数据存入 TEMPL 寄存器中LCALL READMOV TEMPH,ARETRESET: ;DS18B20 复位子程序LA:SETB DATMOV R2,#200LB:CLR DATDJNZ R2,LBSETB DATMOV R2,#30LC:DJNZ R2,LCCLR CORL C,DATJC LBMOV R6,#80LD:ORL C,DATJC LPDJNZ R6,LDSJMP LADJNZ R6,LDLP:MOV R2,#250LF:DJNZ R2,LFRETWRITE: ;DS18B20 写子程序MOV R3,#8WR1A:SETB DATMOV R4,#8RRC ACLR DATWR2A:DJNZ R4,WR2AMOV DAT,CMOV R4,#30WR3A:DJNZ R4,WR3ADJNZ R3,WR1ASETB DATRETREAD: ;DS18B20 读子程序CLR EAMOV R6,#8RD1A:CLR DATMOV R4,#6NOPSETB DATRD2A:DJNZ R4,RD2AMOV C,DATRRC AMOV R5,#30RD3A:DJNZ R5,RD3ADJNZ R6,RD1ASETB DATRETTAB:DB 03H 9FH 25H 0DH 99H 49H 0C1H 1FH 01H 19H
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号