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 |
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
4.2.15. L'INSTRUCTION << XORLW >> (eXclusive
OR Literal with W ) SYNTAX: XORLW K , (W) XOR K > (W) ; K
compris entre 0 et 255.- 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 - 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 - 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. 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 - 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. |
|