Red de conocimiento del abogados - Respuesta jurídica de la empresa - 51 experimento con microcontrolador (sobre el contador del temporizador)

51 experimento con microcontrolador (sobre el contador del temporizador)

;****************** Diseño de temporizador electrónico******************;

; *MCU: AT892051;

; *MCU-cristal: 12M;

; *Versión:

; 2007- 6-14;

; *Autor: zhaojun;

; *Descripción:

; y T0 son segundos para contar;

; S2 es la tecla de función, S3 es la tecla de selección de modo

;

;P3.2~P3.5 son selecciones de bits, P1.7 es el sonido de la alarma y P3.7 es el relé controlado;

;****** ********** *************************************;

;****** ************

; Pseudo definición;

;******* ***********

SL EQU 30H; SL almacena los dígitos individuales de segundos

SH EQU 31H SH almacena los dígitos de las decenas de segundos

ML EQU 32H; ML almacena minutos con dígitos individuales

MH EQU 33H; MH almacena los dígitos de las decenas de minutos

HL EQU 34H almacena los dígitos individuales

HH EQU 35H; dígito de decenas cuando se almacena HH

L0 EQU 36H; L0~L3: muestra la memoria de datos

L1 EQU 37H

L2 EQU 38H

L3 EQU 39H

DSPLYP EQU 3AH; Mostrar puntero de datos (DISPLAY-POINT)

PLYTS EQU 3BH; Mostrar contador de tiempos (DISPLAY-TIMES)

LPLMOD BIT 39H; Modo de visualización bajo de dos dígitos (LOW-PLAY-MOD)

HPLMOD BIT 3AH; Modo de visualización alto de dos dígitos (HIGH-PLAY-MOD)

BROCA BRILLANTE 3BH

; DISPLAY parámetro de subrutina: bit indicador de encendido/apagado

TCOUNT EQU 3CH; contador de tiempo (TIME-COUNT)

ADDRES EQU 3DH Añade 1 parámetro de subrutina

MAX EQU 3EH; Agregar 1 parámetro de subrutina

IFDEC BIT 20H; parámetro de subrutina adicional BCD

R_MOD EQU 3FH; parámetro de modo de anillo

LED4 BIT 30H; bit

BELL BIT P1.7; Zumbador

INTERRUPTOR BIT P3.7; Relé

FKEY BIT P3.0; >

MKEY BIT P3.1; Tecla de modificación (S2)

WORKIN BIT 38H; bit de indicación del estado de funcionamiento

;***** ******* ******

; Interrumpir entrada;

;******************

ORG 0000H

INICIO: LJMP MAIN; 0000H conduce al programa principal

LJMP ERR 0003H

NOP

NOP

LJMP ERR; conduce al controlador de errores

LJMP PGT0; 000BH conduce al controlador de interrupciones PGT0

NOP

NOP

LJMP ERR; conduce al controlador de errores

LJMP ERR; 0013H INT1

NOP

NOP

LJMP ERR

ERROR LJMP; 001BH T1

NOP

NOP

ERR LJMP

ERR LJMP 0023H

NOP;

NOP

ERR LJMP

ERR LJMP 002BH

NOP

NOP

;************

;Programa principal;

;********** ****

PRINCIPAL: MOV IE, #00H; Desactivar interrupciones

MOV SP, #57H; Establecer puntero de pila

MOV PSW, #00H;

M

OV TMOD, #11H; Establezca el modo de trabajo de interrupción en T0 y T1

MOV A, 56H

CJNE A, #0AAH, CSTART; Indicador de reinicio de encendido, sin indicador de arranque en frío

MOV A, 57H

CJNE A, #55H, CSTART sin indicador de arranque en frío

AJMP; HSTART ; Convertir a inicio en caliente con indicador de reinicio de encendido

NOP

NOP

LJMP ERR Trampa de software, lo que genera un controlador de errores

CSTART: MOV P1, #0FFH; arranque en frío, inicialización completa

MOV P3, #0FFH

MOV TCON, #00H; TL0, #0B0H; Asignar valor inicial a la interrupción T0

MOV TH0, #3CH

MOV TCOUNT, #0AH; Asignar valor inicial al temporizador

MOV R5 , #00H ; R5 es una unidad vacía (en espera)

MOV R4, #00H; R4 es el registro de selección del modo de trabajo

MOV SL, #00H la unidad de sincronización está borrada; /p>

MOV SH, #00H; segundos

MOV ML, #00H;

MOV MH, #00H; minutos

MOV HL, #00H;

p>

MOV HH, #00H; Hora

MOV PLYTS, #64H Asigna el valor inicial de los tiempos de visualización a 100 veces

MOV DSPLYP, #L0; El puntero de visualización apunta a la unidad de memoria de visualización

MOV L0, #0AH; Enviar datos de visualización "-----"

MOV L1, #0AH

MOV L2, #0AH

MOV L3, #04H

SETB LED4 es el diodo emisor de luz entre los tubos digitales

SETB LPLMOD; establece el modo de visualización en flash

SETB HPLMOD;

SETB BRIGHT; permitir visualización

Borrar indicador de trabajo, en espera

CONFIGURACIÓN DE AJMP; Cambiar para comenzar a trabajar

NOP

NOP

Trampa de software LJMP

HSTART; : MOV SCON, #00H; Con indicador de encendido, arranque en caliente, borrar registro de control de puerto serie

MOV IP, #00H Borrar registro de control de prioridad de interrupción

SETB FK;

EY; botón de reinicio

SETB MKEY

SETB EA; activar interrupción

AJMP BEGIN;girar para continuar trabajando

NOP

p >

NOP

LJMP ERR; trampa de software

CONFIGURACIÓN: SETB EA; activar interrupción

PRINCIPAL1: ACALL DISPLY; >

JB FKEY, JUDGE; Escaneo de teclas

ACALL KEYDLY; Eliminación de fluctuación de retardo

JB FKEY, JUDGE No se presiona ninguna tecla para girar y determinar si se alcanzó el punto

p>

CLR ET0; cuando se presiona la tecla de función,

CLR TR0 pausar el tiempo

ACALL MENU; llamar al programa de configuración del menú

BEGIN; : SETB WORKIN; Establecer indicador de trabajo, comenzar a trabajar

SETB ET0; Activar interrupción

Iniciar tiempo

MOV A, R4; selección de modo

RL A; amplificación del puntero

MOV DPTR, #M_TAB

JMP @A DPTR Saltar al segmento de programa correspondiente según el modo de trabajo

M_TAB: AJMP WORK1

AJMP WORK2

AJMP WORK3

AJMP WORK4

NOP

NOP

LJMP ERR; Trampa de software

TRABAJO1: ;

TRABAJO2: CLR SWITCH Modo de trabajo 1 y 2: relé abierto

AJMP MAIN2

NOP

NOP

ERR LJMP; Trampa de software

TRABAJO3: ;

TRABAJO4 : INTERRUPTOR SETB; Modo de trabajo 3 y 4: No abrir el relé

MAIN2: CLR BELL El timbre emitirá un pitido breve para indicar el inicio del trabajo

ACALL DL05S

SETB BELL

JUEZ: JNB WORKIN, MAIN1; Determina si está en tiempo

MOV A, SL Determina si el segundo es cero

JNZ MAIN1

MOV A, SH; Determinar si el segundo es cero

JNZ MAIN1

MOV A, ML

; Determinar si la puntuación es cero

JNZ MAIN1

MOV A, MH Determinar si la puntuación es cero

JNZ MAIN1

MOV A, HL; Si es cero al juzgar

JNZ MAIN1

MOV A, HH; Si es cero al juzgar

JNZ MAIN1; las horas, los minutos y los segundos son todos cero. Entonces

CLR ET0; Detener el cronometraje

CLR TR0;

ACALL ACTION Llame a la subrutina de trabajo punto a punto;

AJMP PRINCIPAL; Devolver

NOP

NOP

Trampa de software LJMP

; >

;****** ************

Programa de cuenta atrás;

;********; **********

PGT0: CLR EA; desactivar interrupción

PUSH ACC;proteger la escena

PUSH PSW

PUSH DPL

PUSH DPH

MOV PSW, #08H; Seleccione el grupo de registros 1

CLR TR0; > MOV A, #0B7H; Corrección de sincronización de interrupción

AGREGAR A, TL0

MOV TL0, A

MOV A, #3CH

ADD A, TH0

MOV TH0, A

SETB TR0; reanudar el tiempo

DEC TCOUNT El temporizador T0 se desborda cada 50 000 milisegundos, luego

MOV A, TCOUNT; Desbordamiento 10 El tiempo es 0,5 segundos

JNZ OUTT0; Determine si es medio segundo

MOV TCOUNT, #0AH;

CPL LED4; si es medio segundo, el LED está invertido

JNB LED4, OUTT0; cada LED parpadea durante un segundo

MOV R0, #SH; dirección del segundo dígito

SETB IFDEC; parámetro de subrutina BCD, lo que hace que realice la resta

ACALL ADDBCD; llama a la subrutina BCD, resta 1 en segundos

CJNE R3, #99H, OUTT0; Determina si es necesario tomar prestado el segundo

MOV SH, #05H; Si quieres tomar prestado un poco,

MOV SL, #09H; Envía datos 59 (de lo contrario, mostrará 99)

> MOV R0, #MH; Mover a la dirección de los bits

ACALL ADDBCD; Restar 1 de los puntos

CJNE R3, #99H, OUTT0; ser prestado

MOV MH, #05H

MOV ML, #09H

MOV R0, #HH

ACALL ADDBCD

OUTT0: POP DPH; Sitio de recuperación

POP DPL

POP PSW

POP ACC

SETB EA

RETI; retorno de interrupción

NOP

NOP

LJMP ERR; trampa de software

; >;**** **********************

; subrutina BCD (suma 1 o resta 1);

;* *************************

ADDBCD: MOV A, @R0; del operando

DEC R0; Disminuye el puntero en uno

SWAP A

ORL A, @R0; p>

MOV B, #01H; el registro B envía el número inmediato #01H

MOV C, IFDEC; si el indicador de resta es 1, entonces

MOV B.3, C;

MOV B .4, C; El valor del registro B se cambia a #99H

MOV B.7, C

ADD A; , B; Agregar #99H a un código BCD comprimido es igual a Restarle uno

DA A;ajuste del código BCD

MOV R3, A Almacenar temporalmente el resultado

ANL A, #0FH; Toma el código bajo

p>

MOV @R0, A; almacena el número

MOV A, R3;

INC R0; agrega uno al puntero

SWAP A ; Exchange

ANL A, #0FH Obtiene el bit alto del número de resultado

MOV @R0, A; almacenar el número

RET

NOP

NOP

trampa de software LJMP<; /p>

; ****************

; Agregar 1 programa;

;********* *****

ADDONE: MOV R0, DIRECCIÓN; Mover en el sumando;

Dirección de la unidad

CLR IFDEC; Establecer subrutina BCD para la suma

ACALL ADDBCD; Llamar a la subrutina BCD

Determinar si el sumando es mayor que

p>

MOV A, R3; valor máximo "MAX"

CJNE A, MAX, JGOVER

JGOVER: JC ENDADO

CLR A ; es mayor que "MAX", se borrará

MOV @R0, A

DEC R0

MOV @R0, A

ENDADO: RET

NOP

NOP

Trampa de software LJMP

;********* *** *******

; Ajuste de tiempo y programa de avance rápido;

;****************** *

QUICK: CLR LPLMOD; configura el modo de visualización para que no parpadee

CLR HPLMOD

ACALL ADDONE; > MOV L0, R4; Mueve el número de selección del modo de trabajo a la memoria de visualización

INC L0; agrega 1 y conviértelo en el valor de visualización

ACALL KEYDLY

ACALL DL100

JNB MKEY, QUICK; determina si la tecla está liberada

SETB LPLMOD; si se suelta, se restaurará el modo de visualización intermitente

CJNE R6, #02H, ENDQUK

SETB HPLMOD

CLR LPLMOD

ENDQUK: RET

NOP

NOP

LJMP ERR; trampa de software

;******************

; Programa de menú de funciones;

;***** *************

MENÚ: MOV R6, #00H; Inicialización R6 cuenta el número de pulsaciones de teclas de función;

MOV ADDRES, #05H; La dirección de R5 se envía para cambiar el valor de R4

MOV MAX, #04H Define el valor máximo del registro de selección del modo de trabajo R4;

MOV DSPLYP, #L0; Define el puntero de visualización Apunta a la memoria de video

SETB LPLMOD Establece los dos dígitos inferiores para que parpadeen

CLR HPLMOD

p>

MOV L0, R4; Enviar datos de visualización "F-0X"

p>

INC L0

MOV L1, #00H

MOV L2 , #0BH

MOV

L3, #00H

SETB LED4

WAITFK: ACALL DISPLY; esperar a que se suelte la tecla F

JNB FKEY, WAITFK

MENU1: ACALL DISPLY

JB MKEY, JGFKEY; escaneo de tecla M

ACALL KEYDLY; eliminación de retardo de fluctuación

JB MKEY, JGFKEY Si no se presiona, cambie a la tecla F; escaneando

CJNE R6, #00H, NEXT1

MOV SL, #00H Si el modo de sincronización se cambia a mitad de camino, los datos de sincronización originales se borrarán

> MOV SH, # 00H

MOV ML, #00H

MOV MH, #00H

MOV HL, #00H

MOV HH, #00H

NEXT1: MOV R2, #00H; R2 se usa para juzgar si el tiempo de pulsación de la tecla excede 0,5 segundos

NEXT2: ACALL ADDONE;

MOV L0, R4; Pasar al número de selección del modo de trabajo

INC L0

WAITMK: ACALL DISPLY; la tecla M que se liberará

INC R2; R2 aumenta en uno

CLR C

CJNE R2, #0C8H, JGQUIC si R2 es mayor que o; igual a 200, llame a la subrutina de avance rápido

JGQUIC: JC WATMK1

ACALL QUICK

WATMK1: JNB MKEY, WAITMK; espere a que se suelte la tecla M

JGFKEY: JB FKEY, MENU1; tecla de función (F) Scan

ACALL KEYDLY Eliminación de fluctuación de retardo

JB FKEY; , MENU1; si no se presiona la tecla, cambie al escaneo de la tecla de modificación (M)

INC R6; agregue 1 al número de pulsaciones de teclas

MOV A, R6; Moverse en el número de pulsaciones de teclas

RL A; ampliar el puntero

MOV DPTR, #FUNTAB

JMP @A DPTR; según el número de pulsaciones de teclas

FUNTAB: AJMP WAITFK

AJMP SETLOW

AJMP SETHI

AJMP ENDMEN

NOP

NOP

AJMP ENDMEN

; STWKMD: Configuración del modo de trabajo, no es necesario cambiar el menú por separado

SETLOW : MOV MAX, #60H;

Establezca el bit bajo (segundos o minutos)

MOV A, R4; pase al número de selección del modo de trabajo

Ampliación del puntero RL A

MOV DPTR, #FTAB1

JMP @A DPTR Salta al segmento de programa correspondiente según el número de selección del modo de trabajo

FTAB1: AJMP SETSS

AJMP SETM60

AJMP SETSS

AJMP SETM60

NOP

NOP

AJMP WAITFK

SETSS: MOV DSPLYP, # SL; Establezca el área de visualización en MM: SS

MOV ADDRES, #SH

AJMP WAITFK

SETM60: MOV DSPLYP, #ML; el área de visualización Para HH: MM

MOV ADDRES, #MH

AJMP WAITFK

SETHI: CLR LPLMOD Establezca el bit alto (minutos o bits de tiempo)

SETB HPLMOD; Los dos tubos digitales superiores parpadean

MOV MAX, #31H; El número máximo es 30

MOV A, R4; número de selección de modo

RL A ; amplificación del puntero

MOV DPTR, #FTAB2; Ir a la primera dirección de la tabla

JMP @A DPTR; el segmento de programa correspondiente según el número de selección del modo de trabajo

FTAB2: AJMP SETM30

AJMP SETHH

AJMP SETM30

AJMP SETHH

NOP

NOP

AJMP WAITFK; volver a esperar la liberación de la clave

SETM30: MOV DIRECCIÓN, #MH;

AJMP WAITFK; Gire para esperar la liberación de la clave

SETHH: MOV ADDRES, #HH; Mover en la dirección del bit de tiempo

AJMP WAITFK; para esperar a que se suelte la tecla

ENDMEN: CLR HPLMOD Reanudar sin parpadear Modo de visualización

RET

NOP

NOP

LJMP ERR; Trampa de software

;**** ************

; Procedimientos de trabajo de llegada;

;****************

ACCIÓN: MOV L0, R4; pasar al número de selección del modo de trabajo

INC L0; el número de pantalla "F-0X"

MOV L1

, #00H

MOV L2, #0BH

MOV L3, #00H

SETB LED4

MOV DSPLYP, #L0; Apunte a la memoria de video

SETB LPLMOD; configure el modo de visualización sin parpadear

SETB HPLMOD

MOV A, R4 Vaya al número de selección del modo de trabajo <; /p>

RL A;

MOV DPTR, #A_TAB

JMP @A DPTR; Saltar según el número de selección del modo de trabajo

A_TAB: AJMP ACTF1; Modo de trabajo uno

AJMP ACTF1; Modo de trabajo dos

AJMP ACTF3; Modo de trabajo tres

AJMP ACTF3; p> NOP

NOP

LJMP ERR; Trampa de software

ACTF1: SETB SWITCH; Modo de funcionamiento uno (o dos): Relé de apagado

MOV R_MOD, # 82H; parámetro de modo de timbre #82H

MOV R2, #96H; parámetro de tiempos de timbre #96H

ACTF11: ACALL RING; >

JNB MKEY, ENDACT; Espera a que se presione la tecla

JNB FKEY, ENDACT; Finaliza el timbre cuando se presiona la tecla

DJNZ R2, ACTF11; suena si no se alcanza el número de veces

p>

MOV R_MOD, #0FFH; el parámetro #0FF desactiva el timbre

AJMP ACTF11 Regreso sin presionar tecla

> NOP

NOP

ERR LJMP; trampa de software

ACTF3: INTERRUPTOR CLR; modo de trabajo tres (o cuatro): relé abierto

> CLR BELL; el zumbador suena una vez

ACALL DL1S

SETB BELL

MOV R_MOD, #0FFH Parámetro de modo de timbre #0FFH

MOV R2, #96H; parámetro de tiempo de timbre #96H

ACTF31: ACALL RING; llamada a subrutina de timbre

JNB MKEY, ENDACT; JNB FKEY, ENDACT; Finalizar si se presiona la tecla

DJNZ R2, ACTF31; Continuar si el número de veces no está completo

MOV R2, #96H

CL

R BELL; Un pitido corto (Explicación: El parámetro de modo de timbre #0FFH habilita

ACALL DL100; El programa de timbre no es válido y solo funciona como un retraso,

SETB BELL; Cada retraso A pitido corto durante un período de tiempo para

AJMP ACTF31 recordar al usuario que el relé aún está funcionando)

NOP

NOP

LJMP ERR; trampa de software

ENDACT: SETB SWITCH; apagar el relé

AWAITF: ACALL DISPLY; pantalla de llamada

JNB FKEY, AWAITF; soltar

AWAITM: ACALL DISPLY; visualización de llamada

JNB MKEY, AWAITM; esperar a que se suelte la tecla

RET

NOP

NOP

ERR LJMP; Trampa de software

;*****************; *

; programa Ring Bell;

;***************

RING: MOV R5, #18H; R5 es la variable de control del bucle

RING1: JNB MKEY, R_EXIT; escaneo de teclas

JNB FKEY, R_EXIT; salir cuando se presiona la tecla

MOV A, R_MOD ; pasar a los parámetros del modo de timbre

MOV C, ACC.7; cambiar la campana de acuerdo con los parámetros del modo de campana

MOV BELL, C

RL A

MOV R_MOD, A

ACALL DL100; Retraso

DJNZ R5, RING1; control del número de ciclos

R_EXIT: SETB BELL Apagar; el anillo

RET

NOP

NOP

Trampa de software LJMP

;**** ****************

; Programa de visualización;

;***************

DISPLY: PUSH ACC; protección de envío de datos

p>

PUSH PSW

MOV PSW, #10H Seleccione el grupo de registro 2

MOV R0, DSPLYP; Mover puntero de visualización

MOV R2, # 0FDH; R2 almacena el número de luz estroboscópica del tubo digital

MOV A, PLYTS >

JNZ PLAY; si no es 0, pasa a PLAY

MOV PLYTS, #64H; de lo contrario, reasigne el valor

CPL BRIGHT; Invierte los bits indicadores de brillo y apagado

PLAY: DEC PLYTS muestra la cantidad de control del bucle menos 1

JNB LPLMOD, PLAYL; si los dos tubos digitales inferiores no parpadean, significa "PLAYL"

JB BRIGHT, PLAYL; si la indicación de encendido y apagado es 1, significa "PLAYL"

ACALL NOPLAY; de lo contrario, desactiva el retardo

AJMP PLAY1; cambia para mostrar el tubo digital de alto orden

NOP

NOP.

LJMP ERR; Trampa de software

; Se utiliza para mostrar bits bajos

PLAYL: ORL P1, #7FH; Borrar los datos de visualización originales

ORL P3, #3CH; Borrar los datos estroboscópicos

MOV A, R2; Muévase al tubo digital para seleccionar el número

RL A;

ANL P3, A; seleccione el tubo digital de dígitos bajos

MOV R2, A; número de selección de bits de almacenamiento temporal

MOV A, @R0;

MOV DPTR, #TABLE1; Mover en la primera dirección de la tabla

MOVC A, @A DPTR; Buscar tabla

ANL P1, A; Enviar datos de visualización

ACALL DL1MS; Retraso

INC R0; Señale los diez dígitos inferiores

JB P3.3, PLAYL; /p>

PLAY1: JNB HPLMOD, PLAYH; Si los dos dígitos superiores no parpadean, significa "PLAYH"

JB BRIGHT, PLAYH; también "PLAYH"

ACALL NOPLAY; de lo contrario, las luces se apagarán después de un retraso

AJMP OUTPLY Fin de la transferencia

NOP

;

NOP

LJMP ERR; trampa de software

usado para mostrar bits altos

PLAYH: ORL P1, #7FH; /p>

ORL P3, #3CH; Borra los datos estroboscópicos originales

ANL P3, #0EFH; Estroboscópico del tubo digital de un solo dígito alto

MOV A, @R0 ; Mover el valor mostrado

MOV DPTR, #TABLE1; Mover la primera dirección de la tabla

MOVC A, @A DPTR Buscar la tabla

<; p>ANL P1 ,A

; Enviar datos de visualización

ACALL DL1MS; Retraso

INC R0; Señalar el dígito de las decenas de orden superior <; /p >

ORL P1, #7FH; Borrar datos de visualización

ORL P3, #3CH; Borrar datos estroboscópicos

ANL P3, #0DFH; de luz estroboscópica

MOV A, @R0; mover para mostrar el valor

MOV C, LED4; aumento del puntero + estado de luz pequeña

RLC A

MOV DPTR, #TABLE2; Ir a la primera dirección de la tabla

MOVC A, @A DPTR; Buscar la tabla

ANL P1, A; datos

ACALL DL1MS; Retraso

SALIDA: POP PSW Recuperar datos

POP ACC

RET

NOP

NOP

ERR LJMP; trampa de software

TABLA1: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H , 0BFH, 8EH, 0FFH

p>

"0", "1", "2", "3", "4", "5", "6", "7", "8 ", "9", "-", "F", " "

TABLA2: DB 0FFH, 0DFH, 0F9H, 0D9H, 0A4H, 84H, 0B0H, 90H, 0BFH, 09FH

; " ", " : ", "1", "1:", "2", "2:", "3", "3:", "-", "-:"

;****** ***************

; Programa sin visualización (luces apagadas);

; ************ *************

NOPLAY: ORL P1, #7FH borrar datos de visualización

ORL P3, #3CH; borrar datos estroboscópicos

INC R0 incrementos del puntero en 2

INC R0

ACALL DL1MS

RET

NOP

NOP

LJMP ERR; Trampa de software

;

;**** ****************** *

; Programa de retraso;

;************ ******

DL1MS: MOV R3, #0F9H

; Delay 1250US solo llamado por DISPLY

DL1MS1: NOP

NOP

NOP

DJNZ R3, DL1MS1

RET

NOP

NOP

ERR LJMP; Trampa de software

TECLA: CLR BELL; Programa de retardo dedicado para la eliminación de la inquietud de las teclas,

ACALL DISPLY Emite un tono de aviso de tecla mientras elimina la inquietud

SETB BELL

RET

NOP

NOP

ERR LJMP; trampa de software

DL50MS: MOV R7, #0AH; programa de retraso de 50 milisegundos

DL50M1: ACALL DISPLY; muestra el programa 5MS cada vez que se llama

DJNZ R7, DL50M1 llamado 10 veces

RET

NOP

NOP<; /p>

ERR LJMP; Trampa de software

DL100: ACALL DL50MS; Retraso 100 milisegundos

ACALL DL50MS

RET

NOP

NOP

ERR LJMP; Trampa de software

DL05S: ACALL DL100; Retraso 0,5 segundos

ACALL DL100

ACALL DL100

ACALL DL100

ACALL DL100

RET

NOP

NOP

LJMP ERR; Trampa de software

;

DL1S: ACALL DL05S; Retardo 1 segundo

ACALL DL05S

RET

p>

NOP

NOP

ERR LJMP; Trampa de software

;

;*** ***** **********************

; programa ERR (manejo de errores);

;** ***** ***********************

ERR: CLR EA; desactivar interrupción

MOV DPTR, #ERR1; Preparar dirección de devolución

PUSH DPL; Empujar pila

PUSH DPH;

RETI; Interrumpir devolución

ERR1: MOV 56H , #0AAH; Establecer indicador de encendido (indicador de error)

MOV 57H, #55H

MOV A, #00H; Preparar dirección de devolución

PUSH ACC; Empujar pila

PUSH ACC

Interrumpir devolución

p>

p>

NOP

NOP

LJMP ERR; trampa de software

ORG 07FAH

NOP

NOP

NOP

LJMP ERR; Trampa de software

FIN del programa