;===============================================================================
; 温度采样及说明
; DS18B20通过一位一位的读入12位数据进行采样。该方法可在其内部实现串行传输,先写进数;据,再读出。具体采样程序如下所示:
;===============================================================================
RDTEMP: LCALL RESET ;读出温度值的子程序RDTEMP
MOV A,#0CCH ;发跳过ROM的命令
LCALL WRITE
MOV A,#44H ;发读开始转换命令
LCALL WRITE
LCALL DELAY1
LCALL RESET
MOV A,#0CCH ;发跳过ROM命令
LCALL WRITE
MOV A,#0BEH ;发读存储器命令
LCALL WRITE
LCALL READ ;读出温度的低字节
MOV TEMPL,A
LCALL READ ;读出温度的高字节
MOV TEMPH,A
LCALL READ ;读出TH
MOV REG2,A
LCALL READ ;读出TL
MOV REG3,A
LCALL READ ;读出CONFIG值
MOV REG4,A
RET
WRITE: ;写一个字节的子程序
MOV R3,#8 ;写8位
WR1A: SETB DAT
MOV R4,#10
RRC A
CLR DAT
WR2A: DJNZ R4,WR2A ;延时
MOV DAT,C
MOV R4,#50
WR3A: DJNZ R4,WR3A
DJNZ R3,WR1A
SETB DAT
RET
READ: ;读1个字节的子程序
MOV R6,#8
RD1A: CLR DAT
MOV R4,#6
NOP
SETB DAT
RD2A: DJNZ R4,RD2A
MOV C,DAT
RRC A
MOV R5,#30
RD3A: DJNZ R5,RD3A
DJNZ R6,RD1A
SETB DAT
RET
;===============================================================================
; 温度值转换程序及说明
; 由于温度值首先以12位形式输入进来,我们必须对输入值进行处理。内存分配为:符号 位存入73H,整数十位存入72H,整数个位存入71H,; 小数存入70H。按照要求取12位精度,并 根据其给出的精度换算表格进行换算,整数部分的处理显而易见,小数部分的处理较为复杂,分析; 表格可知,其最大精度为0.0625,其余为0.125和0.5。就算全部取最大值将其相加其倒数第二位也为7不能进位,所以可以省却最后两位。然; 后按照附录所示程序源代码进行处理便可。负数的处理也是根据表格给出的要求,将其取反加一后得到。
;=================================================================================
DIVV: ;MOV 41H,#0E2H
;MOV 40H,#0F9H
CLR C
MOV A,40H
JB ACC.7,FUU
MOV 73H,#00H
AJMP BEGIN
FUU: MOV 73H,#10
MOV A,40H
CPL A
MOV 40H,A
MOV A,41H
CPL A
INC A
MOV 41H,A
JNC BEGIN
MOV A,40H
INC A
MOV 40H,A
TEM.rar_TEM数据
版权申诉
189 浏览量
2022-09-22
20:01:07
上传
评论
收藏 1KB RAR 举报
我虽横行却不霸道
- 粉丝: 75
- 资源: 1万+