Sistema de control de temperatura basado en 51 microcontroladores y termistor
Aquí tienes un sitio web
Puedes echarle un vistazo
/TechSheet/67.htm
El proceso de trabajo de este El programa es el siguiente:
; 1. Inicialice primero después del encendido. Después de la inicialización, se muestra "P" durante 1 segundo, lo que solicita al sistema que ingrese al estado de funcionamiento de prueba. Después de que se complete la pantalla, realice. una prueba de temperatura.
; 2. El proceso de prueba de temperatura es el siguiente:
; * T0 se configura en modo de conteo y los pulsos del pin T0 (es decir, P3.5) se cuentan y funcionan. modo 2, el valor inicial es 255
* Configure T1 en modo de sincronización, modo de trabajo 2, y el valor inicial es 0
* Envíe un pulso de disparo monoestable desde el P3; .4 puerto para hacer pulso monoestable de salida 555 (pulso positivo), el ancho del pulso cambia con la resistencia de la resistencia térmica.
; * Activa las interrupciones T0 y T1 e inicia T0 y T1. En este momento, T1 cuenta automáticamente los ciclos internos de la máquina. Cuando TL1 se desborda, se genera una interrupción de T1. En el manejador de interrupciones T1, agregue 1 a la unidad RAM 21H (es decir, la unidad 21H almacena el bit alto del valor de conteo de ancho de pulso) y luego regrese al programa principal.
; * Cuando finaliza el pulso monoestable de P3.5 (es decir, llega el flanco descendente), el contador TL0 aumenta en 1 y se desborda, generando una interrupción T0.
; En el manejador de interrupciones T0, desactive las interrupciones T0 y T1 y lea el contenido en TL1
en la unidad RAM 20H (la unidad 20H almacena los bits bajos del valor de recuento de ancho de pulso).
; * Busque la tabla para encontrar el valor de temperatura
; NTTAB es una tabla de comparación entre el valor de conteo de ancho de pulso y la temperatura, que se almacena en el orden de temperatura baja a alta. temperatura, es decir, primero, tercero >
La segunda unidad almacena el valor de conteo de ancho de pulso a -100 C, y así sucesivamente las unidades 121 y 122 almacenan el valor de conteo de ancho de pulso a 500 C
;
; Compare los valores de conteo en 20H y 21H con los valores de conteo en NTTAB en secuencia hasta que los valores en 20H y 21H sean menores que el conteo; valor en NTTAB. El número de comparaciones corresponde al valor entero de la temperatura, dos conteos
el cociente de la diferencia entre el valor y los dos valores adyacentes en la tabla de comparación es el decimal.
; 3. Además de realizar pruebas de -100 °C a 500 °C, el programa también incluye detección de circuito abierto (el valor de conteo es demasiado grande), detección de cortocircuito (el valor de conteo es demasiado pequeño) y detección de sobretemperatura negativa. , detección positiva de sobretemperatura y visualización correspondiente.
; 4. Muestra el valor de detección (valor de temperatura u otros resultados) durante 1 segundo y luego repite la detección de temperatura.
Cabe señalar que si bien este programa incluye todo el proceso de medición de temperatura, no considera el autotest de software y hardware, filtrado de software, etc.
;
; Los parámetros del condensador C4 y el termistor RT determinan el ancho del pulso monoestable, y el valor de conteo final no solo está relacionado con el ancho del pulso monoestable, sino también con el oscilador de cristal. a la frecuencia, por lo que después de determinar el modelo RT, el valor de C4 debe seleccionarse de acuerdo con los requisitos de precisión y resolución del sistema. La tabla de comparación entre el valor de recuento de ancho de pulso NTTAB y la temperatura en este programa es
. El termistor es un termistor de temperatura negativa MF53-1 más una resistencia de precisión de 12 K en paralelo, C4 es de 1 μ y el cristal. oscilador es
Obtenido bajo la condición de 4MHz. Los datos no son del todo exactos y son sólo de referencia.
Después de configurar los parámetros del componente, puede usar una caja de resistencia variable en lugar del termistor al depurar el programa, establecer un punto de interrupción en el valor de conteo medido por el programa y leer cada marca
p>
; Configure NTTAB usted mismo para el valor de conteo correspondiente al valor de cuasi resistencia (es decir, los contenidos en 20H y 21H).
; * * * * * * * * * * * * * * * * * * * * * * * *
* Medición de temperatura digital controlada por el instrumento 89C2051. *
* Lista de programas fuente*
; * * * * * * * * * * * * * * * * * * * * * * * *
ORG 0000H
AJMP MAIN; transferir al programa principal
ORG 000BH
AJMP WT0 entrada de interrupción
ORG; 001BH
AJMP WT1; entrada de interrupción T1
; Programa principal
ORG 030H
PRINCIPAL: MOV IE, #00H;
MOV SP, #40H; Establezca el puntero de pila SP en 40H
SETB P3.5; Establezca el puerto P3.5 en "1"
MOV 30H, #0CH; "P3" envía el búfer de visualización 30H~33H
MOV 31H, #0EH
MOV 32H, #0EH
MOV 33H, #0EH p>
MAIN0: ACALL D1S; subrutina para ajustar la pantalla durante 1 segundo
MOV P1, #0FFH; apagar la pantalla
CLR 20H; borrar el área de almacenamiento del valor del recuento de ancho de pulso 20H~21H
CLR 21H
CLR 22H; Listar indicador de fin de pulso estable 22H
MOV TH0, #0FFH Establecer el valor inicial del recuento T0 255
MOV TL0, #0FFH
MOV TH1, #00H Establece el valor de conteo inicial de T1 en 0
MOV TL1, #00H
MOV TMOD, #26H; Establezca T0 como modo de conteo, modo 2;
Modo 2
SETB EA; habilitar interrupciones T0 y T1
SETB ET0
SETB ET1
SETB TR0 habilitar interrupción T0
p>p>
CLR P3.5; Enviar pulso de disparo monoestable
NOP
NOP
NOP
NOP
SETB P3.5
SETB TR1; activa la interrupción T1
MAIN1: CJNE 22H, #01H, MAIN2; compruebe si se ha agotado el tiempo de espera
p>AJMP MAIN3; después de que finalice el pulso monoestable, transfiera al valor de recuento de ancho de pulso
MAIN2: CJINE 21H, #08H, MAIN1; , transferir para esperar el final del pulso monoestable
CLR EA
CLR ET0
CLR ET1
CLR TR0
CLR TR1
MOV 30H, #0DH; el mensaje de circuito abierto "E1" se envía al búfer de visualización y se transfiere a la pantalla
MOV 31H, #01H
MOV 32H, #0EH
MOV 33H, # 0EH
AJMP MAIN0
MAIN3: CJNE 21H, #00H, MAIN4; finaliza el pulso, primero determine si hay un cortocircuito. No, el procedimiento del formulario de transferencia.
MOV 30H, #0DH; cortocircuito, el mensaje de cortocircuito "E2" se envía al búfer de visualización y se transfiere a la pantalla
MOV 31H, #02H
MOV 32H, # 0EH
MOV 33H, #0EH
AJMP MAIN0
MAIN4: ACALL NTTR subrutina del cuestionario
AJMP MAIN0
; Subrutina para buscar el valor de temperatura de la tabla
NTTR: MOV R2, #00H; Borrar el registro de compensación R2 de la tabla de conteo y comparación de temperatura
MOV DPTR, NTTAB; DPTR apunta a la primera dirección de la tabla de comparación de temperatura y recuento
NTTR1: los contenidos en 20H y 21H se restan de NTTRB y se almacena la diferencia; en 23H y 24H
MOV R3, #02H
MOV R0, #20H
MOV R1, #23H
NTTR2: MOV A, R2
MOVC A, @ A DPTR
SUBB A,@R0
MOV @R1,A
INC R0
INC R1
INC R2
CJNE R2, #122, NTTR3; si no ha llegado al final de la tabla NTAB, continúa comparando
POVER: JC NTTR30; cuando llegue al final de la tabla, busque la temperatura correspondiente, consulte Valor de temperatura
MOV 30, #0EH; Encuentre la temperatura correspondiente. Si hay sobretemperatura, se enviará el mensaje "UUU" al búfer de visualización
MOV 31H, #0BH
MOV 32H, #0BH
.MOV 33H, #0BH
RET; volver al programa principal
NTTR3: DJNZ R3, NTTR2
JNC NTTR1 El valor de temperatura correspondiente tiene; no se ha encontrado, continúe buscando la tabla
NTTR30: MOV A, R2; se ha encontrado la temperatura correspondiente, la parte entera se calcula a partir del desplazamiento y R4 se almacena temporalmente.
p>CLR C
SUBB A, #02H
RR A
MOV R4, A
MOV R1, # 23H Encuentra la parte decimal del valor de temperatura: X/2 envía B
MOV A, @R1
CPL A
INC A
RR A
MOV B, A
NTTR4: DEC R2; DEC Ni 1 obtiene 20H, 21H
MOV R0, #21H
MOV A, R2
MOVC A, @A DPTR
MOV @R0, A
DEC R0
DEC R2
MOV A, R2
MOVC A, @A DPTR
MOV @R0, A
DEC R2; encontrar i/2 de A<; /p>
DEC R2
MOV R3, #02H
CLR C
NTTR5: MOV A, R2
MOVC A, @A DPTR
SUBB A, @R0
JNC NTTR50
CLP A
INC A
NTTR50: RR A
MOV R5, A
MOV A, B; x/2*10/ i obtiene la parte decimal del valor de temperatura
JZ NTTR6
MOV B, #05H
MUL AB
MOV B, R5
DIV AB
MOV 20H , A; la parte decimal se envía 20H
AJMP NTTR7
NTTR6: MOV 20H, #00H
NTTR7: MOV A, #0AH; la parte entera se considera positiva Aún negativa
CLR C
SUBB A, R4
JC PTEMP
NTEMP: CJNE A, #0AH, NTEMP1; es negativo
MOV 30H, #0EH; "-X" envía los tres bits superiores del búfer de visualización
MOV 31H, #0AH
MOV 32H, A
AJMP NTEMP2
NTEMP1: MOV 30H, #0AH; "-10" envía los tres bits altos del búfer de visualización
MOV 31H, #01H
MOV 32H, #00H
NTEMP2: MOV A, #0AH Después de corregir la parte decimal, cambie la parte decimal;
Envíe la pantalla más lenta a los tres dígitos inferiores
CLR C
SUBB A, 20H
MOV 33H, A
RET; volver al programa principal
PTEMP: MOV 30H, #0EH es positivo.
" "Envía el bit más alto del búfer de visualización
MOV A, R4 envía la parte entera del valor de temperatura a los dos bits centrales del búfer de visualización
MOV B, #; 0AH
DIV AB
JNZ PTEMP1
] MOV 31H, #0EH
JMP PTEMP2
PTEMP1: MOV 31H, A
PTEMP2: MOV 32H, B
MOV 33H, 20H la parte decimal se envía al bit más bajo del buffer de visualización
RET; ; volver al programa principal
; mostrar subrutina (muestra el contenido del búfer de visualización en un bucle. Después de que cada bit se muestre durante 1 ms, apague la pantalla y regrese al programa principal)
DSP: MOV R2, #01H
MOV R0, #30H
p>MOV DPTR, #TAB
DSP1: MOV A, @ R0
MOVC A, @A DPTR
MOV P1, A p>
ORL P3, R2
ACALL D1MS
MOV A, R2
RL A
MOV R2, A
CJNE R2, #10H, DSP2
ANL P3, #0F0H
RET
DSP2: INC R0
AJMP DSP1
; subrutina de retardo de 1 ms
D1MS: MOV R7, #166
D1MS1: DJNZ R7, D1MS1
RET
; Muestra subrutina durante 1 segundo
D1S: MOV R6 , #04H
D1S1: MOV R5, #250
D1S2: ACALL DSP
DJNZ R5, D1S2
DJNZ R6, D1S1
RET
; tabla de códigos de segmentos
TAB: DB 40H, 79H, 24H, 30H, 19H: 0., 1., 2., 3. , 4.
DB 12H, 02H, 78H, 00H, 10H: 5., 6 ., 7., 8., 9.
DB 3FH, 41H, 0CH, 06H , 0FFH: -., U., P., E., apagado
; Controlador de interrupciones T0
WT0: MOV A, TL1; envía el valor de recuento T1 20H
MOV 20H, A
CLR EA
;Desactivar interrupción
CLR TR0 ;T0 deja de contar
CLR TR1 ;T1 deja de contar
MOV 22H, #01H ;Establecer indicador de fin de pulso monoestable p>
p>
RETI; Volver al programa principal
; manejador de interrupciones T1
WT1: INC 21H Suma 1 al bit alto del ancho del pulso; valor de conteo
RETI; volver al programa principal
; tabla de comparación de temperatura y conteo de ancho de pulso
NTTBL: DB 0D0H, 05H, 0B2H, 05H, 96H , 05H, 72H, 05H
DB 52H, 05H, 35H, 05H, 15H, 05H, 0F6H, 04H
DB 0D8H, 04H, 0B9H, 04H, 9CH, 04H, 81H , 04H
DB 65H, 04H , 4AH, 04H, 30H, 04H, 14H, 04H
DB 0FAH, 03H, 0E0H, 03H, 0C6H, 03H, 0ADH, 03H p>
DB 95H, 03H, 7CH, 03H, 64H, 03H, 4CH, 03H