Les premiers programmes
Nous arrivons maintenant à nos premiers programmes. Pour débuter tout simplement nous allons en premier faire clignoter une LED de notre module d'affichage à LED, puis nous animerons un petit chenillard avec les trois LED.
Pour allumer une LED du module, elle doit recevoir un signal haut sur son anode. L'anode sera donc reliée (via la résistance) à une sortie du portB par exemple. (C'est ce port qui sera utilisé pour commander les afficheurs.)
Il faut donc relier l'anode de la LED choisie à la broche
PB0 (on peut en choisir une autre mais le nombre à écrire dans
le registre portB sera différent).
Pour clignoter il faut que PB0 passe alternativement de l'état haut à
l'état bas avec un délai suffisant entre chaque état sinon
le clignotement sera tellement rapide que l'on ne le verra pas.
L'accumulateur B reçoit la valeur 1. Ce nombre mis dans le registre du portB met à 1 le digit PB0 qui commande la LED; COMB change B en $FF -1 soit $FE = %11111110. Quand cette valeur sera écrite dans le registre portB, le digit PB0 sera à 0; à la boucle suivante COMB remettra dans B la valeur 1.
Les nombres entre crochets [ ], indiquent le nombre de cycles horloge pour
l'exécution de l'instruction. Avec un quartz de 8 Mhz un cycle dure 0,5
µs.
DELAI : la boucle BCL1 demande 17 cycles d'horloge, elle est exécutée
58 800 fois soit 999 600 cycles, si on ajoute les cycles de LDY et RTS on obtient
999 609 cycles de 0,5 µs soit 499 804,5 µs ou 0,499 s.
L'instruction BNE indique un retour à l'adresse BCL1 si Y est différent
de 0.
Si vous voulez un clignotement plus lent, d'une seconde par exemple, il suffit
d'appeler deux fois le sous-programme délai.
Puisque nous avons trois LED sur notre périphérique, nous allons
programmer un petit chenillard.
Il faut allumer les LEDs l'une après l'autre avec un délai entre
chaque allumage. Nous avons le choix de laisser les LEDs allumées séparément
ou ensemble. Les LEDs seront commandées par les broches PB0, PB1 et PB2.
1er cas : il faut écrire successivement dans le registre portB
les nombres 0, 1, 2 et 4
0 : $00000000 : L1 off, L2 off, L3 off
1 : $00000001 : L1 on, L2 off, L3 off
2 : $00000010 : L1 off, L2 on, L3 off
4 : $00000100 : L1 off, L2 off, L3 on
Pour passer de 1 à 2 puis de 2 à 4 on multiplie par 2.
Nous pouvons obtenir ces valeurs successives avec un décalage à
gauche (instruction ASL ou LSL)
Matériellement, il faut relier l'anode (via la résistance) de L1 à PB0, celle de L2 à PB1 et celle de L3 à PB2.
2ème cas : il faut écrire successivement dans le registre
portB les nombres 0, 1, 3 et 7
0 : $00000000 : L1 off, L2 off, L3 off
1 : $00000001 : L1 on, L2 off, L3 off
3 : $00000011 : L1 on, L2 on, L3 off
7 : $00000111 : L1 on, L2 on, L3 on
Vous pouvez modifier ce programme pour que les LEDs ne s'éteignent pas en même temps mais l'une après l'autre, L1, puis L2 et enfin L3.