¡Buscamos el proteus y el código del sistema de control de temperatura del agua con microcontrolador! ~

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?

¿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:?

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?

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?

¿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?

;===================================== ===

INIT_18202:?

SETB?P1.1H?

NOP?

CLR?P1.1H?

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?

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?

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?

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?

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?

¿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

LJMP?CBA6

ABC6:LCALL?DELAY1?

MOV?A,#0CCH?;?¿Omitir coincidencia de ROM?

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?

¿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

;=========================================

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?

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?

DJNZ?R3,$?

RRC?A?

DJNZ?R2,RE017

MOV?@R1,A?

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

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?

¿NOP?

NOP?

SETB?P1.7H?

MOV?R3,#7?

DJNZ?R3,$?

MOV?C,P1.7H?

MOV?R3,#23?

DJNZ?R3,$?

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?

;=========================================

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