Vous êtes sur la page 1sur 5

TD : les microcontrleurs PIC 1ELT

Lyce Alkhaouarizmy 1 A.Taouni



Exercice 1 :

L'instruction mov dans tous ses tats
L'instruction mov existe sous plusieurs formes que nous nous proposons d'examiner maintenant.
a) adressage Immdiat ou littral (Immediate)
C'est l'adressage est le plus facile. L'oprande se trouve directement dans le programme derrire le code de
l'instruction.




































Exercice 2 :

1) Calculer la valeur de chacune des tiquettes "w_temp", "montableau" et "mavaraible", puis assembler
l'instruction movf du programme ci-dessus.
2) On donne le contenu de la RAM correspondant la directive.











Sauf spcification contraire, d vaut toujours, au choix :
- 0 la destination est W et le contenu de lemplacement mmoire nest pas modifi.
- 1 la destination est f (la lettre f) : dans ce cas le rsultat est stock dans lemplacement mmoire.
Exemple :
; 64 octets en access RAM
CBLOCK 0x0C
w_temp :1 ; Zone de 1 byte
montableau : 8 ; zone de 8 bytes
mavariable :1 ; zone de 1 byte
ENDC ; Fin de la zone
...
movf mavariable ,0 ;movf mavariable ,W <=> (mavariable) -> W

TD : les microcontrleurs PIC 1ELT

Lyce Alkhaouarizmy 2 A.Taouni


Quelle sera la valeur de l'tiquette mavariable (en hexadcimal) ?
Une instruction
movf mavariable ,w ;(mavariable) -> W

est excute, quelle valeur est charge dans W (W, registre de travail 8 bits) ?
3) Assemblez l'instruction de la question 2)
4) On ajoute l'instruction
movwf PORTA ; W -> PORTA

en fin de programme. Que fait cette instruction ? Assemblez cette instruction en vous servant de
l'architecture mmoire pour trouver la valeur de PORTA.


Exercice 3 :

La directive utilise pour rserver la mmoire RAM dans cet exercice est

CBLOCK 0x0C ; dbut de la zone variables en ACCESS RAM
somme_pdsfort :1 ; Zone de 1 byte
somme_pdsfaible : 1 ; zone de 1 bytes
compteur :1 ; zone de 1 byte
moyenne :1 ; le resultat sera ici
ENDC ; Fin de la zone

On donne les tats (connaissance partielle : on ne connat pas tout, mais c'est suffisant) suivants :














Exercice 4 :

crire un programme qui transfert la valeur qui est dans "w_temp" dans la variable "mavariable".

Les instructions arithmtiques du 16F84
Nous prsentons les instructions qui de prs ou de loin, ont un rapport avec les calculs
arithmtiques.

TD : les microcontrleurs PIC 1ELT

Lyce Alkhaouarizmy 3 A.Taouni



Exercice 5 :

La directive utilise pour rserver la mmoire RAM dans cet exercice est

CBLOCK 0x0C ; dbut de la zone variables en ACCESS RAM
data1 :1 ; zone de 1 byte
data2 :1 ; le resultat sera ici
ENDC ; Fin de la zone

On donne l'tat (connaissance partielle : on ne connat pas tout, mais c'est suffisant) suivant :


1) D'aprs le schma donn ci-dessus, dsassembler la partie utile du code l'aide du tableau d'instructions
prcdents.
2) Excuter ensuite les instructions que vous pouvez et donner les tats successifs.

Plus loin avec l'assembleur
Aprs un reset ou un dmarrage le PIC (16F84) dmarre en adresse 0. L'adresse 0x004 tant rserve aux
interruptions, un programme aura une structure
org 0x000 ; Adresse de dpart aprs reset
goto start ; Adresse 0: initialiser
...
org 0x005 ; >=5 ici
start
END


start est une tiquette. Tout programme se termine par la directive END. Voici un programme complet qui
utilise une instruction goto facile expliquer et prsente dans le TD suivant.



TD : les microcontrleurs PIC 1ELT

Lyce Alkhaouarizmy 4 A.Taouni


; 64 octets en access RAM
CBLOCK 0x0C ; dbut de la zone variables sur 16F84
w_temp :1 ; Zone de 1 byte
status_temp : 1 ; zone de 1 byte
mavariable : 1 ; je dclare ma variable
ENDC ; Fin de la zone
org 0x000 ; Adresse de dpart aprs reset
goto start; Adresse 0: initialiser
org 0x005 ; aprs l'interruption
start
clrf mavariable
boucle
incf mavariable,1 ;incf mavariable,f ->f
goto boucle
END

On distingue dans ce programme deux tiquettes (start et boucle), une dfinition symbolique des variables,
un commentaire et la dfinition de l'origine du programme.

Exercice 6 :

crire un programme qui additionne deux valeurs en RAM ("donnee1" et "donnee2") et met le rsultat dans
une variable 8 bits "somme".

Les tests :
Nous prsentons quatre instructions qu'il ne faut pas confondre. Les deux premires positionnent un
bit tandis que les deux dernires testent la valeur d'un bit.

Les instructions de tests fonctionnent toujours de la mme manire sur les PICs. Si le test est ngatif
on excute la ligne suivante, sinon on saute une ligne.
Voici un exemple dans lequel on doit excuter une seule instruction supplmentaire si
le bit vaut 1 :
btfsc STATUS,C ; tester si le bit C du registre STATUS vaut 0
bsf mavariable,2 ; non (C=0), alors bit 2 de mavariable mis 1
xxxx ; la suite du programme est ici dans les 2 cas
Que faire si les traitements ncessitent plusieurs instructions ? Et bien, on combine les sauts conditionnels
avec les saut inconditionnels (par exemple goto).

Structure si-alors-sinon
Cette structure est ralise par deux instructions lmentaires de base btfsc et btfss :

Structure for (boucle avec compteur)
TD : les microcontrleurs PIC 1ELT

Lyce Alkhaouarizmy 5 A.Taouni

On utilise l'une des deux instructions suivantes :

Voici un exemple qui utilise un compteur de boucle :

; boucler trois fois
movlw 3 ; charger 3 dans w
movwf compteur ; initialiser compteur
movlw 0x5 ; charger 5 dans w
boucle ; tiquette
addwf mavariable , 1 ; ajouter 5 ma variable
decfsz compteur , 1 ; dcrmenter compteur et tester sa valeur
goto boucle ; si compteur pas 0, on boucle
movf mavariable , 0 ; on charge la valeur obtenue dans w

Exercice 7 : Structure for

Si l'on sait combien de fois on excute une boucle on peut utiliser la technique suivante :

Technique utilise par la suite

;for (compteur=0;compteur<5;compteur++)
movlw 0x5 ; charger 5 dans w
movwf compteur ; initialiser compteur
boucle ; tiquette
;******* action 5 fois ici ***********
decfsz compteur , f ; dcrmenter compteur et tester valeur
goto boucle ; si compteur pas 0, on boucle
;****** sortie de la boucle ici ***********
Question

Raliser un programme qui vient chercher six fois des valeurs (8 bits) sur le PORTB et les additionne
dans une variable "Somme" (8 bits). On vous demande de grer la somme sur 8 bits seulement
sans grer la retenue.

Indication :
movf PORTB,W ; PORTB -> W

Vous aimerez peut-être aussi