Red de conocimiento informático - Material del sitio web - Sistema de control de temperatura basado en 51 microcontroladores y termistor

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

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

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>

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

DB 95H, 03H, 7CH, 03H, 64H, 03H, 4CH, 03H