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
;***************** ************ ************************************* p>
;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 p>
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
;******** ********* **************************************** p>
;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 p>
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 p>
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 p>
MOV R6,#15
DJNZ R6,$
CALL CHCK ;Llama al programa de verificación de respuesta
MOV R6,#60 p>
DJNZ R6 ,$
SETB DAT
RET
COMPROBAR: MOV C,DAT
JC RST0 p>
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 p>
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 p>
NOP
CLR DAT
NOP
NOP
SETB DAT ; p>
NOP
p>NOP
NOP
NOP
NOP
NOP p>
NOP
MOV C,DAT
MOV R6,#23
DJNZ R6,$
RET p>
FIN