Programa Ensamblador 8085: Contador Binario Continuo con Retraso de 1 Segundo

Código Ensamblador 8085 Completo y Comentado

El siguiente programa inicializa un contador de 16 bits en 0000H, lo incrementa continuamente, muestra el valor (a través de un puerto de salida simulado) e inserta un retraso de ~1 segundo entre conteos usando un bucle anidado calibrado para un reloj de 3 MHz.

ORG 1000H ; Dirección de inicio del programa
LXI H, 0000H ; Inicializa el contador de 16 bits (H-L) a 0
MVI B, 00H ; Byte alto del contador de retraso (bucle externo)
MVI C, 00H ; Byte bajo del contador de retraso (bucle interno)
DISPLAY: ; Rutina de salida simulada
MOV A, L ; Obtiene el byte bajo del contador
OUT 01H ; Salida al puerto 01H (p. ej., LEDs/pantalla)
MOV A, H ; Obtiene el byte alto del contador
OUT 02H ; Salida al puerto 02H
INCREMENT: INX H ; Incrementa el contador de 16 bits (HL = HL + 1)
DELAY_1S: ; Retraso de ~1 segundo @ 3 MHz (aprox. 1M ciclos)
LXI B, 0F424H ; Carga BC con 62,500 (0xF424) para bucles externo+interno
DELAY_LOOP: DCX B ; Decrementa BC (10 T-estados)
MOV A, B ; Verifica byte alto (4 T-estados)
ORA C ; O con byte bajo (4 T-estados)
JNZ DELAY_LOOP ; Salta si no es cero (10/7 T-estados)
; Total ~ 62,500 * 28 ≈ 1.75M T-estados ≈ 0.58s @ 3MHz
; Ajusta la constante para 1s exacto (ej., 0x10000 = 65,536)
JMP DISPLAY ; Repite indefinidamente

Puntos Clave

  • INX H es la única instrucción de incremento de 16 bits; no afecta las banderas.
  • El bucle de retraso usa DCX B + JNZ para un decremento de 16 bits. La constante 0F424H da ~0.58s a 3 MHz; usa 10000H para acercarse más a 1s.
  • Reemplaza las instrucciones OUT con la rutina de pantalla real de tu hardware (p. ej., pantalla mapeada en memoria, salida serial).
  • Para un tiempo preciso, usa un temporizador de hardware (ej., 8253/8254) en lugar de bucles de software.

Resumen del Flujo

  1. Inicializa el contador y las constantes de retraso
  2. Muestra el conteo actual
  3. Incrementa el contador
  4. Ejecuta el bucle de retraso calibrado
  5. Vuelve al inicio para mostrar