Red de conocimiento informático - Material del sitio web - Un programa de ensamblaje de termómetro digital de alta precisión basado en el microcontrolador AT89C51, el sensor de temperatura DS18B20 y la pantalla de cristal líquido LCD1602.

Un programa de ensamblaje de termómetro digital de alta precisión basado en el microcontrolador AT89C51, el sensor de temperatura DS18B20 y la pantalla de cristal líquido LCD1602.

Sensor de temperatura DS18B20, código de pantalla de cristal líquido LCD1602

; placa de desarrollo de microcontrolador multifunción XRF 51

Programa de medición de temperatura DS18B20 (pantalla LCD, puede medir) 0 -99 grados)

;*************************************** ***** *************************************

;* ***** ********************************************** ****** ******

TEMPER_L EQU 36H; vuelva a leer el área de almacenamiento temporal de bits altos y bajos de DS18B20

TEMPER_H EQU 35H; >

TEMPER_NUM EQU 60H; almacenamiento del valor de temperatura

TEMPER_GE EQU 61H

TEMPER_SHI EQU 62H

TEMPER_SAVE EQU 63H

FLAG1 BIT 00H

FLAG2 BIT 01H

RS BIT p2.0; interfaz de control LCD

RW BIT p2.1

E BIT p2. 2

DQ BIT p3.5; puerto de bus único

ORG 0000H

AJMP MAIN

ORG 0030H

PRINCIPAL: MOV SP, #70H

LCALL GET_TEMPER

LCALL TEMPER_COV

LCALL LCDDISP

lcall d100ms

lcall d100ms

LJMP MAIN

NOP

;************************ ******** *************************

;Leer el valor de temperatura convertido

;************ ************************************* ********

GET_TEMPER:

SETB DQ; entrada de tiempo

BCD: LCALL INIT_1820

JB FLAG1, S22

LJMP BCD; si DS18B20 no existe Luego regresa

S22: LCALL DELAY1

MOV A, #0CCH Omitir coincidencia de ROM----- -0CC comando

LCALL WRITE_1820

MOV A, #44H; Emitir comando de conversión de temperatura

LCALL WRIT

E_1820

LCALL D100MS

CBA: LCALL INIT_1820

JB FLAG1,ABC

LJMP CBA

ABC: LCALL DELAY1

MOV A, #0CCH; omitir coincidencia de ROM

LCALL WRITE_1820

MOV A, #0BEH; Emitir comando de temperatura de lectura

< p; >LCALL WRITE_1820

LCALL READ_18200 ;READ_1820

RET

;********************* **********************************************

;El programa para leer DS18B20, lee un byte de datos de 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

;********** ***** ****************************************

;Escribiendo el programa 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

;*************** ******* **********************************

; para leer DS18B20, leer desde DS18B20 Dos bytes de datos de temperatura

;****************************** ****** *******************

READ_18200:

MOV R4, #2; Leer lo alto y lo bajo; bits de temperatura de DS18B20

MOV R1, #36H El bit bajo se almacena en 36H (TEMPER_L), el bit alto se almacena en 35H (TEMPER_H)

p>

RE00:

MOV R2, #8

RE01:

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, RE01

MOV @R1, A

DEC R1

DJNZ R4, RE00

RET

;********************* *** **********************************

; Usar los datos de temperatura leídos desde DS18B20 para realizar Convertir

*************************************** ***************

TEMPER_COV:

MOV A, #0F0H

ANL A, TEMPER_L; el bit de baja temperatura Valor de temperatura con cuatro dígitos después del punto decimal

SWAP A

MOV TEMPER_NUM, A obtiene los cuatro dígitos inferiores

MOV A, TEMPER_L;

JNB ACC.3, TEMPER_COV1; valor de temperatura redondeado

INC TEMPER_NUM

TEMPER_COV1:

MOV A, TEMPER_H

ANL A, #07H

SWAP A

ORL A, TEMPER_NUM; obtiene los cuatro bits superiores y luego OR con los cuatro bits inferiores para obtener el valor

MOV TEMPER_NUM, A; guarda los datos de temperatura de transformación después de

LCALL BIN_BCD

RET

;;******** ************** *************************************

; Convierte datos de temperatura hexadecimales en código BCD comprimido

;*************************** **************** *************

BIN_BCD:

MOV A, TEMPER_NUM

MOV B, #10

DIV AB

MOV TEMPER_SHI,A

MOV TEMPER_GE,B

RET

;****** ************************************* **********

;Programa de inicialización DS18B20

;************************ ************** ****************

INIT_1820:

SETB DQ

NOP

CLR DQ

MOV R0, #250

TSR1:

DJNZ R0, T

SR1; retardo 520us

SETB DQ

MOV R0, #25H

TSR2:

DJNZ R0, TSR2

JNB DQ, TSR3; si D0 es bajo, el reinicio es exitoso y existe DS18B20

LJMP TSR4; SETB FLAG1; establece el bit de bandera, lo que indica que DS1820 existe

LJMP TSR5

TSR4:

CLR FLAG1, lo que indica que DS1820 no existe; existe

LJMP TSR7

TSR5:

MOV R0, #06BH

TSR6:

DJNZ; R0, TSR6; extendido cuando

TSR7:

SETB DQ; tirar del bus alto

RET

;****** ****** *******************************************

;Programa de visualización digital

************************************ ************ ******

*************************** *********** *************

;Programa de pantalla LCD

;******* *********** *******************************

LCDDISP :

mov p1, #01h; borrar pantalla

llamar a enrw

mov p1, #38h; establecido en 8 bits, fuente 5*7 dos líneas

llamar a enrw

mov p1, #0Ch

llamar a enrw

mov p1, #06h

llamar a enrw

mov p1, #80h

llamar a enrw

mov dptr, #yjtab

llamar a rwram

mov p1, #0C0h

llamar a enrw

mov dptr, #yjtab1

llamar a rwram

W_TEM:

mov p1, #0CCh

llamada enrw

MOV DPTR, #ASCII

MOV A, TEMPER_SHI

MOVC A, @A DPTR

MOV P1, A

setb rs

clr rw

clr e

llamada D500us

setb e

MOV DPTR, #ASCII

MOV A, TEMPER_GE

MOVC A, @

A DPTR

MOV P1, A

setb rs

clr rw

clr e

llamada D500us

setb e

RET

enrw: clr rs

clr rw

clr e

llamar D500us

setb e

ret

rwram: mov r1, #00h

a1: mov a, r1

movc a, @a dptr

call rwram2

inc r1

cjne a, #00h, a1

ret

rwram2: mov p1, a

setb rs

clr rw

clr e

llamar a D500us

setb e

ret

;******************R****** ****** *************************

;Subrutina de retardo

;*** * ********************************************

D500us:

MOV R6, #250; retardo 500us

DJNZ R6, $

RET

DELAY1: MOV R7 , #20H

DJNZ R7, $

RET

D100MS: MOV R6, #200

D2: MOV R5, #250

DJNZ R5, $

DJNZ R6, D2

RET

yjtab: db 'XRF MCS-51', 00h

yjtab1: db 'temperatura: **`C', 00h

ASCII: DB 30H, 31H, 32H, 33H, 34H, 35H, 36H, 37H, 38H, 39H

fin