CLR?P3.7
PRINCIPAL:MOV?38H,#00H MOV?39H,#00H MOV?3AH,#00H MOV?3BH,#00H LCALL?GET_TEMPER? ?TEMPRRO MOV?P2,#06H LCALL?PRO
;------------------------------- --- ----------------------- MOV?38H,#00H MOV?39H,#00H MOV?3AH,#00H MOV?3BH,#00H LCALL?GET_TEMPER2 ? LCALL?TEMPRRO MOV?P2,#5BH LCALL?PRO
;-------------------------- ----------------------- MOV?38H,#00H MOV?39H,#00H MOV?3AH,#00H MOV?3BH,#00H LCALL ?GET_TEMPER3 LCALL?TEMPRRO MOV?P2,#4FH LCALL?PRO
;---------------------------- -- ------------------------ ¿MOV?38H,#00H MOV?39H,#00H MOV?3AH,#00H MOV?3BH,#00H LCALL? GET_TEMPER4 LCALL?TEMPRRO MOV?P2,#66H LCALL?PRO
;-------------------------- --- ----------------------- MOV?38H,#00H MOV?39H,#00H MOV?3AH,#00H MOV?3BH,# 00H LCALL?GET_TEMPER5 LCALL?TEMPRRO MOV?P2,#6DH LCALL?PRO
;-------------------------- ---- ------------------------ ¿MOV?38H,#00H MOV?39H,#00H MOV?3AH,#00H MOV?3BH, #00H LCALL? GET_TEMPER6 LCALL?TEMPRRO MOV?P2,#7DH LCALL?PRO
;------------------------- ---- ------------------------- MOV?38H,#00H MOV?39H,#00H MOV?3AH,#00H MOV?3BH,#00H LCALL ?GET_TEMPER7 LCALL?TEMPRRO MOV?P2,#07H LCALL?PRO
;------------------------ ---- --------------------------- ¿MOV?38H,#00H MOV?39H,#00H MOV?3AH,#00H MOV?3BH,# 00H LCALL?GET_TEMPER8 LCALL?TEMPRRO MOV?P2,#7FH LCALL?PRO
LJMPMAIN
;=============== === ============================CHL1
GET_TEMPER:?
SE
TBP1.0H?;?Entrada de tiempo?
BCD:LCALL?INIT_1820?
JB00H,S22?
LJMPBCD?;?Devolver si DS18B20 no existe ?
S22:?LCALL?DELAY1? MOVA,#0CCH?;?Omitir coincidencia de ROM ------comando 0CC LCALL?WRITE_1820?
MOV?A,# 44H ?;?¿Emitir comando de conversión de temperatura?
LCALL?WRITE_1820?
NOP?
LCALL?DELAY1?
CBA:LCALL ? ¿INIT_1820?
JB?00H,ABC?
LJMP?CBA?
ABC:LCALL?DELAY1?
MOV?A, #0CCH?;?¿Omitir coincidencia de ROM?
LCALL?WRITE_1820?
MOV?A,#0BEH?;?¿Emitir comando de lectura de temperatura?
¿LCALL? ¿WRITE_1820?
LCALL?READ_18200?;READ_1820?
RET?
;================ = ==============
READ_1820:?
MOV?R2,#8?
RE1:?< / p>
¿CLR?C?
SETB?P1.0H?
NOP?
NOP?
CLR? .0H?
NOP?
NOP?
NOP?
SETB?P1.0H?
¿MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.0H?
MOV?R3,#23? /p>
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE1?
RET?
;==============================
WRITE_1820:?
¿MOV?R2,#8?
CLR?C?
WR1:?
CLR?P1.0H?
MOV? ¿R3,#6?
DJNZ?R3,$?
RRC?A?
MOV?P1.0H,C?
MOV?R3,#23?
DJNZ?R3,$?
SETB?P1.0H?
NOP?
DJNZ?R2,WR1?
SETB?P1.0H?
RET
;================ ========================
READ_18200:?
MOV?R4,#2?;? ¿Leer los bits de alta y baja temperatura de DS18B20?
MOV?R1,#31H?;? ¿Guardar el bit bajo en 30H (TEMPER_L) y el bit alto en 31H (TEMPER_H)?
RE00:?
MOV?R2,#8?
RE01:?
CLR?C?
SETB?P1 .0H ?
NOP?
NOP?
CLR?P1.0H?
NOP?
¿NOP?
NOP?
SETB?P1.0H?
MOV?R3,#7?
DJNZ?R3,$ ?
¿MOV?C,P1.0H?
>
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE01? p>
¿MOV?@R1,A?
DEC?R1?
DJNZ?R4,RE00?
RET?
;=======================================
INIT_1820 :?
SETB?P1.0H?
NOP?
CLR?P1.0H?
MOV?R0,#250
TSR1:?
DJNZ?R0,TSR1?;?Delay 520us?
SETB?P1.0H?
MOV ? R0,#25H?;96US-25H?
TSR2:?
DJNZ?R0,TSR2?
JNB?P1.0H,TSR3;como Si D0 es bajo, ¿existe el reinicio exitoso DS18B20?
¿LJMP?TSR4?;?¿Retraso?
TSR3:?
SETB?00H?; ?establecer bit de bandera, lo que indica que DS1820 existe?
LJMP?TSR5?
TSR4:?
CLR?00H?;?Borrar el bit de bandera, lo que indica que DS1820 no existe
LJMP?TSR7?
TSR5:?
MOV?R0,#06BH?;200US?
TSR6:? p>
DJNZ?R0,TSR6?;?Delay?
TSR7:?
SETB?P1.0H?;Tira del autobús alto
RET
;================================?
GET_TEMPER2: ?
SETBP1.1H?;?¿Entrada temporizada?
BCD2:LCALL?INIT_18202?
JB00H,S222?
LJMPBCD2? ;?Si DS18B20 no existe, ¿regresar?
S222:?LCALL?DELAY1? MOVA,#0CCH?;?Omitir coincidencia de ROM ------comando 0CC LCALL? WRITE_18202?
MOV?A,#44H?;?¿Emitir un comando de conversión de temperatura?
LCALL?WRITE_18202?
NOP?
LCALL?DELAY1?
p>CBA2:LCALL?INIT_18202?
JB?00H,ABC2?
LJMP?CBA2?
ABC2:LCALL?DELAY1? p>
MOV?A,#0CCH?;?¿Omitir coincidencia de ROM?
LCALL?WRITE_18202?
MOV?A,# 0BEH?;?¿Emitir comando de lectura de temperatura?
LCALL?WRITE_18202?
LCALL?READ_182002?;READ_1820?
RET?
;======= =======================
READ_18202:?
MOV? ¿R2,#8?
RE12:?
CLR?C?
SETB?P1.1H?
NOP? p>
¿NOP?
CLR?P1.1H?
NOP?
NOP?
NOP?
¿SETB?P1 1H?
¿MOV?R3,#7?
>DJNZ?R3,$?
MOV?C,P1.1H?
MOV?R3,#23?
DJNZ?R3,$?
¿RRC?A?
DJNZ?R2,RE12?
RET?
;========== ===================
WRITE_18202:?
MOV?R2,#8?
¿CLR?C?
WR12:?
CLR?P1.1H?
MOV?R3,#6?
DJNZ? ¿R3,$?
RRC?A?
MOV?P1.1H,C?
MOV?R3,#23?
DJNZ?R3,$?
SETB?P1.1H?
NOP?
DJNZ?R2,WR12?
SETB ?P1.1H?
RET
;============================== === ==========
READ_182002:?
MOV?R4,#2?;?Leer los bits de alta y baja temperatura de DS18B20?
MOV?R1,#31H?;?¿El bit bajo se almacena en 30H (TEMPER_L), el bit alto se almacena en 31H (TEMPER_H)?
RE002:?
¿MOV?R2, #8?
RE012:?
CLR?C?
SETB?P1.1H?
¿NOP?
NOP?
CLR?P1.1H?
NOP?
NOP?
NOP?
SETB?P1.1H?
MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.1H?
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
¿DJNZ?R2,RE012 ?
MOV?@R1,A?
DEC?R1?
DJNZ?R4,RE002?
RET? p>
;===================================== ===
INIT_18202:?
SETB?P1.1H?
NOP?
CLR?P1.1H? p>
MOV?R0,#250
TSR12:?
DJNZ?R0,TSR12?;?Retraso 520us?
SETB?P1. 1H?
MOV?R0,#25H?;96US-25H?
TSR22:?
DJNZ?R0,TSR22?
JNB?P1.1H, TSR32; Si D0 es bajo, ¿el reinicio es exitoso y existe DS18B20?
LJMP?TSR42?;?Retraso?
TSR32:?
SETB?00H? ;?Establecer la bandera, indicando la existencia de DS1820?
LJMP?TSR52?
TSR42:?
CLR? 00H?;?Borrar la bandera, indicando que el DS1820 ¿No existe?
LJMP?TSR72?
TSR52:?
MOV?R0,#06BH? ;200US?
TSR62: ?
DJNZ?R0,TSR62?;?Retraso?
TSR72:?
SETB?P1 .1H?;Tira del autobús alto
R
ET
;===============================?
GET_TEMPER3: ?
SETBP1.2H?;?Entrada programada?
BCD3:LCALL?INIT_18203?
JB00H,S223?
LJMPBCD3? ;?Si DS18B20 no existe, ¿regresar?
S223:?LCALL?DELAY1? MOVA,#0CCH?;?Omitir coincidencia de ROM ------comando 0CC LCALL?WRITE_18203
MOV?A,#44H?;?¿Emitir un comando de conversión de temperatura?
LCALL?WRITE_18203
NOP?
LCALL?DELAY1?
CBA3:LCALL?INIT_18203
JB?00H,ABC3?
LJMP?CBA3
ABC3:LCALL?DELAY1?
MOV?A,#0CCH?;?¿Omitir coincidencia de ROM?
LCALL?WRITE_18203
MOV?A,#0BEH?;?¿Emitir un comando de lectura de temperatura?
LCALL?WRITE_18203
LCALL?READ_182003?;READ_1820?
RET?
;============ == =================
READ_18203:?
MOV?R2,#8?
RE13: ?
CLR?C?
SETB?P1.2H?
NOP?
NOP?
¿CLR?P1.2H?
NOP?
NOP?
NOP?
SETB?P1.2H? p>
MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.2H?
MOV?R3 ,# 23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE13
RET?
;==============================
WRITE_18203:?
MOV?R2,#8?
CLR?C?
WR13:?
CLR?P1.2H?
MOV ?R3,#6?
DJNZ?R3,$?
RRC?A?
MOV?P1.2H,C? p>
MOV?R3,#23?
DJNZ?R3,$?
SETB?P1.2H?
NOP?
DJNZ?R2,WR13
SETB?P1.2H?
RET
;============ ==== ========================
READ_182003:?
MOV?R4,# 2?;? ¿Leer los bits de temperatura alta y baja de DS18B20?
MOV?R1,#31H?;? ¿Guardar el bit bajo en 30H (TEMPER_L) y el bit alto en 31H (TEMPER_H)?
RE003:?
MOV?R2,#8?
RE013:?
CLR?C?
SETB?P1.2H ?
NOP?
NOP?
CLR?P1.2H?
NOP?
NO
P?
NOP?
SETB?P1.2H?
MOV?R3,#7?
DJNZ?R3,$ ?
MOV?C,P1.2H?
MOV?R3,#23?
DJNZ?R3,$?
¿RRC?A?
DJNZ?R2,RE013
MOV?@R1,A?
DEC?R1?
DJNZ? R4,RE003?
RET?
;============================== = ==========
INIT_18203:?
SETB?P1.2H?
NOP?
CLR ?P1.2H?
MOV?R0,#250
TSR13:?
DJNZ?R0,TSR13?;?Retraso 520us?
SETB?P1.2H?
MOV?R0,#25H?;96US-25H?
TSR23:?
DJNZ?R0, ¿TSR23?
JNB?P1.2H, TSR33; Si D0 es bajo, ¿el reinicio es exitoso y existe DS18B20?
LJMP?TSR43?;?Retraso?
TSR33:?
SETB?00H?;?¿Establecer el indicador para indicar la existencia de DS1820?
LJMP?TSR53?
TSR43:?
CLR?00H?;?¿Borrar la bandera, indicando que DS1820 no existe?
LJMP?TSR73
TSR53:?
MOV?R0,# 06BH?;200US?
TSR63:?
DJNZ?R0,TSR63?;?Retraso?
TSR73:?
SETB?P1.2H?;Tirar del bus alto
RET
;===================== ==== =======?
GET_TEMPER4:?
SETBP1.3H?;?Entrada programada?
BCD4:LCALL?INIT_18204
JB00H,S224?
LJMPBCD4?;?¿Devolver si DS18B20 no existe?
S224:?LCALL?DELAY1? Omitir coincidencia de ROM ------comando 0CC LCALL?WRITE_18204
MOV?A,#44H?;?¿Emitir un comando de conversión de temperatura?
LCALL?WRITE_18204
¿NOP?
LCALL?DELAY1?
CBA4:LCALL?INIT_18204
JB?00H,ABC4
LJMP?CBA4
ABC4:LCALL?DELAY1?
MOV?A,#0CCH?;?¿Omitir coincidencia de ROM?
LCALL?WRITE_18204
MOV?A ,#0BEH?;?¿Emitir comando de lectura de temperatura?
LCALL?WRITE_18204
LCALL?READ_182004?;READ_1820?
RET?
;==============================
READ_18204:?
MOV ?R2,#8?
RE14:?
CLR?C?
SETB?P1.3H?
¿NO?
No
¿OP?
CLR?P1.3H?
NOP?
NOP?
NOP?
SETB ?P1.3H?
MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.3H?
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE14
RET?
;===============================
WRITE_18204:?
MOV?R2,#8?
CLR?C?
WR14:?
CLR?P1. 3H ?
MOV?R3,#6?
DJNZ?R3,$?
RRC?A?
MOV?P1 3H,C?
MOV?R3,#23?
DJNZ?R3,$?
SETB?P1.3H?
NOP?
DJNZ?R2,WR14
SETB?P1.3H?
RET
;===== = =================================
READ_182004:?
MOV?R4,#2?;?Leer los bits de alta y baja temperatura de DS18B20?
MOV?R1,#31H?;?El bit bajo se almacena en 30H (TEMPER_L) y el bit alto se almacena en 31H (TEMPER_H )?
RE004:?
MOV?R2,#8?
RE014:?
CLR ?C?
SETB?P1.3H?
NOP?
NOP?
CLR?P1.3H?
¿NOP?
NOP?
NOP?
SETB?P1.3H?
MOV?R3,#7 ?
DJNZ?R3,$?
MOV?C,P1.3H?
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE014
MOV?@R1,A?
DEC?R1? p>
DJNZ?R4,RE004
RET?
;================== ======= ================
INIT_18204:?
SETB?P1.3H?
¿NOP?
p>CLR?P1.3H?
MOV?R0,#250
TSR14:?
DJNZ?R0,TSR14?;?Tiempo de extensión 520us?
SETB?P1.3H?
MOV?R0,#25H?;96US-25H?
TSR24:?
DJNZ?R0,TSR24
JNB?P1.3H,TSR34;Si D0 es bajo, ¿el reinicio es exitoso y DS18B20 existe?
LJMP?TSR44?;?Delay?
TSR34:?
SETB?00H?;? ¿Establecer el indicador para indicar la existencia de DS1820?
LJMP ?TSR54?
TSR44: ?
CLR?00H?;?¿Borrar la bandera, indicando que DS1820 no existe?
LJMP?TSR74
TSR54:?
MOV?R0,#06BH?;200
¿EE. UU.?
TSR64:?
DJNZ?R0,TSR64?;?Delay?
TSR74:?
SETB?P1 . 3H?;Tira del autobús alto
RET
;============================= == ====?
GET_TEMPER5:?
SETBP1.4H?;?Entrada programada?
BCD5:LCALL?INIT_18205
JB00H,S225
LJMPBCD5?;?¿Devolver si DS18B20 no existe?
S225:?LCALL?DELAY1? MOVA,#0CCH?;?Omitir coincidencia de ROM--- - --0CC comando LCALL?WRITE_18205
MOV?A,#44H?;?¿Emitir un comando de conversión de temperatura?
LCALL?WRITE_18205
NOP?
LCALL?DELAY1?
CBA5:LCALL?INIT_18205
JB?00H,ABC5
LJMP?CBA5
ABC5 :LCALL?DELAY1?
MOV?A,#0CCH?;?¿Omitir coincidencia de ROM?
LCALL?WRITE_18205
MOV?A,#0BEH ;?¿Emitir comando de lectura de temperatura?
LCALL?WRITE_18205
LCALL?READ_182005?;READ_1820?
RET?
;= = ============================
READ_18205:?
MOV?R2, # 8?
RE15:?
CLR?C?
SETB?P1.4H?
NOP?
¿NOP?
CLR?P1.4H?
¿NOP?
¿NOP?
¿NOP?
SETB?P1.4H?
MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.4H?
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE15
RET?
;===============================
WRITE_18205:?
MOV?R2,#8?
CLR?C?
WR15:?
CLR ?P1 .4H?
MOV?R3,#6?
DJNZ?R3,$?
RRC?A?
¿MOV?P1.4H,C?
¿MOV?R3,#23?
DJNZ?R3,$?
SETB?P1.4H? p>
NOP?
DJNZ?R2,WR15
SETB?P1.4H?
RET
;== == ===================================
READ_182005:?
MOV?R4,#2?;?¿Leer los bits de temperatura alta y baja de DS18B20?
MOV?R1,#31H?;?El bit bajo se almacena en 30H (TEMPER_L) y ¿El bit alto está almacenado en 31H (TEMPER_H)?
RE005:?
MOV?R2,#8?
RE015:?
<p>¿CLR?C?
SETB?P1.4H?
NOP?
NOP?
CLR?P1.4H?
¿NOP?
NOP?
NOP?
SETB?P1.4H?
MOV?R3 ,#7?
DJNZ?R3,$?
MOV?C,P1.4H?
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE015
MOV?@R1,A?
DEC?R1?
DJNZ?R4,RE005
RET?
;=============== =========================
INIT_18205:?
SETB?P1.4H? p>
¿NOP?
CLR?P1.4H?
MOV?R0,#250
TSR15:?
DJNZ?R0,TSR15?;?Retraso 520us?
SETB?P1.4H?
MOV?R0,#25H?;96US-25H?
TSR25:?
DJNZ?R0,TSR25
JNB?P1.4H,TSR35; Si D0 es bajo, ¿el reinicio es exitoso y DS18B20 existe?
LJMP ?TSR45?;?Delay?
TSR35:?
SETB?00H?;? ¿Establecer el indicador para indicar la existencia de DS1820?
LJMP? TSR55?
TSR45:?
CLR?00H?;?¿Borrar la bandera, indicando que DS1820 no existe?
LJMP?TSR75
TSR55 :?
MOV?R0,#06BH?;200US?
TSR65:?
DJNZ?R0,TSR65?;?Retraso?
TSR75:?
SETB?P1.4H?; Tirar del autobús alto
RET
;======= === =====================?
GET_TEMPER6:?
SETBP1.5H?;?Entrada temporizada ?
p>
BCD6:LCALL?INIT_18206
JB00H,S226
LJMPBCD6;?¿Devolver si DS18B20 no existe?
S226:?LCALL?DELAY1 ? MOVA,#0CCH?;?Omitir coincidencia de ROM------comando 0CC LCALL?WRITE_18206
MOV?A,#44H?;?Emitir comando de conversión de temperatura ?
LCALL?WRITE_18206
NOP?
LCALL?DELAY1?
CBA6:LCALL?INIT_18206
JB?00H,ABC6 p>
LJMP?CBA6
ABC6:LCALL?DELAY1?
MOV?A,#0CCH?;?¿Omitir coincidencia de ROM? p>
LCALL ?WRITE_18206
MOV?A,#0BEH?;?¿Emitir comando de lectura de temperatura?
LCALL?WRITE_18206
LCALL?READ_182006? ;READ_1820?
RET?
;===============================
READ_18206:
?
MOV?R2,#8?
RE16:?
CLR?C?
SETB?P1.5H?
¿NOP?
¿NOP?
¿CLR?P1.5H?
¿NOP?
¿NOP? p>
¿NOP?
SETB?P1.5H?
MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.5H?
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE16
RET?
;====================== = ========
WRITE_18206:?
MOV?R2,#8?
CLR?C?
WR16:?
CLR?P1.5H?
MOV?R3,#6?
DJNZ?R3,$?
RRC?A?
MOV?P1.5H,C?
MOV?R3,#23?
DJNZ?R3,$?
SETB?P1.5H?
NOP?
DJNZ?R2,WR16
SETB?P1.5H?
RET
;========================================= p>
READ_182006:?
MOV?R4,#2?;?¿Leer los bits de alta y baja temperatura de DS18B20?
MOV?R1,#31H? ?¿Guardar 30H (TEMPER_L) en el bit bajo y 31H (TEMPER_H) en el bit alto?
RE006:?
MOV?R2,#8?
RE016: ?
CLR?C?
SETB?P1.5H?
NOP?
NOP?
¿CLR?P1.5H?
NOP?
NOP?
NOP?
SETB?P1.5H?
MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.5H?
MOV ?R3,# 23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE016
MOV ?@R1, A?
DEC?R1?
DJNZ?R4,RE006
RET?
;==== ==== ===============================
INIT_18206:?
¿SETB?P1.5H?
NOP?
CLR?P1.5H?
MOV?R0,#250
TSR16:?
DJNZ?R0,TSR16?;?Retraso 520us?
SETB?P1.5H?
MOV?R0,#25H?;96US -25H?
TSR26:?
DJNZ?R0,TSR26
JNB?P1.5H,TSR36; si D0 es bajo, el reinicio se realiza correctamente y ¿DS18B20 existe?
p>
¿LJMP?TSR46?;?¿Retraso?
TSR36:?
SETB?00H?;?Establezca el indicador en indicar la existencia de DS1820?
LJMP?TSR56?
TSR46:?
C
LR?00H?;?¿Borrar la bandera, indicando que DS1820 no existe?
LJMP?TSR76
TSR56:?
MOV?R0,#06BH ?; 200US?
TSR66:?
DJNZ?R0,TSR66?;?Retraso?
TSR76:?
SETB? P1 .5H?;Tirar del autobús alto
RET
;=========================== == ====?
GET_TEMPER7:?
SETBP1.6H?;?Entrada programada?
BCD7:LCALL?INIT_18207
JB00H,S227
LJMPBCD7;?¿Devolver si DS18B20 no existe?
S227:?LCALL?DELAY1? MOVA,#0CCH?;?Omitir coincidencia de ROM---- - Comando -0CC LCALL?WRITE_18207
MOV?A,#44H?;?¿Emitir un comando de conversión de temperatura?
LCALL?WRITE_18207
NOP? p>
LCALL?DELAY1?
CBA7:LCALL?INIT_18207
JB?00H,ABC7
LJMP?CBA7
ABC7: LCALL?DELAY1?
MOV?A,#0CCH?;?¿Omitir coincidencia de ROM?
LCALL?WRITE_18207
MOV?A,#0BEH? ?¿Emitir comando de lectura de temperatura?
LCALL?WRITE_18207
LCALL?READ_182007?;READ_1820?
RET?
;== = ===========================
READ_18207:?
MOV?R2,# 8 ?
RE17:?
CLR?C?
SETB?P1.6H?
NOP?
¿NOP?
CLR?P1.6H?
¿NOP?
¿NOP?
¿NOP?
SETB?P1.6H?
MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.6H?< / p>
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE17
RET?
;===============================
WRITE_18207:?
MOV?R2,#8?
CLR?C?
WR17:?
CLR? P1.6H?
MOV?R3,#6?
DJNZ?R3,$?
RRC?A?
MOV ?P1 .6H,C?
MOV?R3,#23?
DJNZ?R3,$?
SETB?P1.6H?
¿NOP?
DJNZ?R2,WR17
SETB?P1.6H?
RET
;=== == ==================================
READ_182007:?
MOV?R4,#2?;?¿Leer los bits de temperatura alta y baja de DS18B20?
MOV?R1,#31H?;?Guardar el bit bajo en 30
H(TEMPER_L), ¿almacenar el bit alto en 31H(TEMPER_H)?
RE007:?
MOV?R2,#8?
RE017:?
¿CLR?C?
SETB?P1.6H?
NOP?
NOP?
CLR? ¿P1.6H?
¿NOP?
¿NOP?
¿NOP?
¿SETB?P1.6H?
MOV ?R3,#7?
DJNZ?R3,$?
MOV?C,P1.6H?
MOV?R3,#23? p>
DJNZ?R3,$?
RRC?A?
DJNZ?R2,RE017
MOV?@R1,A? p>
DEC?R1?
DJNZ?R4,RE007
RET?
;========== == ===========================
INIT_18207:?
SETB?P1. 6H?
NOP?
CLR?P1.6H?
MOV?R0,#250
TSR17:?
DJNZ?R0,TSR17?;?Retraso 520us?
SETB?P1.6H?
MOV?R0,#25H?;96US-25H?
TSR27:?
DJNZ?R0,TSR27
JNB?P1.6H, TSR37; si D0 es bajo, ¿el reinicio se realiza correctamente y existe DS18B20?
LJMP?TSR47;?Delay?
TSR37:?
SETB?00H?;?¿Establecer la bandera para indicar la presencia de DS1820?
LJMP?TSR57 ?
TSR47:?
CLR?00H?;?¿Borrar la bandera, indicando que DS1820 no existe?
LJMP?TSR77
TSR57:?
MOV?R0,#06BH?;200US?
TSR67:?
DJNZ?R0,TSR67;? ¿Retraso?
TSR77:?
SETB?P1.6H?; Tirar del autobús alto
RET
;===== ===== =====================?
GET_TEMPER8:?
SETBP1.7H?;? ¿Entrada programada?
p>
BCD8:LCALL?INIT_18208
JB00H,S228
LJMPBCD8;?¿Devolver si DS18B20 no existe?
S228:?LCALL?DELAY1 ? MOVA,#0CCH?;?Omitir coincidencia de ROM------comando 0CC LCALL?WRITE_18208
MOV?A,#44H?;?Problema de temperatura ¿comando de conversión?
LCALL?WRITE_18208
NOP?
LCALL?DELAY1?
CBA8:LCALL?INIT_18208
JB?00H,ABC8 p>
LJMP?CBA8
ABC8:LCALL?DELAY1?
MOV?A,#0CCH?;?¿Omitir coincidencia de ROM?
LCALL ?WRITE_18208
MOV?A,#0BEH?;?¿Emitir comando de lectura de temperatura?
LCALL?WRITE_18208
LCALL? ¿LEER_182008?
;READ_1820?
RET?
;===============================
READ_18208:?
MOV?R2,#8?
RE18:?
CLR?C?
SETB?P1.7H?
NOP?
NOP?
CLR?P1.7H?
NOP? p>
¿NOP?
NOP?
SETB?P1.7H?
MOV?R3,#7?
DJNZ?R3,$?
MOV?C,P1.7H?
MOV?R3,#23?
DJNZ?R3,$? p>
RRC?A?
DJNZ?R2,RE18
RET?
;============= =================
WRITE_18208:?
MOV?R2,#8?
CLR? C?
WR18:?
CLR?P1.7H?
MOV?R3,#6?
DJNZ?R3, $?
RRC?A?
MOV?P1.7H,C?
MOV?R3,#23?
DJNZ ?R3,$?
SETB?P1.7H?
NOP?
DJNZ?R2,WR18
SETB?P1. 7H?
RET
;================================= == =======
READ_182008:?
MOV?R4,#2?;?Leer los bits de alta y baja temperatura de DS18B20?
MOV?R1,#31H?;?¿El bit bajo se almacena en 30H (TEMPER_L), el bit alto se almacena en 31H (TEMPER_H)?
RE008:?
¿MOV?R2,#8?
RE018:?
CLR?C?
SETB?P1.7H?
NOP?
¿NOP?
¿CLR?P1.7H?
¿NOP?
¿NOP?
¿NOP?
SETB ?P1.7H?
MOV?R3,#7?
DJNZ?R3,$?
MOV?C, ¿P1.7H?
MOV?R3,#23?
DJNZ?R3,$?
RRC?A?
DJNZ ?R2,RE018
MOV?@R1,A?
DEC?R1?
DJNZ?R4,RE008
RET?
;========================================= p>
INIT_18208:?
¿SETB?P1.7H?
NOP?
CLR?P1.7H?
MOV?R0,#250
p>TSR18:?
DJNZ?R0,TSR18?;?Retraso 520us?
SETB?P1.7H?
MOV?R0 ,#25H?;96US-25H?
TSR28:?
DJNZ?R0,TSR28
JNB?P1 .7H,TSR38;Si D0 es bajo, ¿entonces el reinicio se realizó correctamente y existe DS18B20?
LJMP?TSR48;?¿Retraso?
TSR3
8:?
SETB?00H?;?Establecer la bandera para indicar la existencia de DS1820?
LJMP?TSR58
TSR48:?
CLR?00H?;?¿Borrar la bandera, indicando que DS1820 no existe?
LJMP?TSR78
TSR58:?
MOV?R0 ,#06BH? ;200US?
TSR68:?
DJNZ?R0,TSR68;?Retardo?
TSR78:?
SETB?P1 .7H?;Tirar del bus alto
RET
;========================= ==== ====?
;================================== ===== =
DELAY1:MOV?R7,#20H?
DJNZ?R7,$?
RET
;==== ================================
TEMPRRO:MOV?33H, #00H;Inicialización 0
MOV?A,30H
ANL?A,#0FH
SWAP?A
MOV?33H ,A
MOV?A,31H
ANL?A,#0F0H
SWAP?A
ORL?33H,A; banda reensamblada Datos de símbolo (parte entera)
MOV?A,33H
ANL?A,#80H Determinar símbolo
JZ?TEMPP
MOV?A,33H
CPL?A
;ADD?A,#01H
SJMP?TEMPP1
TEMPP :MOV ?A,33H;Programa de procesamiento de números positivos
LCALL?HBCD
MOV?A,31H
ANL?A,#0FH
MOV?DPTR,#TEMPTAB;Tabla de búsqueda decimal
MOVC?A,@A+DPTR
MOV?36H,A
CLR?P3 .7 ;Indica números positivos
SJMP?EXIT
TEMPP1:LCALL?HBCD; programa de procesamiento de números negativos MOV?A,31H ANL?A,#0FH ORL?A,#0F0H CPL?A ADD?A,#01H MOV?DPTR,#TEMPTAB MOVC?A,@A+DPTR;Tabla de búsqueda de decimales MOV?36H,A SETB?P3.7;Indica números negativos
SALIR: RET
HBCD: MOV B, #100; separe el dígito de las centenas y guárdelo en R3
DIV AB
MOV R3,A
MOV A , #10 ;El resto continúa separando los dígitos de las decenas y las unidades
XCH A,B
DIV AB
SWAP A
ORL A ,B ;Reúna los dígitos de las decenas y las unidades en el código BCD
MOV?34H,R3
MOV?35H,A
RET
TEMPTAB:DB?00H,01H,01H,02H,03H,03H,04H,04H
DB?05H,06H,06H,07H,08H,08H,09H,09H ;0~16* 0.0652
;===================================== ======== =========
CBCD:;MOV?R2,#04H;5 BCD a separar
CL:MOV? ¿@R1?
;Después de la separación, ocupará 10 unidades MOV?B,A ANL?A,#0F0H SWAP?A MOV?4CH,A MOV?A,B ANL?A,#0FH MOV?4DH,A MOV?@R0,4CH INC ?R0 MOV?@R0,4DH INC?R0 INC?R1 DJNZ?R2,CL RET
;====================== = =============================
PANTALLA:MOV?R0,#38H;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Mostrar la primera dirección del buffer
MOV?R2, #04
DISP_LOOP:MOV?A,@R0
LCALL?DISP
INC?R0
DJNZ?R2,DISP_LOOP
CLRP0.2
NOP
NOP
SETB?P0.2;El flanco ascendente envía datos al pestillo de salida
NOP
NOP
NOP
CLRP0.2