Solicitud urgente: Diseño de software en lenguaje ensamblador de controlador de temperatura y diagrama de circuito de hardware basado en el microcontrolador MCS-51
Capítulo 2 Diseño detallado del circuito de hardware
Características de rendimiento de DS18B20: 1. Adopte tecnología dedicada de bus único, que se puede utilizar a través de la línea del puerto serie o mediante otras I/ Puertos O La interfaz de línea y microcomputadora, sin pasar por otros circuitos de conversión, genera directamente el valor de temperatura medido (número binario de 9 bits, incluido el bit de signo 2. El rango de medición de temperatura es -55 ℃ -+ 125 ℃, y la medición). la resolución es 0.0625 ℃, 3, Contiene memoria ROM de solo lectura corregida con láser de 64 bits, 4. Se adapta a varios microcontroladores o computadoras del sistema, 5. Los usuarios pueden configurar los límites superior e inferior de cada temperatura por separado, 6. Contiene energía parásita suministrar. Modo de conexión del sensor de temperatura DS18B20: en el modo de fuente de alimentación parásita, DS18B20 extrae energía de la línea de señal de un solo cable, almacena la energía en el capacitor interno cuando la línea de señal DQ está en un nivel alto y consume el capacitor durante el período en que la línea de señal está en un nivel bajo. La energía eléctrica funciona hasta que llega el nivel alto y luego se carga la fuente de alimentación parásita (condensador). Como se muestra en la Figura 2.3.
2.4 Diseño del circuito de reinicio
Este diseño utiliza reinicio manual. Un interruptor de botón se conecta en paralelo al circuito de reinicio automático de encendido. Cuando se presiona el interruptor, se activa un. Aparecerá alto voltaje en el extremo RST durante un período de tiempo fijo, el dispositivo se reinicia.
2.5 Diseño del circuito oscilador de cristal
2.6 Circuito de interfaz entre el sensor de temperatura DS18B20 y el microcontrolador
DS18B20 se puede alimentar de dos maneras, una es usar fuente de alimentación modo, en este momento, el pin 1 de DS18B20 está conectado a tierra, el pin 2 se usa como línea de señal y el pin 3 está conectado a la fuente de alimentación. El otro es un método de suministro de energía parásito. Como se muestra, el puerto del microcontrolador está conectado a un bus de un solo cable. Para garantizar que se proporcione suficiente corriente dentro del ciclo de reloj efectivo DS18B20, se puede usar un tubo MOSFET para completar el pull-up. del autobús.
Cuando DS18B20 está en operación de escritura de memoria y operación de conversión A/D de temperatura, debe haber un fuerte pull-up en el bus y el tiempo máximo de encendido de pull-up es 10us. Cuando se utiliza el modo de fuente de alimentación parásita, el terminal VDD está conectado a tierra. Dado que el sistema de un solo cable tiene un solo cable, la interfaz de envío debe ser de tres estados.
2.7 Circuito de hardware general del sistema de medición de temperatura
Wei1 BIT P3.0;;Tubo digital No.1
Wei2 BIT P3.1;;Tubo digital No.1 2 bits
Wei3 BIT P3.2;;El tercer bit del tubo digital
Wei4 BIT P3.3;;El cuarto bit del tubo digital
Dian EQU 20H ;;Byte de guardado del estado del punto decimal
DisData1 EQU 30H ;;Los datos de visualización del primer dígito
DisData2 EQU 31H ;;Los datos de visualización del segundo dígito
DisData3 EQU 32H ;;Muestra datos en el tercer dígito
DisData4 EQU 33H ;;Muestra datos en el cuarto dígito
DisTime EQU 34H ;;Lee el valor de temperatura después de configurar la pantalla varias veces
;;Definición de etiqueta de unidad de almacenamiento de datos de temperatura
TempL EQU 35H;;Bit de temperatura alta
TempH EQU 36H;;Bit de temperatura baja
;;Con unidad de memoria de pieza de comunicación DS18B20 y definición de etiqueta
DS18B20 BIT P1.0;;Dirección de bit para comunicación con DS18B20
RFail BIT 21H.0; ;Restablecer indicador de fallo
Var EQU 22H ;;Byte variable, utilizado en el procesamiento de datos de temperatura
Var2 EQU 3FH ;;Byte variable
Parte principal del programa:
ORG 00H
INICIO LJMP
ORG 100H
INICIO: ;;-----Inicialización
MOV SP,# 60H ;;Inicializar puntero de pila
Set18B20:;;-----Inicialización de DS18B20
;;Restablecer DS18B20
Restablecer ACALL p>
JB RFail,LOOP ;;Si el reinicio falla, salte directamente a la parte de la pantalla
;;Emita el comando Saltar ROM a DS18B20
MOV A,#0CCH p>
Escritura ACALL
;;Emitir comando de conversión de temperatura a DS18B20
MOV A,#44H
Escritura ACALL
SetDisT:MOV DisTime,# 3 ;;Establece el siguiente cuerpo del bucle para que se repita 8 veces
LOOP:
ACALL Display ;;Display
JB RFail,Set18B20 ;;Cuando DS18B20 no se reinicia, reinicie después de mostrar una vez
DJNZ DisTime,LOOP
JNB DS18B20,$ ;;Juzgue si DS18B20 ha completado la conversión de temperatura
ACALL GetTemp ;; Lee el valor de temperatura de DS18B20
ACALL DealTemp ;;Procesamiento del valor de temperatura
ACALL SendDisDT ;;Configura el contenido de la pantalla de acuerdo con el estado actual del sistema
SJMP SetDisT ;;; ;;;;
;;Establece los parámetros de visualización para el módulo de visualización según el estado actual
SendDisDT:
MOV Dian ,#7FH ;;El bit más alto es 0. Mostrar punto decimal
;;Enviar valor de temperatura
MOV A,TempH ;;Enviar datos de orden superior
MOV VAR,TempL ;;Enviar datos de orden inferior
ACALL TransData
RET
;;A
Guarde el valor de orden superior en Var y el valor de orden inferior en Var
TransData:
;;Obtenga el valor de las unidades
MOV B,#10
DIV AB
MOV DisData2,B
;;Obtener el valor de las decenas
JZ HavNot1 ;;Juzgar si el cociente es 0
MOV B,#10
DIV AB
MOV DisData3,B
JZ HavNot2 ;; Determinar si el cociente es 0
MOV DisData4 ,A
SJMP XiaoShu ;;Saltar a la sección de procesamiento de signos de centenas
HavNot1:MOV DisData3,#10 ;;No hay ningún número que comience con el dígito de las decenas
HavNot2: MOV DisData4,#10 ;;No hay ningún número a partir del dígito de las centenas
SignJudge:;;Parte de procesamiento de símbolos
JNB VAR.7,XiaoShu ;;El signo se muestra cuando es un número negativo
MOV A,#10
CJNE A,DisData3,BWSign
MOV DisData3 ,#11 ;;El signo negativo está en el lugar de las decenas
SJMP XiaoShu
BWSign:MOV DisData4,#11 ;;El signo negativo está en el lugar de las centenas
XiaoShu:;;En la parte de procesamiento decimal, utilice el método de búsqueda de tabla para obtener el valor decimal, con una precisión de 1 decimal
MOV A,VAR
ANL A, #0FH
MOV DPTR,#XSTab
MOVC A,@A+DPTR p>
MOV DisData1,A
RTransTemp: p>
RET
XSTab: DB 0,1,1,2,3,3,4, 4,5,6,6,7,8,8,9,9
Grupo de módulos de comunicación DS18B20
-------Restablecer módulo
Restablecer: ;;Nivel alto de 3 microsegundos
SETB DS18B20 p>
MOV R7,#250
CLR RFail ;;Borrar indicador de error de reinicio
CLR DS18B20
;;Retraso 501uS
DJNZ R7,$
SETB DS18B20 ;;Libere el bus (tire de la línea de datos alta)
;;Espere a que DS18B20 responda exitosamente para reiniciar, el tiempo máximo de espera es 69uS
MOV R7,#17
Espere:
JNB DS18B20 ,RReset ;;Si DS18B20 responde exitosamente al reinicio, ya no espere
DJNZ R7,Espera
SETB RFail ;;DS18B20 responde exitosamente al reinicio dentro de 70uS y establece el indicador de falla de reinicio en 1
RReset:
;;Delay 350Us
MOV R7,#174
DJNZ R7,$
SETB DS18B20
RET
/
;;-------Un módulo que escribe una palabra en DS18B20 y el contenido a escribir se carga en ACC por adelantado Medio
Escribir:
MOV R6,#8 ;Escribir 8 bits
WriteBit:
;;2 microsegundos de alto nivel
SETB DS18B20
MOV R7,#3
;;Nivel bajo de 7 microsegundos
CLR DS18B20
DJNZ R7,$
;; el bit bajo de ACC se envía a DS18B20
RRC A
MOV DS18B20,C
;;Retraso 60Us
MOV R7,#28
DJNZ R7,$
;;Si se han escrito 8 dígitos p>
DJNZ R6,WriteBit
RWrite:
SETB DS18B20
RET
/
; ;-------Leer un byte de contenido de DS18B20 y cargar el contenido leído en ACC
Leer:
MOV R6,#8 ;; Leer retorno 8 bits
MOV A,#0 ;;El contenido leído se carga en ACC
ReadBit:
;;Nivel alto de 2 microsegundos
p>SETB DS18B20
MOV R7,#7
;;Nivel bajo de 2 microsegundos
CLR DS18B20
NOP
;;Nivel alto de 16 microsegundos
SETB DS18B20
DJNZ R7,$
;;Leer un bit Los datos se colocan en ACC
MOV C, DS18B20
RRC A
;; Retraso 66Us
MOV R7, #33 p>
DJNZ R7,$
;;¿Se han leído 8 bits?
DJNZ R6,ReadBit
RRead:
SETB DS18B20 p>
RET
/
;;-------Comuníquese con DS18B20, vuelva a leer el valor de temperatura de dos bytes e instálelo Ingrese TempL y TempH en ACC
GetTemp:
ACALL Reset;;Reset
JB RFail,RGetTemp;;Juzgue si el reinicio fue exitoso
; ;Reinicio exitoso
;;Emitir comando Saltar ROM a DS18B20
MOV A,#0CCH
ACALL Write
;Emitir a comando de lectura a DS18B20
MOV A,#0BEH
ACALL Write
;;Vuelva a leer el valor de temperatura inferior de 8 bits de DS18B20
ACALL Read
MOV TempL,A
;;Vuelve a leer el valor de temperatura alta de 8 bits de DS18B20
ACALL Read
MOV TempH,A
ACALL Reset ;;Reset
JB RFail,RGetTemp ;;Determinar si el reinicio es exitoso
;;Emitir el comando Saltar ROM a DS18B20
MOV A,#0CCH
Escritura ACALL
;;Emitir comando de conversión de temperatura a DS18B20
MOV A,#44H
ACALL Write
RGetTemp:
RET
Módulo de procesamiento de datos de temperatura
DealTemp:
;; Mueve la parte binaria del entero a un byte y mueve el bit de signo y la parte decimal a un byte
MOV R1,#Var
MOV Var,TempH
MOV A,TempL
>
p>
JNB Var.7,NotNeg ;;Determina si es un número negativo
CPL A ;;Si es un número negativo, inviértelo y suma 1 para obtener su valor absoluto
;;Negación parcial decimal
XRL Var,#1FH ;;
INC Var
NotNeg:
MOV TempH,A
MOV TempL,Var
RET
Módulo de visualización
-------Display los tres bytes desde el principio de DisData(30H) Guardar información de visualización
Mostrar:
MOV DPTR,#Tab
;;**Mostrar parte decimal
MOV A,DisData1
MOVC A,@A+DPTR
MOV P2,A
CLR Wei1
Retardo ACALL
SETB Wei1
;;**Dígito de unidades de visualización
MOV A,DisData2
MOVC A,@A+ DPTR
;;Procesamiento de punto decimal
ANL A,Dian
MOV P2,A
CLR Wei2
ACALL Delay
SETB Wei2
;;**Mostrar dígitos de decenas
MOV A,DisData3
MOVC A,@A+ DPTR
MOV P2,A
CLR Wei3
ACALL Retraso
SETB Wei3
;;** Mostrar dígitos de centenas
MOV A ,DisData4
MOVC A,@A+DPTR
MOV P2,A
CLR Wei4 p>
ACALL Delay
SETB Wei4
RET
Pestaña: ;;0~9, en blanco, código negativo
DB 0C0H,0F9H,0A4H,0B0H,99H ,92H,82H,0F8H,80H,90H,0FFH,0BFH
;;Retraso
Retraso:
MOV R6,#6
DD1:MOV R5,#250
DJNZ R5,$
DJNZ R6,DD1
RET
FIN
No puedo insertar imágenes aquí. Tengo un conjunto completo de informes de diseño de cursos para esto. Si quieres contactarme, mingchaofu@126.com