超级版主
主题
帖子
积分14436
阅读权限150
注册时间2008-11-13
最后登录1970-1-1
在线时间 小时
|
一。0.1精确度
18B20默认12位精度,为防止有误,还是有必要初始化。
MOV A,#7FH ;12位精确度
LCALL WRITE_1820 ;写入暂存器
二。负温处理
1.判负温
读出温度:TEMPL---低温度值存放单元
TEMPH---高温度值存放单元
当TEMPH为零是正温
当TEMPH大于零是负温
2。负温处理
求补码-取反加1
CONV_TEMP: MOV A,TEMPH ;判高温度值存放单元
ANL A,#80H ;判温度是否为负温(TEMPH和10000000相与)
JZ TC1 ;如为零温度是正并转
CLR C ;不是零, 确认是负温,往下
MOV A,TEMPL ;二进制数求补(双字节)
CPL A ;取反
ADD A,#01H ;加1
MOV TEMPL,A ;更新低温度值存放单元
MOV A,TEMPH ;处理高温度值存放单元
CPL A
ADDC A,#00H
MOV TEMPH,A
SJMP TC2
三。精度处理
MOV A,TEMPL ;取低四位
ANL A,#0FH ;
以下采用查表方式
四。参考程序
; 处理温度 BCD 码子程序
CONV_TEMP: MOV A,TEMPH ;判高温度值存放单元
ANL A,#80H ;判温度是否为负温(TEMPH和10000000相与)
JZ TC1 ;如为零温度是正并转
CLR C ;不是零, 确认是负温,往下
MOV A,TEMPL ;二进制数求补(双字节)
CPL A ;取反
ADD A,#01H ;加1
MOV TEMPL,A ;更新低温度值存放单元
MOV A,TEMPH ;处理高温度值存放单元
CPL A
ADDC A,#00H
MOV TEMPH,A
SJMP TC2
TC1: MOV TEMPHC,#0AH ;TEMPHC=存十位数 BCD码
TC2: MOV A,TEMPHC
SWAP A
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH ;乘0.0625
MOV DPTR,#DOTTAB
MOVC A,@A+DPTR
MOV TEMPLC,A ;TEMPLC LOW=小数部分 BCD
MOV A,TEMPL ;整数部分
ANL A,#0F0H ;取出高四位
SWAP A
MOV TEMPL,A
MOV A,TEMPH ;取出低四位
ANL A,#0FH
SWAP A
ORL A,TEMPL ;重新组合
MOV TEMP_ZH,A
LCALL HEX2BCD1
MOV TEMPL,A
ANL A,#0F0H
SWAP A
ORL A,TEMPHC ;TEMPHC LOW = 十位数 BCD
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH
SWAP A ;TEMPLC HI = 个位数 BCD
ORL A,TEMPLC
MOV TEMPLC,A
MOV A,R4
JZ TC3
ANL A,#0FH
SWAP A
MOV R4,A
MOV A,TEMPHC ;TEMPHC HI = 百位数 BCD
ANL A,#0FH
ORL A,R4
MOV TEMPHC,A
TC3: RET
;--------------------------
HEX2BCD1:
MOV B,#064H ;十六进制-> BCD
DIV AB ;B= A % 100
MOV R4,A ;R7 = 百位数
MOV A,#0AH
XCH A,B
DIV AB ;B = A % B
SWAP A
ORL A,B
RET
;-------------------------
; 小数部分码表
DOTTAB:
DB 00H,00H,01H,01H,02H,03H,03H,04H
DB 05H,05H,06H,06H,07H,08H,08H,09H
|
评分
-
查看全部评分
|