Escriba un programa para contar continuamente en hexadecimal desde FFH hasta 00H en un sistema con frecuencia de reloj de 0,5 microsegundos. Utilice el registro C para configurar un retraso de 1 ms entre cada conteo y mostrar la salida en uno de los puertos de salida.
Análisis del problema:
- El contador hexadecimal se configura cargando un registro con el número inicial y decrementándolo hasta llegar a cero y luego decrementándolo nuevamente para producir -1, que es el complemento a dos de FFH. Por lo tanto, el registro llega nuevamente a FFH.
- El retardo de tiempo de 1 ms se configura mediante el procedimiento que se muestra en el diagrama de flujo
: el registro se carga con el número apropiado de modo que la ejecución del ciclo anterior produzca un retardo de tiempo de 1 ms.
Programa:
Dirección | Etiqueta | Mnemotécnica |
---|---|---|
2000H | MVI B, FFH | |
2002H | SIGUIENTE | DCR B |
2003H | MVI C, CUENTA | |
2005H | DEMORA | DCR C |
2006H | RETARDO JNZ | |
2009H | MOV A, B | |
200AH | SALIDA# | |
200CH | JMP SIGUIENTE |
El registro C es el registro de retardo de tiempo que se carga con un valor COUNT para producir un retardo de tiempo de 1 ms.
Para encontrar el valor de COUNT hacemos-
TD = TL + TO where- TD = Time Delay TL = Time delay inside loop TO = Time delay outside loop
El bucle de retardo incluye dos instrucciones: DCR C (4 estados T) y JNZ (10 estados T),
por lo que T L = 14*Período de reloj*CONTAR
=> 14*(0,5*10 -6 )*CONTAR
=> (7 *10 -6 )*CONTAR
El retraso fuera del bucle incluye
: DCR B: 4T
MVI C, COUNT: 7T
MOV A, B: 4T
OUTPORT: 10T
JMP: 10T
Total: 35T
T O = 35*Período de reloj => 17,5 microsegundos
Entonces, 1 ms = (17.5+ 7 * COUNT) microsegundo
Por lo tanto, CONTAR=(140) 10