WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Etude et application de microcontroleur 16f84

( Télécharger le fichier original )
par Mustapha BOUZIANE
Université de Mascara, Algérie - Génie électrique et électronique 2007
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

3.6. La zone des variables .

- Cette directive CBLOCK permet de définir l'adresse du début d'une zone de variables Exemple :

CBLOCK 0×0C ; début de la zone de variables.

- Ensuite , il suffit d'écrire le nom de la variable suivi du signe << : >> et de la taille utilisée.

Cmpt : 1 ; zone de 1 octet

Table : 8 ; zone de 8 octet

- La fin de la zone en coures est définie par la directive

ENDC ;Fin de la zone

3.7. Les étiquettes .

- Afin de faciliter la relecture et aussi de permettre la modification multiple , plus facile,de données ou d'adresses, l'utilisateur a intérêt à utiliser des étiquettes (labels ),une étiquette permet aussi de retrouver un emplacement mémoire utilisé par exemple pour un branchement ou un saut . L'assembleur remplace l'étiquette par sa valeur ou par l'adresse du programme ou elle se trouve . [3]

3.8. Les commentaires .

- L'utilisateur, pour faciliter la relecture , à long terme , de son texte source ou du listing d'assemblage , a intérêt à y introduire des commentaires :

- soit entre les lignes du programme , dans ce cas il commence chaque ligne par un point virgule {;} en bordure de marge .

Exemple :

; ceci est un commentaire soit après une instruction

.

Exemple :

decfsz compt 1 , f ; décrémenter le compteur compt 1

[3]

4. Le jeu d'instruction et modes d'adressage du PIC 16F84

- Un microcontrôleur est caractérisé non seulement par sa structure matérielle mais aussi par son jeu d'instructions qui permet de traiter les données. Le PIC 16F84 a un jeu d'instructions relativement limité mais possède une architecture interne (RISC) qui permet une programmation efficace et rapide ( toutes les instructions ,exceptées les sauts,s'exécute en un cycle d'horloge ).De plus,le microcontrôleur utilise (6) modes d'adressage différents.

4.1. Les différents modes d'adressage

4.1.1. Adressage immédiat .

- Le code opératoire est suivi par l'opérande et ne fait appel à aucune adresse .

- L'opérande est la valeur à utiliser par l'instruction .le constructeur l'appelle« literal» et le note K .

Exemple :

MOVLW 0×34 ; charge la valeur hexadécimale 34 dans l'accumulateur W avec MOV pour move, L pour literal (immédiat) et W pour l'accumulateur w .

4.1.2. Adressage direct .

- Le code opératoire est suivi d'un octet non signé qui est l'adresse effective (on appelle adresse effective .l'adresse qui est directement manipulée par l'instruction.) de l'opérande à traiter . L'opérande est l'adresse de la valeur à utiliser par l'instruction. Exemple :

MOVF 0×5,W ; charge l'accumulateur W avec la donnée située dans la case

mémoire 5 .

- Avec MOV pour move et F pour File (registre) .

4.1.3. Adressage indirect .

- L'adresse de l'opérande est cette fois écrite avec un pointeur d'adresse .

- L'adressage indirect utilise deux registres du microcontrôleur : INDF et FSR .

- Pour accéder à la donnée contenue dans la case mémoire X , il suffit d'écrire dans le registre FSR l'adresse X . En lisant le registre INDF ,on trouve la valeur contenue dans la case mémoire X .

4.1.4. Adressage relatif .

- Ce mode d'adressage s'applique aux opérations de branchement ou de saut CALL et GOTO . Il permet de faire exécuter des instructions placées dans une autre portion de l'espace mémoire de programme .

Exemple :

BOU decfsz Tl , f ; decremente T1 , si resultat =

0

; saute 1 ' instruction

suivante

GOTO BOU ; branche a BOU

4.1.5. Mode manipulation de bit .

- Il permet de modifier un bit dans un registre . L'instruction a besoin de l'adresse du registre et de la position du bit .

EXEMPLE :

BCF PORTA , 3 ; met à 0 le bit 3 du registre PORTA BSF PORTB , 5 ; met à 1 le bit 5 du PORTB

4.1.6. Mode test de bit et branchement .

- Ce mode permet de tester la valeur d'un bit d'une donnée en mémoire et d'effectuer ou non un branchement en fonction de l'état de ce bit .

EXEMPLE :

BOU btfss INTCON , T0IF ; test si TMR0 a débordé ?

GOTO BOU ; si non recommence

Bcf VERIN ; si oui avance verin

- Dans cet exemple l'instruction BTFSS teste la valeur du bit TOIF du registre INTCON et effectue ou non un branchement à la deuxième lige qui suit (bcf VERIN ) [3]

4.2. LES INSTRUCTIONS

4.2.1. L'INSTRUCTION « GOTO » ( Aller à ) . SYNTAX: GOTO K ; K est un label.

- Le programme saute à l'adresse K.

4.2.2. L'INSTRUCTION « INCF » (INCrement File)

SYNTAX: INCF F,D ;(F) + 1 > (D) ; D=0 ou 1.

- La valeur contenue dans le registre fichier F est incrémentée de 1. si D=0 ,le
résultat sera alors dans le registre W. D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes Z

4.2.3. L'INSTRUCTION « DECF » (DECrement File)

SYNTAX: DECF F,D ; (F) - 1 > (D) ,D=0 ou 1

- La valeur contenue dans le registre fichier F est décrémenté de 1. si D=0 ,le résultat sera alors dans le registre W. D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes Z

4.2.4. L'INSTRUCTION « MOVLW » (MOVe Literal to W)

SYNTAX: k > (w) , MOVLW K ; K compris entre 0 et 255.

- Charge le registre W avec la valeur litéral K.

4.2.5. L'INSTRUCTION « MOVF » (MOVe File)

SYNTAX: MOVF F, D ; (F) > (D) , D=0 ou 1.

- Le contenu du registre F est déplacé dans le registre de destination. si D=0, il sera alors dans le registre W. si D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes Z

4.2.6. L'INSTRUCTION « MOVWF » (MOVe W to File) SYNTAX: MOVWF F ; (W) > (F)

- Déplace le contenu du registre W dans le registre fichier F.

4.2.7. L'INSTRUCTION « ADDLW » (ADD Literal and W)

SYNTAX: (w)+k->(w) ADDLW K ; K compris entre 0 et 255

- Additionne le contenu du registre W avec la valeur K. le résultat se trouve dans le registre W.

- Les bits du STATUS affectes C Z DC

4.2.8. L'INSTRUCTION « ADDWF » (ADD W and F)

SYNTAX: ADDWF F,D ,(w) + (f) > (d) ; D=0 ou 1.

- Additionne le contenu du registre W avec la valeur contenue dans le registre fichier F. - Si D=0, alors le résultat sera dans le registre W. si D=1 , le résultat est stocké dans le registre F.

- Les bits du STATUS affectes C Z DC

4.2.9. L'INSTRUCTION « SUBLW » (SUBtract W from Literal) SYNTAX: SUBLW , k - (w) > (w) K ; K compris entre 0 et 255.

- Soustrait la valeur littérale K au registre W. le résultat se trouve dans le registre W.

- Les bits du STATUS affectes : C Z DC

4.2.10. L'INSTRUCTION « SUBWF » (SUBtract W from F)

SYNTAX: SUBWF F,D ; (F) - (W) > (D) ; D=0 ou 1.

- Si D=0, le résultat sera alors dans le registre W. si D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes : C Z DC

4.2.11. L'INSTRUCTION « ANDLW » (AND Literal with W)

SYNTAX: ANDLW K (w) et k > (w) ; K compris entre 0 et 255

- Réalise un ET logique entre la valeur du registre W et la valeur littéral K. le résultat se trouve dans le registre W.

- Les bits du STATUS affectes : Z

4.2.12. L'INSTRUCTION « ANDWF » (AND W with F)

SYNTAX: ANDWF F,D ; (F) AND (W) > (D) ,D=0 ou 1.

- Réalise un ET logique entre le contenu du registre W et la valeur contenue dans le registre fichier F. si D=0 , alors le résultat sera dans le registre W. si D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes : Z

4.2.13. L'INSTRUCTION « IORLW » ( Inclusive OR Literal with W ) SYNTAX: (w) OR k > (w) , IORLW K ; K compris entre 0 et 255

- Réalise un OU logique entre la valeur du registre W et la valeur littéral. Le résultat se trouve dans le registre W.

- Les bits du STATUS affectes : Z

4.2.14. L'INSTRUCTION « IORWF » (Inclusive OR W with File)

SYNTAX : IORWF F,D ;(W) OR (F) > (D) ;. D=0 ou 1.

- Réalise un OU logique entre le contenu du registre W et la valeur contenue dans le registre fichier F. si D=0, le résultat sera alors dans le registre W. si D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes : Z

4.2.15. L'INSTRUCTION << XORLW >> (eXclusive OR Literal with W ) SYNTAX: XORLW K , (W) XOR K > (W) ; K compris entre 0 et 255.-
Effectue un OU EXCLUSIF entre le contenu du registre W et la valeur littéral K . le résultat se trouve dans le registre W. Les bits du STATUS affectes : Z

4.2.16. L'INSTRUCTION << XORWF >> (eXclusive OR W with F)

SYNTAX: XORWF F,D ; (W) XOR (F) > (D) ; D=0 ou 1.

- Effectue un OU exclusif entre le contenu du registre W et le contenu du registre F. Si D=0, le résultat sera alors dans le registre W. si D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes : Z

4.2.17. L'INSTRUCTION << BSF >> (Bit Set F)

SYNTAX: BSF F,D ; Le bit n°D est mis a 1 dans la case mémoire (F)

; D est evidemment compris entre 0 et 7 .

- Met à "1" le bit D du registre F.

4.2.18. L'INSTRUCTION << BCF >> (Bit Clear F)

SYNTAX: BCF F,DIR ; Le bit n°D est mis a 0 dans la case mémoire (F).

; D est evidemment compris entre 0 et 7 .

- Met à zéro le bit D du registre F.

4.2.19. L'INSTRUCTION << RLF >> ( ROTATE LEFT THROUGH CARRY) SYNTAX: RLF F,D ; (F) Rotation gauche avec CARRY -> (D) ; D = 0 ou
1 .

- Le contenu dans le registre fichier F est décalé de 1 bit vers la gauche. - Le bit qui s'intercale est le reflet du drapeau de retenue. si D=0, le résultat sera alors dans le registre W. si D=1, le résultat est stocké dans le registre F.

EXEMPLE: SI C=1

MOVLW 00 ; stocke la valeur 00 dans W

MOVWF VAL ; stocke la valeur dans VAL

RLF VAL,0 ; effectue une rotation du registre F. le résultat est stocké dans W. - Si le drapeau de retenue est à 1, alors on aura dans W la valeur 01.

- Les bits du STATUS affectes : C

4.2.20. L'INSTRUCTION << RRF >> ( ROTATE RIGHT THROUGH CARRY) SYNTAX: RRF F,D ; (F) Rotation droite avec CARRY-> (D) =0 ou
1.

- Le contenu dans le registre fichier F est décalé de 1 bit vers la droite . Le bit qui s'intercale est le reflet du drapeau de retenue. si D=0, le résultat sera alors dans le registre W. Si D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes : C

4.2.21. L'INSTRUCTION << BTFSC >> (Bit Test F, Skip if Clear)

SYNTAX: BTFSC F,D ;. D compris entre 0 et 7.

- Si le bit D du registre F est à zéro, alors la prochaine instruction est "sautée". EXEMPLE :

BTFSC VAL,3 ; Test le bit 3 du registre F.

ICI NOP ; Si le bit est à "0" alors cette instruction ne sera pas

exécutée et passera directement à LA. NOP

4.2.22. L'INSTRUCTION << BTFSS >> (Bit Test F, Skip if Set )

SYNTAX: BTFSS F,D ; D compris entre 0 et 7.

- Si le bit D du registre F est à "1" , alors la prochaine instruction est "sautée".

4.2.23. L'INSTRUCTION << DECFSZ >> (DECrement F, Skip if Z )

SYNTAX : DECFSZ F,D ; (F) -1 -> (D). SAUT SI (D) = 0 ;. D=0 ou 1.
-La valeur contenue dans le registre fichier F est décrémentée de 1.Si D=0, alors le résultat sera dans le registre W. si D=1,le résultat est stocké dans le registre F. si le résultat est nul, alors l'instruction suivante est sautée.

EXEMPLE:

MOVLW 0X1E ; stocke la valeur 30 dans W

MOVWF VAL ; stocke la valeur dans VAL

DECFSZ VAL ,0 ; décrémente F. le résultat est stocké dans W. comme le résultat est nul alors :

ICI NOP ; le programme saute à l'adresse NOICI.

4.2.24. L'INSTRUCTION << INCFSZ >> (INCrement F, Skip if Zero) SYNTAX: INCFSZ F,D ; (F) + 1 -> (D) : SAUT SI (D) = 0 , D=0 ou 1.

- La valeur contenue dans le registre fichier Fest incrémentée de 1. Si D=0, alors le résultat sera dans le registre W. si D=1, le résultat est stocké dans le registre F.Si le résultat est nul, l'instruction suivante est alors sautée.

4.2.25. L'INSTRUCTION << SWAPF >> (SWAP nibbles in F)

-Inversion des B0 a B3 de (F) avec B4 a B7

SYNTAX : SWAPF F,D ; Inversion des B0 a B3 de (F) avec B4 a B7 ->(D)

; D=0 ou 1.

- Effectue une inversion des deux quartets du registre F. Si D=0 alors le résultat sera dans le registre W. Si D=1, le résultat est stocké dans F

EXEMPLE:

MOVWF VAL ; VAL=0F

SWAPF VAL,1 ;VAL=F0

4.2.26. L'INSTRUCTION << CALL >> (CALL subroutine )

SYNTAX: CALL K ; Appel de la sous-routine a l'adresse étiquette.

; K est un label.

- Appelle le sous- programme k . Le PC est chargé avec l'adresse du label , l'adresse de retour (PC+1) est stockée dans la pile.

4.2.27. L'INSTRUCTION << RETURN >> (RETURN from subroutine ) SYNTAX: RETURN

- Fin d'un sous- programme. Le PC est chargé avec l'adresse contenue dans la pile.

4.2.28. L'INSTRUCTION << RETLW >> (RETurn with Literal in W) SYNTAX: retlw k ; (w) = k puis return ; K compris entre 0 et 255.

Instruction utilisée lors d'un retour d'un sous-programme . Le registre W est chargé avec la valeur littérale K et le PC avec la valeur de l'adresse de retour (la pile ).

EXEMPLE:

CALL LAS-BAS ; appelle le sous programme LAS-BAS.

; autres instructions.

LAS-BAS RETLW 0X30 ; le registre W est chargé avec la valeur 30 ; et retour au programme principal.

4.2.29. L'INSTRUCTION << RETFIE >> (RETURN FROM INTERRUPT) SYNTAX : RETFIE ; retour d'interruption .

- Fin d'une routine d'interruption . le PC est charge avec l'adresse contenue dans la pile .

4.2.30. L'INSTRUCTION << CLRF >> (CLeaR F) SYNTAX: CLRF F ; (F)=0
- Le contenu du registre F est effacé.

- Les bits du STATUS affectes : Z

4.2.31. L'INSTRUCTION << CLRW >> (CLeaR W ) SYNTAXE: CLRW ; (W) = 0

- Cette instruction efface w .

- Les bits du STATUS affectes : Z

4.2.32. L'INSTRUCTION << CLRWDT >> (CLeaR WATCHDOG )

SYNTAX: CLRWDT ; Remet le timer du Watchdog a 0 .

- Efface le WDT , Les bits TO et PD sont mis à "1".

4.2.33. L'INSTRUCTION << COMF >> (COMplement F)

SYNTAX: COMF F,D ; NOT (F)>(D) , D=0 ou 1.

- Effectue le complément a 1 du registre fichier F. si D=0 , le résultat sera alors dans le registre W. si D=1, le résultat est stocké dans le registre F.

- Les bits du STATUS affectes : Z

4.2.34. L'INSTRUCTION << SLEEP >> (MISE EN SOMMEIL)

SYNTAX: SLEEP ; Arret du PIC .

- Le microcontrôleur est en mode SLEPP. l'oscillateur est arrêté. le bit TO est à "1". - Le bit PD est à "0". Le WDT sont effacés.

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Là où il n'y a pas d'espoir, nous devons l'inventer"   Albert Camus