Informatique Industrielle : Exercices Décalage à droite et décalage à gauche
Télécharger PDFDécalages en Assembleur et en mikroC
Rappel sur les décalages et rotations
En assembleur, les instructions suivantes permettent de réaliser des décalages circulaires (rotations) sur des variables :
- RLF f,d : Rotation logique à gauche (décalage circulaire à gauche) de la variable stockée à l’adresse
f. Le résultat est stocké dansfsid = 1ou danswsid = 0. - RRF f,d : Rotation logique à droite (décalage circulaire à droite) de la variable stockée à l’adresse
f. Le résultat est stocké dansfsid = 1ou danswsid = 0.
En mikroC, les décalages simples (non circulaires) se réalisent avec les opérateurs suivants :
X = X << 1: Décalage à gauche deXd’une position (le bit de poids faible est perdu).X = X >> 1: Décalage à droite deXd’une position (le bit de poids fort est perdu).
Introduction aux exercices
Les exercices suivants utilisent un montage à base de LEDs connectées aux broches d’un port (exemple : RB7 à RB0 pour un microcontrôleur PIC). Pour les programmes en assembleur, une structure standard est appliquée. Le délai d’allumage des LEDs peut être ajusté en modifiant les valeurs des compteurs cptr1, cptr2 et cptr3.
Exercice 1 : Jeu de lumière séquentiel
Réaliser un jeu de lumière où une seule LED s’allume successivement de RB0 à RB7.
- Programme en assembleur : Initialiser une variable pour chaque configuration LED et utiliser des rotations logiques pour passer d’une LED à l’autre.
- Programme en mikroC : Utiliser des décalages à gauche pour générer des motifs binaires et les écrire sur le port.
Exercice 2 : Jeu de lumière avec deux LEDs allumées
Créer un jeu de lumière où deux LEDs s’allument successivement en décalant leur position de RB7 à RB0.
- Programme en assembleur : Appliquer des rotations logiques ou des décalages pour activer deux bits consécutifs.
- Programme en mikroC : Combiner des décalages à gauche et des masques pour isoler les bits à allumer.
Exercice 3 : Fusion des jeux de lumière 1 et 2
Concevoir un jeu de lumière alternant entre les deux séquences précédentes (une LED puis deux LEDs).
- Programme en assembleur : Utiliser des rotations logiques pour chaque séquence et alterner les configurations.
- Programme en mikroC : Stocker les motifs dans des variables et les afficher en alternance avec des décalages.
Exercice 4 : Jeu de lumière croissant
Créer un jeu où le nombre de LEDs allumées augmente progressivement de RB0 à RB7.
- Programme en assembleur : Appliquer des rotations logiques pour cumuler les bits allumés.
- Programme en mikroC : Utiliser des décalages à gauche et des opérations binaires pour ajouter une LED allumée à chaque étape.
Exercice 5 : Jeu de lumière décroissant
Réaliser un jeu où le nombre de LEDs allumées diminue progressivement de RB7 à RB0.
- Programme en assembleur : Appliquer des rotations logiques inverses pour réduire les bits allumés.
- Programme en mikroC : Utiliser des décalages à droite et des masques pour supprimer une LED allumée à chaque étape.
Exercice 6 : Fusion des jeux de lumière 4 et 5
Concevoir un jeu de lumière combinant les séquences croissantes et décroissantes des exercices 4 et 5.
- Programme en assembleur : Alterner entre les rotations logiques croissantes et décroissantes pour générer la séquence.
- Programme en mikroC : Stocker les motifs croissants et décroissants dans des tableaux et les afficher en alternance.
FAQ
Quelle est la différence entre un décalage circulaire et un décalage simple ?
Un décalage circulaire (rotation) conserve les bits déplacés en les réinsérant à l’autre extrémité, tandis qu’un décalage simple (non circulaire) les perd.
Comment ajuster le délai d’affichage des LEDs ?
En assembleur, modifier les valeurs des compteurs cptr1, cptr2 et cptr3. En mikroC, utiliser des boucles for ou des fonctions de délai comme Delay_ms().
Quelle instruction mikroC utilise-t-on pour allumer une LED spécifique ?
On utilise généralement une opération de masquage avec PORTx = PORTx | masque, où masque est un entier avec le bit correspondant à 1.