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

Extinction Rebellion

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






Extinction Rebellion





Changeons ce systeme injuste, Soyez votre propre syndic





"Il faudrait pour le bonheur des états que les philosophes fussent roi ou que les rois fussent philosophes"   Platon