Red de conocimientos turísticos - Conocimientos sobre calendario chino - Programación de controlador de tiempo de trabajo y descanso programable

Programación de controlador de tiempo de trabajo y descanso programable

Programa principal: al comienzo del programa, primero inicialice, establezca el permiso de la fuente de interrupción en 0, el permiso total en uno, el modo de funcionamiento de los dos temporizadores en un modo, todo el programa está conectado a nivel bajo mediante P2.6 Inicio, después de comenzar, ingrese a la sección A de trabajo. La subrutina de visualización se llama en el trabajo corto A. Cuando se completa la sección A, ingresa a la sección B. La subrutina de visualización se llama durante cada sección del trabajo. Cuando se completa la última sección del trabajo, la pantalla se apaga. es decir, 0FFH se envía a P2

Mostrar subrutina: Primero, asigne un valor inicial al temporizador y luego divida la palabra dividiendo por diez. Después de dividir por diez, envíe el cociente. y el resto a la unidad de búfer de visualización, y luego verifique el código de siete segmentos. Envíe el código de siete segmentos a P1 y envíe el puerto de bits de palabra al puerto P2 para visualización dinámica. Cada vez que se muestra un bit, se retrasa. por 255 ciclos de instrucción (es decir, ciclos de instrucción FFH) Después de que se muestren los cuatro bits, realice un escaneo varias veces para asegurarse de que el ojo humano no pueda ver el parpadeo. Finalmente, se juzga si el tiempo de trabajo establecido ha finalizado. cuando esté activado, aparecerá la subrutina de visualización.

Programa de interrupción: después de ingresar la interrupción, se emite una señal de alarma, la pantalla muestra 0 y finalmente se sale de la interrupción.

Cuarto: Procedimiento y descripción:

1. Programa:

ORG 0000H

LJMP PRINCIPAL

ORG 0003H

LJMP BAOJING

ORG 0010H

;Programa de inicialización

MAIN:SETB EA ;Establecer interrupción

SETB EX0

CLR IT0

MOV TMOD,# 11H ; Configurar el modo de funcionamiento del temporizador

SETB P3.4

SETB P3.5

SETB P3.6

SETB ; P3.7

AQUÍ:JB P2.6,AQUÍ ;Determinar si comenzar

;Ingresar a la etapa de trabajo

GONGZUO:MOV 41H,#0AH ; Trabajando en el segmento A

MOV R7,#0AH; Tiempo de trabajo del segmento A

CLR P3.4; Conducir relé externo

LCALL SCAN Ajustar el programa de visualización<; /p>

p>

SETB P3.4; Apagar la unidad externa

MOV 41H, #0BH; Trabajar en el segmento B

MOV R7, #14H; Tiempo de trabajo del segmento B

p>

CLR P3.5; Conducir relé externo

LCALL SCAN; Ajustar programa de visualización

SETB P3.5; apagado de unidad externa

MOV 41H, #0CH ; trabajando en el segmento C

MOV R7, #1EH ; tiempo de trabajo en el segmento C

CLR P3.6; Conducir relé externo

LCALL SCAN; ajustar el programa de visualización

SETB P3.6; apagar la unidad externa

MOV 41H, #0DH Trabajar en el segmento D<; /p>

MOV R7, #28H

CLR P3.7; Relé externo del variador

LCALL SCAN; Ajustar programa de visualización

SETB P3.7 ; Apagar el disco externo

MOV P2,#0FFH ;Apagar la pantalla

LJMP AQUÍ ;Volver al punto de evaluación para determinar si continuar trabajando

;Interrumpir el programa de alarma

BAOJING: MOV P2.4,#00H La luz indicadora está encendida

Mov P2.5,#00H

MOV TL0,#0E0H ; Temporización 20ms

MOV TH0,#0B1H

SETB TR0 ;

LP:MOV P1,#3FH ; todo se muestra como cero

MOV P2,#00H

MOV P2.5,#00H altavoz funcionando

JNB TF0,LP; compruebe si el tiempo de sincronización ha expirado

SETB P2.4; apague la luz indicadora

SETB P2.5;

RETI

;Mostrar subrutina

ORG 0F00H

SCAN: MOV 42H,#0EH ;Código de siete segmentos de "—" (línea horizontal)

MOV R1,#32H; Constante de retardo

MOV TL1,#0E0H; Constante de tiempo de 20 ms

MOV TH1,#0B1H

LP1: MOV A ,R7 ;Programa de división de palabras (usando división para dividir palabras)

MOV B,#10

DIV AB

MOV 43H,A ;Enviar a la unidad de búfer de visualización

MOV 44H,B

LP2: MOV R0,#41H ;Establecer la unidad inicial del búfer de visualización

MOV R4,# 0FFH ;Retardo constante

MOV R5,#0FEH ;Enviar puerto de bit de palabra

LP3: MOV A,@R0

MOV P2,#0FFH ;Pantalla apagada

MOV DPTR ,#TAB ;Comprueba el código de siete segmentos y muestra

MOVC A,@A+DPTR

MOV P1,A

MOV P2,R5

LP4: DJNZ R4,LP4

INC R0 ;Modificar puntero

MOV A,R5 ;Cambiar unidad de visualización

RL A

MOV R5,A

JB ACC.4,LP3 Determinar si se han mostrado los cuatro dígitos

SETB TR1; timer

JNB TF1,LP2 ;Juzga si ha llegado el temporizador

DJNZ R1, LP2 ;Si ha llegado el retraso de un segundo

DJNZ R7,LP1 ;Juzga si ha llegado la hora establecida

RET

ORG 10FF

H

;Código de siete segmentos

TAB: DB 3FH, 06H,5BH, 4FH, 66H,6DH, 7DH

DB 07H, 7FH,6FH , 77H, 7CH, 39H, 5EH, 40H

2 Descripción:

Programa principal: Suponga que todo el sistema tiene cuatro etapas de trabajo, divididas en secciones ABCD y el funcionamiento. El tiempo de cada sección se establece en 10S, 20S, 30S, 40S. En la etapa de inicialización del programa, se configura el modo de trabajo y el permiso de interrupción del temporizador. La operación del programa se inicia conectando el pin P2.6 de. el microcontrolador a un nivel bajo y entra en la etapa de trabajo. Se muestra en cada etapa de trabajo. Número de segmentos de trabajo y tiempo de trabajo restante.

Cuando trabaje en el segmento A, envíe el carácter "A" a la unidad buffer de visualización 41H, luego configure el tiempo de trabajo del segmento A, envíelo al registro R7 y configure el voltaje de trabajo del correspondiente pin de salida. Valor promedio, luego llame a la subrutina de visualización. Una vez completado el trabajo de la sección A, cierre el pin de salida de la unidad correspondiente.

El trabajo de las secciones B, C y D es similar al de la sección A, excepto que controlan diferentes objetos de salida. Una vez completada la última sección de trabajo, asigne un nivel alto al puerto P2. , apague todas las pantallas y finalmente retroceda Punto de juicio, decida si continúa trabajando.

Subrutina de visualización: en la subrutina de visualización, debido a que "—" debe mostrarse durante cada sección de trabajo, el número de serie correspondiente de "—" se muestra al principio (en la tabla de códigos de siete segmentos de este programa El número de serie correspondiente es 0EH) se envía a la unidad de búfer de visualización y se asigna un valor inicial al temporizador T1 durante 20 ms. La fórmula para calcular el valor inicial es:

Valor inicial de T1=. 2^n-fosc/12×t

Dado que el temporizador funciona en 1 modo y la frecuencia de oscilación es de 12 MHZ, el valor inicial del temporizador T1 es: E0B1 (hexadecimal)

Dividir el tiempo establecido y luego se envía a la unidad de búfer de gráficos. La división de palabras se realiza por división. El tiempo de sincronización se envía al registro A y luego la constante 10 se envía a B. Después de la división, el bit alto en el registro A se envía al búfer de visualización 43H y el bit bajo en el registro B. se envía al búfer de visualización En la unidad del búfer 44H, el puntero de la unidad del búfer de visualización primero apunta a la primera dirección del búfer de visualización. El código de siete segmentos correspondiente se consulta a través del método de direccionamiento de índice y se envía al puerto P1 (fuente). puerto). El puerto P2 se envía al puerto de bit de palabra. Después de mostrar cada bit, hay un retraso de 255 ciclos de instrucción antes de ingresar al siguiente paso de trabajo. Después de que se muestre cada bit, modifique el puntero de la unidad de visualización, agregue uno al valor actual de la unidad del puntero, luego mueva el puerto de bits de palabra hacia la izquierda, modifique la unidad de visualización y luego juzgue si se han mostrado los cuatro bits. , es decir, determine el valor del puerto de bit de palabra si el quinto bit es 1, si es 1, el programa se transferirá y la pantalla continuará, si es 0, se ejecutará en secuencia; Después de que se muestren los cuatro dígitos, inicie el temporizador 1 durante 20 ms y consulte el valor de TF1. Si TF1 es 0, espere aquí. Si TF1 es 1, entonces R1 se reduce en 1 y determina si es 0. Si no es 0. Luego transfiéralo a la parte de visualización, si es 0, ejecútelo secuencialmente (es decir, cuando llegue 1S, determine si se alcanza 1S, R7 se reducirá en 1 y juzgará si R7 es 0. Si no es así); 0, transfiéralo a la parte de división de palabras. Si es 0, salte de la llamada (es decir, determine si cada tiempo de trabajo alcanza el tiempo establecido).

Programa de interrupción: Si hay una falla externa (la falla externa se indica conectando P3.2 al nivel bajo), P2.4 y P2.5 se conectan al nivel bajo (es decir, una señal de alarma sale, la luz indicadora está encendida y el altavoz emite sonido), asigne un valor inicial de 20 ms cuando el temporizador configura T0. La fórmula de cálculo es:

Valor inicial de T0=2^n-fosc/. 12×t

Dado que el temporizador funciona en modo 1, la frecuencia de oscilación es de 12 MHZ, por lo que el valor inicial del temporizador T1 es: E0B1 (hexadecimal)

Envía el código de siete segmentos de "0" al puerto P1 y envíe 00 al puerto P2. Cada unidad de visualización muestra todos los 0. Inicie el temporizador. Si el temporizador no llega, vaya a la pantalla y continúe mostrando todos los 0. , envíe alta potencia a todos los P2.4 y P2.5, apague el aviso de alarma, interrumpa y regrese.

Formulario de código de siete segmentos: defina el código de siete segmentos de números o letras que se mostrarán en un formulario en el orden predeterminado en la vida diaria. Pague la primera dirección del formulario a DPTR y luego agregue. la información que debe mostrarse, el número de serie correspondiente del número o letra se envía al registro A, y el código de siete segmentos correspondiente se puede encontrar mediante el método de direccionamiento de índice (es decir, instrucción MOVC). ¡Espero que sea adoptado! ! Tardé mucho en encontrar el plato

div>