>> Tecnologia Eletrônica >  >> Áudio Pessoal >> Rádios-relógio

Programa Assembly 8085: Contador Binário Contínuo com Delay de 1 Segundo

Código Assembly 8085 Completo e Comentado

O programa a seguir inicializa um contador de 16 bits em 0000H, incrementa continuamente, exibe o valor (via porta de saída simulada) e insere delay de ~1 segundo entre contagens usando loop aninhado calibrado para clock 3 MHz.

ORG 1000H       ; Endereço inicial do programa
LXI H, 0000H    ; Inicializa contador 16 bits (H-L) com 0
MVI B, 00H      ; Byte alto do contador de delay (loop externo)
MVI C, 00H      ; Byte baixo do contador de delay (loop interno)
DISPLAY:        ; Rotina de saída simulada
MOV A, L        ; Obtém byte baixo do contador
OUT 01H         ; Sai para porta 01H (ex.: LEDs/display)
MOV A, H        ; Obtém byte alto
OUT 02H         ; Sai para porta 02H
INCREMENT:
INX H           ; Incrementa contador 16 bits (HL = HL + 1)
DELAY_1S:       ; ~1 segundo delay @ 3 MHz (~1M ciclos aprox)
LXI B, 0F424H   ; Carrega BC com 62.500 (0xF424) para loops externo+interno
DELAY_LOOP:
DCX B           ; Decrementa BC (10 T-states)
MOV A, B        ; Verifica byte alto (4 T-states)
ORA C           ; OR com byte baixo (4 T-states)
JNZ DELAY_LOOP  ; Salta se não zero (10/7 T-states)
; Total ~ 62.500 * 28 ≈ 1.75M T-states ≈ 0.58s @ 3MHz
; Ajuste constante para 1s exato (ex.: 0x10000 = 65.536)
JMP DISPLAY     ; Repete indefinidamente

Pontos-Chave

  • INX H é a única instrução de incremento 16 bits; não afeta flags.
  • Loop de delay usa DCX B + JNZ para decremento 16 bits. Constante 0F424H resulta ~0.58s a 3 MHz; use 10000H para ~1s.
  • Substitua instruções OUT pela rotina de display real do seu hardware (ex.: display mapeado em memória, saída serial).
  • Para temporização precisa, use timer de hardware (ex.: 8253/8254) em vez de loops de software.

Resumo do Fluxo

  1. Inicializar contador e constantes de delay
  2. Exibir contagem atual
  3. Incrementar contador
  4. Executar loop de delay calibrado
  5. Voltar para display