洛阳师范学院课程设计说明书(2015)
MOV MOV RET
R4,#08H R5,A_BIT
LCALL DINPUT
;-------------7219命令写入子程序------------------ DINPUT: MOV A,R4
MOV B,#8 MOV P0.1,C CLR P0.3 SETB P0.3 DJNZ B,LOOP0 MOV A,R5 MOV B,#8 MOV P0.1,C CLR P0.3 SETB P0.3 DJNZ B,LOOP1 CLR P0.2 SETB P0.2 RET LOOP0: RLC A
LOOP1: RLC A
;//****************DS18B20********************// DS18B20: LCALL TEMP LCALL CHULI
RET
TEMP: LCALL REST_18B20
MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令 LCALL WRITE_1820
LCALL REST_18B20 ;准备读温度前先初始化 MOV A,#0CCH ;跳过ROM匹配
;-----------------DS18B20的温度转换子程序--------------
50
洛阳师范学院课程设计说明书(2015)
LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_1820 RET
;--------------------------DS18B20复位程序-------------------------- REST_18B20:
SETB DQ NOP
CLR DQ
MOV R2,#250 ;主机发出延时500微秒的复位低脉冲 DJNZ R2,$
SETB DQ ;然后拉高数据线 MOV R2,#30
DJNZ R2,$ ;延时60us等待DS18B20回应 JNB DQ,REST1
JMP REST_18B20 ;超时而没有响应,重新初始化 REST1: MOV R2,#120
DJNZ R2,$ ;延时240us
JB DQ,REST2 ;数据变高,初始化成功 JMP REST_18B20 REST2: MOV R2,#240 DJNZ R2,$ RET
;----------写DS18B20的子程序(有具体的时序要求)-------------- WRITE_1820:
MOV B,#8 ;一共8位数据 WR1: CLR DQ MOV R3,#7 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#20 DJNZ R3,$
;保持16uS以上
;等待
51
洛阳师范学院课程设计说明书(2015)
SETB DQ NOP NOP
DJNZ B,WR1 SETB DQ RET
;------读DS18B20的程序,从DS18B20中读出两个字节的温度数据-------------------------- READ_1820:
MOV R2,#2 ;将温度高位和低位从DS18B20中读出 MOV R1,#3EH ;低位存入3EH RE0: MOV B,#8 RE1: SETB DQ NOP NOP CLR DQ NOP NOP SETB DQ MOV R3,#9 DJNZ R3,$ MOV C,DQ MOV R3,#30 DJNZ R3,$
RRC A
DJNZ B,RE1 MOV @R1,A
INC R1 ;高位存入3FH DJNZ R2,RE0 RET
;=====================数据处理===================== CHULI: MOV A ,3EH
;延时18uS
ANL A,#0F0H SWAP
A
MOV 3DH,A
52