Vous êtes sur la page 1sur 5

TD : les microcontrleurs PIC

1ELT

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.

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 l emplacement 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

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.

Lyce Alkhaouarizmy

A.Taouni

TD : les microcontrleurs PIC

1ELT

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.

Lyce Alkhaouarizmy

A.Taouni

TD : les microcontrleurs PIC

1ELT

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.

Lyce Alkhaouarizmy

A.Taouni

TD : les microcontrleurs PIC

1ELT

; 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)
Lyce Alkhaouarizmy 4 A.Taouni

TD : les microcontrleurs PIC

1ELT

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

Lyce Alkhaouarizmy

A.Taouni

Vous aimerez peut-être aussi