温度传感器 ds1820 的汇编程
序
晶振:12M
TEMPER_L EQU 36H
TEMPER_H EQU 35H
TEMPER_NUM EQU 60H
FLAG1 BIT 00H
DQ BIT P3.3
AAA:MOV SP,#70H
LCALL GET_TEMPER
LCALL TEMPER_COV
LJMP AAA
NOP
;------------------读出转换后的温度值
GET_TEMPER:
SETB DQ ; 定时入口
BCD:LCALL INIT_1820
JB FLAG1,S22
LJMP BCD ; 若 DS18B20 不存在则返回
S22:LCALL DELAY1
MOV A,#0CCH ; 跳过 ROM 匹配------0CC
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
NOP
LCALL DELAY
LCALL DELAY
CBA:LCALL INIT_1820
JB FLAG1,ABC
LJMP CBA
ABC:LCALL DELAY1
MOV A,#0CCH ; 跳过 ROM 匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200 ;READ_1820
RET
;------------------读 DS18B20 的程序,从 DS18B20 中读出一个字节的数
据
READ_1820:
MOV R2,#8
RE1:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE1
RET
;-------------------写 DS18B20 的程序
WRITE_1820:
MOV R2,#8
CLR C
WR1:
CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;-------------------读 DS18B20 的程序,从 DS18B20 中读出两个字节的温
度数据
READ_18200:
MOV R4,#2 ; 将温度高位和低位从 DS18B20 中读出
MOV R1,#36H ; 低位存入 36H(TEMPER_L),高位存入 35H(TEMPER_H)
评论0