bsp; GOTO READ_18B20_1
RETURN
;*******************温度表示形式转换程序**************************
;因为从18B20中读出的温度值是二进制形式,必须把它转换成对象ASCII才能在LCD上显示
;18B20中温度的表示为:S S S S S 2的6次方 2的5次方 2的4次方 2的3次方 2的2次方 。。。。2的负4次方
;结果整数放在38H开始的存储器里,小数部分放在3B开始的单元里
;38H(百位) 39H(十位) 3AH(个位) 3BH(小数点)3CH(十分位) 3DH(百分位) 3EH(千分位) 3FH(万分位)
TEMP_CHANGE
;整数部分
;因为转换后温度值位于两个单元内,所以必须先把它们组合到一个单元内。
;因为最大值为127.9375,所以只需判断结果是否大于100来决定百位上的结果
;用循环减0AH的方法得到十位的值,最后剩下的被减数即为个位的结果
MOVLW 7H
ANDWF TEMP2,1 ;只保留低3位
SWAPF TEMP2,0
MOVWF 3AH ;转存3AH
MOVFW TEMP1
MOVWF TEMP2 ;转存TEMP2
MOVLW 0F0H
ANDWF TEMP2,1 ;清除低4位
SWAPF TEMP2,0 ;高低半字节交换
IORWF 3AH,1 ;组合得到结果的7位整数部分
MOVLW 64H ;计算整数部分百位的结果
SUBWF 3AH,W ; -100
BTFSS STATUS,C
GOTO NEXT0 ;温度小于100
MOVWF 3AH ;减后的结果覆盖原来的数据
MOVLW 1H
MOVWF 38H ;整数部分最高位为1(不可能大于1)
GOTO content2
NEXT0
CLRF 38H ;温度小于100,最高位为0
CLRF 39H ;计算整数部分十位的结果
MOVLW 0AH ; -10
SUBWF 3AH,1
BTFSS STATUS,C
GOTO NEXT1
INCF 39H,1 ;够减 十位上加1
GOTO $-5
NEXT1
MOVLW 0AH
ADDWF 3AH,1 ;多减一次再加回来,剩下的值即为个位上的值
MOVLW '.'
MOVWF 3BH ;小数点
;小数部分
;取四位精度
;计算方法为从最低位开始依