Red de conocimiento informático - Material del sitio web - Programa DS18B20 basado en 51 microcontroladores (pantalla de tubo digital)

Programa DS18B20 basado en 51 microcontroladores (pantalla de tubo digital)

¡Consúltelo! Experimento completo del sistema de visualización de temperatura digital 18B20: uso de 18B20 (adquisición de temperatura digital) 74LS47 (decodificación de tubo nixie) 74LS138 (decodificación tres-ocho) DS18B20 es una temperatura digital de una línea producida por DALLAS Company El sensor tiene un paquete de pequeño volumen TO-92 de 3 pines, el rango de medición de temperatura es de -55 °C ~ +125 °C, programable para una precisión de conversión A/D de 9 bits a 12 bits; La resolución de medición puede alcanzar 0,0625 °C. La temperatura se emite en serie en un formato digital de 16 bits con signo extendido. El control de host DS18B20 debe pasar por tres pasos para completar la conversión de temperatura: inicialización, instrucciones de operación de ROM e instrucciones de operación de memoria. Primero debe iniciar el DS18B20 para iniciar la conversión y luego leer el valor de conversión de temperatura. Este programa solo conecta un chip, utiliza la precisión de conversión predeterminada de 12 bits y se conecta a una fuente de alimentación externa. El byte de orden superior del valor de temperatura leído se envía a la unidad WDMSB y el byte de orden inferior se envía. a la unidad WDLSB Luego, de acuerdo con el formato de representación del byte del valor de temperatura y su El bit de signo se puede utilizar para obtener el valor de temperatura real después de una simple transformación. Pines de DS18B20: diagrama esquemático 18b20 En este sistema: para simplificar el programa, se utilizan 74LS47 (decodificación de tubo digital) y 74LS138 (decodificación tres-ocho). Es decir, los cuatro puertos P0.0, P0.1, P0.2 y P0.3 del puerto P0 están conectados al 74LS47 para la decodificación del tubo digital por hardware y luego se envían al puerto de datos JP5 de la parte del tubo digital. .

Los tres puertos P0.4, P0.5 y P.0.6 están conectados al 74LS138 para decodificar 38 y luego salen al control de bits JP8 del tubo digital. Diagrama esquemático completo del sistema: Este programa mide el rango de temperatura: 0 ~ 125 grados, precisión de 0,06;

DAT BIT P3.0; puerto de comunicación de datos

WDLSB DATA 30H; lectura de byte bajo de temperatura

WDMSB DATA 31H ; leer el byte de temperatura alta

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

ORG 0000H

LJMP MAIN

ORG 000BH

SJMP TIMER0 ;Visualización de tiempo

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

;Subrutina de visualización de tiempo, utilizar método de escaneo circular

; Mostrar buffer 40H~47H

ORG 0040H

TIMER0:

MOV P0,40H; El último Se envía el valor del bit p0

ORL P0,#70H; ilumina el último dígito

CALL T1MS

MOV P0,41H

ORL P0,#60H

LLAMADA T1MS

MOV P0,42H

ORL P0,#50H

LLAMADA T1MS

MOV P0,43H

ORL P0,#40H

MOV TH0,#LOW(65536-10000) ;Temporizador 10MS interrupción

MOV TL0, #HIGH(65536-10000)

RETI

T1MS: movr5,#00h;subrutina de retardo

tt :movr6,#9

djnzr6,$

djnzr5,tt

ret

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

;Programa principal:

PRINCIPAL: MOV SP,#60H

MOV P2,#0FFH

MOV R2,#8

MOV R0,#40H ;

OVER: MOV @R0,#00H

INC R0

DJNZ R2,OVER

MOV TMOD,#01H

p>

MOV TH0,#BAJO(65536-10000)

MOV TL0,#ALTO(65536-10000)

SETB EA

SETB ET0

SETB TR0

LOOP: LCALL DSWD ;Llamada para leer el programa de temperatura DS18B20

SJMP LOOP ; Lea el programa de temperatura DS18B20

DSWD:

CLR EA

LCALL RST

JNB F0,KEND; si no hay respuesta , regrese al programa principal

MOV R0,#0CCH

LCALL SEND_BYTE ;Omitir coincidencia de ROM

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

LCALL SEND_BYTE

SETB EA

MOV P1,#00001111B

MOV 48H,#1 Listo para leer después de 75 ms o más<

/p>

SS2: MOV 49H,#255

SS1: MOV 4AH,#255

SS0: DJNZ 4AH,SS0

DJNZ 49H, SS1

DJNZ 48H,SS2

MOV P1,#11111100B

CLR EA

LCALL RST

JNB F0,KEND

MOV R0,#0CCH ;Omitir coincidencia de ROM

LCALL SEND_BYTE

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

LCALL SEND_BYTE

LCALL READ_BYTE

MOV WDLSB,A

LCALL READ_BYTE

MOV WDMSB,A

LCALL TRANS12

KEND: mov p1,#01010101b

SETB EA

RET

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

;Programa de conversión de temperatura: precisión de: 0,06;

TRANS12:MOV A,30H

ANL A,#0F0H

MOV 3AH,A

MOV A,31H

ANL A,#0FH

ORL A,3AH

SWAP A

MOV B,#10

DIV AB

MOV 43H,A

MOV 42H,B ;

MOV DPTR ,#TABB

MOV A,30H

ANL A,#0FH

MOV B,#2

MUL AB

MOVC A,@A+DPTR

MOV 41H,A

MOV A,30H

ANL A,#0FH

MOV B,#2

MUL AB

INC A

MOVC A,@A+DPTR

MOV 40H,A

RET

TABB: DB 0,0,0,6,1,2,1,8,2,5,3,1,3,7,4,3, 5,0

DB 5,6,6,2,6,8,7,5,8,1,8,7,9,3

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

SEND_BYTE: ;Enviar un programa de bytes

MOV A,R0

MOV R5,#8

SEN3: CLR C

RRC A

JC SEN1

LCALL WRITE_0

SJMP SEN2

SEN1: LCALL WRITE_1

SEN2: DJNZ R5,SEN3 ; Realiza un bucle 8 veces, escribe un byte

RET

READ_BYTE: ;Lee el programa de un byte

MOV R5,#8

READ1: LCALL READ

RRC A

DJNZ R5,READ1; bucle 8 veces, lee un byte

MOV R0,A

RET

;Resetear programa, si F0 se resetea, resetear F0 si no

RST: SETB DAT

NOP<

/p>

NOP

CLR DAT

MOV R6,#250 El host envía un pulso de reinicio que dura 3μs×200=600μs

DJNZ R6 ,$

MOV R6, #50

DJNZ R6,$

SETB DAT El host libera el bus y la línea del puerto se cambia a entrada

MOV R6,#15

DJNZ R6,$

CALL CHCK ;Llama al programa de verificación de respuesta

MOV R6,#60

DJNZ R6 ,$

SETB DAT

RET

COMPROBAR: MOV C,DAT

JC RST0

SETB F0 ;Señal detectada, configure F0

SJMP CHCK0

RST0: CLR F0 ;No está listo para restablecer F0

CHCK0: RET

WRITE_0: ;Escribir 0

CLR DAT

MOV R6,#30

DJNZ R6,$

SETB DAT

RET

WRITE_1:CLR DAT ;escribir 1

NOP

NOP

NOP

NOP

NOP

SETB DAT

MOV R6,#30

DJNZ R6,$

RET

;Leer programa de datos de un bit

LEER: SETB DAT ;Restablecer al menos 1US primero para generar una señal de inicio de lectura

NOP

NOP

CLR DAT

NOP

NOP

SETB DAT ; p>

NOP

p>

NOP

NOP

NOP

NOP

NOP

NOP

MOV C,DAT

MOV R6,#23

DJNZ R6,$

RET

FIN