Programme assembleur 8085 : compteur binaire continu avec délai 1 seconde
Code assembleur 8085 complet et commenté
Le programme suivant initialise un compteur 16 bits à 0000H, l'incrémente continuellement, affiche la valeur (via port de sortie simulé), et insère un délai ~1 seconde entre comptages en utilisant une boucle imbriquée calibrée pour horloge 3 MHz.
ORG 1000H ; Adresse début programme LXI H, 0000H ; Initialise compteur 16 bits (H-L) à 0 MVI B, 00H ; Octet haut compteur délai (boucle externe) MVI C, 00H ; Octet bas compteur délai (boucle interne) AFFICHAGE: ; Routine sortie simulée MOV A, L ; Récupère octet bas compteur OUT 01H ; Sortie port 01H (ex. LEDs/afficheur) MOV A, H ; Récupère octet haut OUT 02H ; Sortie port 02H INCREMENT: INX H ; Incrémente compteur 16 bits (HL = HL + 1) DELAI_1S: ; ~1 seconde délai @ 3 MHz (approx 1M cycles) LXI B, 0F424H ; Charge BC avec 62,500 (0xF424) pour boucles externe+interne BOUCLE_DELAI: DCX B ; Décrémente BC (10 T-states) MOV A, B ; Vérifie octet haut (4 T-states) ORA C ; OU avec octet bas (4 T-states) JNZ BOUCLE_DELAI ; Saut si non zéro (10/7 T-states) ; Total ~ 62,500 * 28 ≈ 1,75M T-states ≈ 0,58s @ 3MHz ; Ajuster constante pour 1s exact (ex. 0x10000 = 65,536) JMP AFFICHAGE ; Répète indéfiniment Points clés
- INX H est la seule instruction d'incrémentation 16 bits ; elle n'affecte pas les drapeaux.
- La boucle de délai utilise
DCX B+JNZpour décrémentation 16 bits. La constante0F424Hdonne ~0,58s à 3 MHz ; utiliser10000Hpour ~1s. - Remplacer instructions
OUTpar routine d'affichage réelle de votre matériel (ex. afficheur mémoire-mappé, sortie série). - Pour temporisation précise, utiliser timer matériel (ex. 8253/8254) au lieu boucles logicielles.
Résumé flux
- Initialiser compteur et constantes délai
- Afficher compteur actuel
- Incrémenter compteur
- Exécuter boucle délai calibrée
- Boucler vers affichage
