td pic

5
TD : les microcontrôleurs PIC 1ELT Lycée 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 Immédiat ou littéral (Immediate) C'est l'adressage est le plus facile. L'opérande se trouve directement dans le programme derrière 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 spécification contraire, d vaut toujours, au choix : - 0 la destination est W et le contenu de lemplacement mémoire nest pas modifié. - 1 la destination est f (la lettre f) : dans ce cas le résultat est stocké dans l emplacement mémoire. 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

Upload: nawzat

Post on 27-Dec-2015

23 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: TD PIC

TD : les microcontrôleurs PIC 1ELT

Lycée 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 Immédiat ou littéral (Immediate)

C'est l'adressage est le plus facile. L'opérande se trouve directement dans le programme derrière 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 spécification contraire, d vaut toujours, au choix : - 0 la destination est W et le contenu de l’emplacement mémoire n’est pas modifié. - 1 la destination est f (la lettre f) : dans ce cas le résultat est stocké dans l’emplacement mémoire.

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

Page 2: TD PIC

TD : les microcontrôleurs PIC 1ELT

Lycée Alkhaouarizmy 2 A.Taouni

Quelle sera la valeur de l'étiquette mavariable (en hexadécimal) ?

Une instruction

movf mavariable ,w ;(mavariable) -> W

est exécutée, quelle valeur est chargée 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 mémoire pour trouver la valeur de PORTA.

Exercice 3 : La directive utilisée pour réserver la mémoire RAM dans cet exercice est

CBLOCK 0x0C ; début 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 connaît 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 arithmétiques du 16F84 Nous présentons les instructions qui de près ou de loin, ont un rapport avec les calculs arithmétiques.

Page 3: TD PIC

TD : les microcontrôleurs PIC 1ELT

Lycée Alkhaouarizmy 3 A.Taouni

Exercice 5 :

La directive utilisée pour réserver la mémoire RAM dans cet exercice est

CBLOCK 0x0C ; début 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 connaît pas tout, mais c'est suffisant) suivant :

1°) D'après le schéma donné ci-dessus, désassembler la partie utile du code à l'aide du tableau d'instructions

précédents.

2°) Exécuter ensuite les instructions que vous pouvez et donner les états successifs.

Plus loin avec l'assembleur Après un reset ou un démarrage le PIC (16F84) démarre en adresse 0. L'adresse 0x004 étant réservée aux

interruptions, un programme aura une structure org 0x000 ; Adresse de départ après 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 présentée dans le TD suivant.

Page 4: TD PIC

TD : les microcontrôleurs PIC 1ELT

Lycée Alkhaouarizmy 4 A.Taouni

; 64 octets en access RAM

CBLOCK 0x0C ; début de la zone variables sur 16F84

w_temp :1 ; Zone de 1 byte

status_temp : 1 ; zone de 1 byte

mavariable : 1 ; je déclare ma variable

ENDC ; Fin de la zone

org 0x000 ; Adresse de départ après reset

goto start; Adresse 0: initialiser

org 0x005 ; après 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 définition symbolique des variables,

un commentaire et la définition de l'origine du programme.

Exercice 6 : Écrire un programme qui additionne deux valeurs en RAM ("donnee1" et "donnee2") et met le résultat dans

une variable 8 bits "somme".

Les tests : Nous présentons quatre instructions qu'il ne faut pas confondre. Les deux premières positionnent un

bit tandis que les deux dernières testent la valeur d'un bit.

Les instructions de tests fonctionnent toujours de la même manière sur les PICs. Si le test est négatif

on exécute la ligne suivante, sinon on saute une ligne.

Voici un exemple dans lequel on doit exécuter une seule instruction supplémentaire 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 nécessitent plusieurs instructions ? Et bien, on combine les sauts conditionnels

avec les saut inconditionnels (par exemple goto).

Structure si-alors-sinon Cette structure est réalisée par deux instructions élémentaires de base btfsc et btfss :

Structure for (boucle avec compteur)

Page 5: TD PIC

TD : les microcontrôleurs PIC 1ELT

Lycée 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 ; décrémenter 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 exécute une boucle on peut utiliser la technique suivante :

Technique utilisée 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 ; décrémenter compteur et tester valeur

goto boucle ; si compteur pas 0, on boucle

;****** sortie de la boucle ici ***********

Question

Réaliser 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 gérer la somme sur 8 bits seulement

sans gérer la retenue.

Indication : movf PORTB,W ; PORTB -> W