Exercices décalage à droite et décalage à gauche - informati

Informatique Industrielle : Exercices Décalage à droite et décalage à gauche

Télécharger PDF

Dé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é dans f si d = 1 ou dans w si d = 0.
  • RRF f,d : Rotation logique à droite (décalage circulaire à droite) de la variable stockée à l’adresse f. Le résultat est stocké dans f si d = 1 ou dans w si d = 0.

En mikroC, les décalages simples (non circulaires) se réalisent avec les opérateurs suivants :

  • X = X << 1 : Décalage à gauche de X d’une position (le bit de poids faible est perdu).
  • X = X >> 1 : Décalage à droite de X d’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.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne