correction exercices: instructions de branchement et bouc

Informatique Industrielle : Correction exercices: Instructions de branchement et bouc

Télécharger PDF

Branchement et Boucles : Instructions et Exemples en Assembleur PIC

Exercice 1 : Décrémentation et Branchement Conditionnel

Etiquette : Instructions de branchement et boucles Description :

Instructions État des registres
movlw 0x02 (w) = 0x02
movwf xdata (xdata) = 0x02
decfsz xdata,f (xdata) – 1 = (xdata) → (xdata) = 0x01
goto saut Instruction non exécutée, car (xdata) ≠ 0
movlw 0x0A (w) = 0x02 (la valeur précédente n'est pas écrasée)
movwf xdata Instruction non exécutée, car (w) n'est pas modifié
saut decfsz xdata,f → (xdata) – 1 = (xdata) → (xdata) = 0

Exercice 2 : Incrémentation et Boucle Infinie

Etiquette : Instructions de branchement et boucles Description :

Instructions État des registres
movlw 0xFF (w) = 0xFF
movwf xdata (xdata) = 0xFF
incfsz xdata,f (xdata) + 1 → (xdata) → (xdata) = 0x00 (boucle exécutée 256 fois)
goto boucle Instruction non exécutée, car (xdata) = 0
movlw 0x01 (w) = 0x01
movwf xdata (xdata) = 0x01
boucle decfsz xdata,w (xdata) – 1 → (w) → (w) = 0
goto boucle Instruction exécutée, car (w) ≠ 0 → (xdata) = 0x00
decf xdata,f (xdata) – 1 → (xdata) → (xdata) = 0xFF

Exercice 3 : Boucle avec Condition et Incrémentation

Etiquette : Instructions de branchement et boucles Description :

Instructions État des registres
clrf ydata (ydata) = 0
movlw 0x0A (w) = 0x0A
movwf xdata (xdata) = 0x0A
rec incf ydata,f (ydata) + 1 → (ydata) → Instruction exécutée 10 fois → (ydata) = 0x0A
decf xdata,f (xdata) – 1 → (xdata) → Instruction exécutée 10 fois → (xdata) = 0
btfss STATUS,Z Z = 1 ? (xdata = 0 ?)
goto rec Si (xdata) ≠ 0, aller à rec
decf xdata,f (xdata) – 1 → (xdata) → (xdata) = 0xFF

Exercice 4 : Compteur Modulo 10

Etiquette : Instructions de branchement et boucles Description :

Instructions État des registres
clrf compt (compt) = 0
compter movf compt,w (compt) → (w) → (w) = 0
movwf PORTB (PORTB) = 0
incf compt,f (compt) + 1 → (compt)
movlw 0x0A (w) = 0x0A
xorwf compt,w (compt) XOR (w) → (w) → Vérification si (w) = 0
btfss STATUS,Z Z = 1 ? ((w) = 0 ?)
goto compter Si (w) ≠ 0, aller à compter
goto début Si (w) = 0, aller à début

La fonction réalisée par ce programme est un compteur modulo 10.

FAQ sur les Boucles et Branchements en Assembleur PIC

1. Que signifie l'instruction decfsz ?

decfsz décrémente une variable et saute à une étiquette si le résultat n'est pas nul. Elle combine une décrémentation et une vérification de zéro en une seule instruction.

2. À quoi sert l'instruction xorwf dans la boucle modulo 10 ?

xorwf effectue une opération XOR entre le registre W et la variable compt. Si le résultat est nul, le bit Z du registre STATUS est positionné à 1, ce qui permet de vérifier si compt a atteint la valeur 10.

3. Pourquoi utiliser btfss STATUS,Z plutôt que btfsc ?

btfss STATUS,Z vérifie si le bit Z est à 0 (ce qui signifie que le résultat de l'opération précédente n'est pas nul). Cela permet de sauter vers une boucle tant que le compteur n'a pas atteint 10, contrairement à btfsc qui saute si le bit est à 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