Si on peut brancher 8 boutons interrupteurs sur cette carte 24 E/S, je peux faire beaucoup plus simple dans un premier temps :
Comme je sais lire en langage machine l'octet qui reçoit 0 ou 1, si j'ai 8 boutons, chacun représente un bit et le tour est joué.
Je les mets en mémoire les uns à la suite des autres comme quand on code en langage machine en faisant de POKE depuis le BASIC.
Avec un ET logique, ANDA, on doit pouvoir allumer/éteindre juste le bit souhaité, envoyé par chacun des 8 boutons.
Mais corrige-moi si ce que je dis est n'importe quoi ou si je fais fausse route.
Je peux afficher graphiquement en temps réel sur l'écran de l'Alice l'état des 8 bits, ainsi que leur conversion en base 10 et 16.
Voici le programme en langage machine que je propose pour le bit 0 :
Code : Tout sélectionner
; allumer/éteindre la led 0 avec un bouton et stocker 0 ou 1 (état du bit 0) à l'adresse $5000
; avec la carte E/S sur Alice
LDAA #$81 ; place les ports A et B et C (haut) en sorties
STAA $BF63 ; et le port C (bas) en entrées
Debut
CLRA ; mets à 0 pour éteindre la led
STAA $BF60 ; connectée au PORT A
LitBouton
LDAA $BF62 ; lit le port C
ANDA #$01 ; conserve que le premier bit
CMPA #$00 ; est il à zéro ?
BEQ EteintLed0
AllumeLed0
LDAA #$FF ; pour allumer la led
STAA $BF60 ; connectée au PORT A
LDAB #$1
STAB $5000 ; je stocke 1 comme valeur du bit0 ici
JMP LitBouton
EteintLed0
CLRA ; pour éteindre la led
STAA $BF60 ; connectée au PORT A
CLRB
STAB $5000 ; je stocke 0 comme valeur du bit0 ici
JMP LitBouton