一款高精度测温电路设计程序.txt
来自「一款高精度测温电路设计子程序」· 文本 代码 · 共 108 行
TXT
108 行
18B20的复位时序及子程序:
init_1820:
clr dq1820
mov r7,#40
acall Delay15us ;(1)复位:低电平至少480 us,用15*40=600us可靠
setb dq1820 ;(2)释放,为了在15-60 us后接收存在脉冲
mov r7,#1
acall Delay15us;20us
mov r2,#90 ;(3);最多等待(1+2)*90=270us
wait:
mov c,dq1820
jnc wait1
djnz r2,wait ;(4)在15-60 us后回发芯片一个存在脉冲,为了可靠,我们采用等到回发脉冲后在做下一步工作,存在脉冲是一个60-240us的低电平信号
wait1:
mov DS18b20Status,c
mov r7,#40
acall Delay15us;15*40=600 us ;(5)得到存在脉冲并且稳定至少480 us,用600 us
setb dq1820
ret
5、数据处理子程序
TempToLedBuf:
mov a,tempH
jb acc.7,negtiv ;(1)tempH中的最高位若是1,说明是负数,为0,是正数
;----------------------------------------------
;正数的处理过程
;------------------------------------------------
mov templ4,templ ;(2)templ中的低4位是小数部分
mov a,templ
swap a
anl a,#0fh
mov templ,a
mov a,temph
swap a
anl a,#0f0h
orl a,templ ;(3)取temph中的低4位和templ中的高4位合一起,是温度的整数部分
mov b,#10
div ab ;(4)16进制的整数除10即变为10进制,用于显示
mov Ledbuf1,b ;(5)显示个位
mov b,#10
div ab
mov Ledbuf2,b ;(6)显示十位
mov Ledbuf3,a ;(7)显示百位
;-------------------------------------------------------------------------
;正数小数部分的处理过程
;-------------------------------------------------------------------------
mov a,templ4
anl a,#0fh ;(8)屏蔽高4位
mov b,#10
mul ab
mov b,#16
div ab ;(9)16进制的小数部分除16,也就是乘以0.0625便是用于显示的温度值
mov templ4,a
jnb b.3,dy5 ;(10)4舍5入吗?
inc templ4 ;(11)5入
dy5:
mov Ledbuf0,templ4
ret
;------------------------------------------
;负数的处理过程
;-----------------------------------------
negtiv:
mov a,temph
cpl a
mov temph,a
mov a,templ
cpl a
add a,#1 ;(1)取补加1,得到小数点部分的真值
mov templ,a
mov a,temph
addc a,#0
mov templ4,templ
mov a,templ ;(2)以下的处理同正数的处理
swap a
anl a,#0fh
mov templ,a
mov a,temph
swap a
anl a,#0f0h
orl a,templ
mov b,#10
div ab
mov Ledbuf1,b
mov b,#10
div ab
mov Ledbuf2,b
mov Ledbuf3,#10 ;(3)显示负号 —
mov a,templ4
anl a,#0fh
mov b,#10
mul ab
mov b,#16
div ab
mov templ4,a
jnb b.3,dy5_ ; (4)4舍5入
inc templ4
dy5_:
mov Ledbuf0,templ4
ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?