Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction...

27
Présentation Introduction Depuis l 'arrivée du premier microprocesseur dans les années 70 ( déjà plus de 30 ans ), conçu par INTEL tm les progrès en intégration de composants n 'ont cessé d 'évoluer, faisant de ce fait augmenter la puissance de calcul et la rapidité des microprocesseurs. Ce premier microprocesseur le "4004" deviendra peut être célèbre, en effet la sonde pionner 10 lancée dans les années 70 a quitté le système solaire en emportant avec elle le fameux circuit. Un microprocesseur peut être assimilé à un circuit logique complexe exécutant une à une des ordres ( instructions ) enregistrés dans une mémoire de programme externe. Un microprocesseur ne fonctionne jamais seul on lui associe toujours des périphériques d 'entrées- sorties afin de pouvoir exécuter une fonction particulière et dialoguer avec "l 'extérieur" ( prise en compte de l 'état d 'un capteur , commande d 'un relais , mémoire programme de l 'application , etc.. .). Le grand avantage de cette logique programmable est que la modification d 'une fonction ou d'une tâche ne nécessite pas de câblage supplémentaire, mais uniquement un nouveau programme à loger en mémoire. L 'arrivée du micro contrôleur qui est un microprocesseur auquel on a intégré les périphériques d 'entrées sorties, va faire que les montages et applications deviennent encore plus simple à mettre en oeuvre, avec un gain de temps, de vitesse et un coût réduit ( le pic 16f84 est à environ 50 f ). Le PIC 16 F84 de la société Microchip est un micro contrôleur faisant partie de la famille RISC ( reduced instruction set computer ) dont les caractéristiques sont vitesse d 'exécution et jeu d 'instruction réduit ( le pic 16f84 ne comporte que 35 instructions ). La mémoire de programme C ' est dans cette mémoire que vous allez "loger" votre programme une fois compilé, la caractéristique essentielle de cette mémoire est qu 'elle conserve ses données même hors tension ( heureusement sinon il faudrait recharger le programme assez souvent... ) Le pic 16f84 possède une mémoire de programme interne ( périphériques intégrés ... ) de 1024 emplacements mémoire comprenant chacun 14 bits ( taille d 'une instruction ). Cette mémoire est du type "flash" , c' est de là que vient le "f" de 16f84...

Transcript of Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction...

Page 1: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Présentation

Introduction

Depuis l 'arrivée du premier microprocesseur dans les années 70 ( déjà plus de 30 ans ), conçu par INTEL tm les progrès en intégration de composants n 'ont cessé d 'évoluer, faisant de ce fait augmenter la puissance de calcul et la rapidité des microprocesseurs. Ce premier microprocesseur le "4004" deviendra peut être célèbre, en effet la sonde pionner 10 lancée dans les années 70 a quitté le système solaire en emportant avec elle le fameux circuit. Un microprocesseur peut être assimilé à un circuit logique complexe exécutant une à une des ordres ( instructions ) enregistrés dans une mémoire de programme externe. Un microprocesseur ne fonctionne jamais seul on lui associe toujours des périphériques d 'entrées- sorties afin de pouvoir exécuter une fonction particulière et dialoguer avec "l 'extérieur" ( prise en compte de l 'état d 'un capteur , commande d 'un relais , mémoire programme de l 'application , etc.. .). Le grand avantage de cette logique programmable est que la modification d 'une fonction ou d'une tâche ne nécessite pas de câblage supplémentaire, mais uniquement un nouveau programme à loger en mémoire. L 'arrivée du micro contrôleur qui est un microprocesseur auquel on a intégré les périphériques d 'entrées sorties, va faire que les montages et applications deviennent encore plus simple à mettre en oeuvre, avec un gain de temps, de vitesse et un coût réduit ( le pic 16f84 est à environ 50 f ).

Le PIC 16 F84 de la société Microchip est un micro contrôleur faisant partie de la famille RISC ( reduced instruction set computer ) dont les caractéristiques sont vitesse d 'exécution et jeu d 'instruction réduit ( le pic 16f84 ne comporte que 35 instructions ).

La mémoire de programme C ' est dans cette mémoire que vous allez "loger" votre programme une fois compilé, la caractéristique essentielle de cette mémoire est qu 'elle conserve ses données même hors tension ( heureusement sinon il faudrait recharger le programme assez souvent... ) Le pic 16f84 possède une mémoire de programme interne ( périphériques intégrés ... ) de 1024 emplacements mémoire comprenant chacun 14 bits ( taille d 'une instruction ). Cette mémoire est du type "flash" , c' est de là que vient le "f" de 16f84...

Page 2: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

La RAM Lorsque un programme "tourne" il fait souvent des calculs intermédiaires par exemple un décomptage pour une temporisation, pour stocker ces calculs temporaires les micro contrôleurs possèdent de la mémoire RAM interne qui en cas de coupure secteur perdent bien évidemment leur contenu ( à ne pas confondre avec la mémoire de programme de type flash ). Le PIC 16F84 intègre 68 octets de RAM. On appel également ces emplacements mémoire des registres à usage général.

L ' E²PROM Il arrive parfois que l 'on souhaite mémoriser des événements survenants au cours d 'un programme en exécution, par exemple une alarme. Certain micro contrôleur ont la possibilité de sauvegarder cet événement dans une mémoire non volatile c'est à dire une mémoire qui conserve les données même hors tension , un peu comme la mémoire de programme au détail près que l 'on ne peut pas écrire dans la mémoire de programme lors de l ' exécution du programme. Le PIC 16F84 met à votre disposition 64 octets de mémoire E²PROM.

Le Watchdog Sous ce nom étrange nous allons découvrir une fonction capable de surveiller le bon fonctionnement du programme que le micro contrôleur exécute. Le rôle du Watchdog ( ou chien de garde ) est de "réseter" le micro contrôleur si l 'on ne remet pas à zéro périodiquement ( à intervalle définissable ) un registre interne grâce à l 'instruction clrwdt ( clear watchdog ), si le programme tourne par exemple dans une boucle sans fin ( c'est un bug ! ) , il ne peut remettre à 0 le chien de garde et ainsi le micro contrôleur se reset afin de relancer le programme. Cette fonction est bien sûr désactivable au moment de la programmation du micro contrôleur, c' est la directive d 'assemblage __config qui définie cette fonction.

Le TIMER Un timer est un registre interne au micro contrôleur , celui-ci s 'incrémente au grès d' un horloge, ce registre peut servir par exemple pour réaliser des temporisations, ou bien encore pour faire du comptage ( par l 'intermédiaire d 'une broche spécifique : RA4/TOKI ). Le PIC 16F84 possède un timer sur 8 bits ( il compte jusqu ' à 256 ) configurable par logiciel.

Les entrées - sorties Que serait un micron contrôleur ne possédant pas de broche d 'entrées- sorties ? ( difficile d 'y répondre ) . Lorsque vous envisagez de créer une application, en générale celle-ci commande un relais, une led ou bien tout autre actionneur, de même votre programme qui tourne peut évoluer selon des informations extérieures , l 'état d 'un contact par exemple ou bien d 'un interrupteur. Pour vous aidez à réaliser votre application le PIC 16F84 possède 13 entrées sorties configurables individuellement broches RA0 à RA4 et RB0 à RB7

Le brochage du PIC 16 F 84

RA0 à RA4 : broches d 'entrée-sortie configurables RB0 à RB7 : broches d 'entrée-sortie configurables

Page 3: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

OSC1 - OSC2 : oscillateur ( quartz par exemple ) MCLR/VPP : broche de raz VSS : 0V VDD : +5V

Pour résumer ... Le PIC 16F84 est un micro contrôleur comportant un jeu d 'instructions réduit La mémoire de programme est du type mémoire flash elle peut loger un programme de

1024*14 bits La mémoire ram utilisateur est de 68 octets La mémoire E²prom est de 64 octets Le pic 16f84 possède un timer intégré 13 entrées - sorties configurables individuellement Un watchdog intégré

Page 4: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Présentation

Le timer du PIC 16 F84 est un registre 8 bits qui à la fonction d 'un compteur programmable. Ce compteur s 'incrémente soit au rhytme de l 'horloge du quartz divisée par 4 ou bien sur un front montant ou descendant appliqué sur la broche d 'entrée ( RA4), tout ceci est programmable à l 'aide de bits que l 'on écrira dans un registre nommé Registre OPTION. Dès que le compteur à atteint la valeur de 255 le bit TOIF du registre INT CON passe à 1 pour provoquer éventuellement une interruption, le registre TIMER ne s'arrête pas il recompte à partir de 0. Trois autres bits du registre OPTION vont nous permettent de diviser le signal issu du quartz par une valeur comprise entre 2 et 256 par multiple de 2 ( 2,4,8,16,32,64,128,256). Pour les lecteurs possédant le coffret cliquer sur simulations internes puis sur timer. Un exemple de programme téléchargeable réalise un clignotant à l 'aide du TIMER, on fait changer l 'état d' une led ( clignoter) à chaque fois que le TIMER passe par 0.

Pour résumer ...

Le bit RTS du registre OPTION permet soit de sélectionner l 'horloge interne ( issue du quartz ) ou bien le signal appliqué sur la broche RA4.

Le bit RTE du registre OPTION permet de définir le choix du front montant ou descendant du signal appliqué sur la broche RA4.

Le bit PSA du registre OPTION permet de définir si on utilise le diviseur programmable

Les bits PS0,PS1,PS2 du registre OPTION définissent le diviseur à appliquer ( 2,4,8,16,32,64,128) selon le tableau 1

Page 5: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Vue des bits PS2 PS1 et PS0 du registre OPTION

Bit PS2 Bit PS1 Bit PS0 Valeur de la division interne 0 0 0 2 0 0 1 4 0 1 0 8 0 1 1 16 1 0 0 32 1 0 1 64 1 1 0 128 1 1 1 256

Tableau 1

Page 6: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Le jeu d 'instruction du PIC 16F84

A

ADDLW : Additionner le registre W et une valeur immédiate , la somme est stockée en W ( la série PIC 16C5x ne comprend pas cette instruction) ( W ) + v -> ( W ) Nombre de cycle d'horloge : 1

Indicateurs positionnés :

C si retenue ( C=1 ) DC si la somme des quatre bits de poids faible est > 15 ( DC=1 ) Z si la somme est nulle ( Z=1 )

Syntaxe :

Addlw 0x0F W + Ox0F le résultat est stocké dans W

ADDWF : Additionner le registre W et ( f ) , la somme est stockée en ( d ) ( W ) + ( f ) -> ( d )

f est l'emplacement mémoire d 'un registre Nombre de cycle d'horloge : 1

Indicateurs positionnés :

C si retenue ( C=1 ) DC si la somme des quatre bits de poids faible est > 15 ( DC=1 ) Z si la somme est nulle ( Z=1 )

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Exemple :

#define W 0 on affecte 0 à la variable W utilisée ci - après Movf valeur1, W on met la valeur 1 dans le registre W

Page 7: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Addwf valeur2, W valeur 1 + valeur 2 stocké dans W

ANDLW : Opération " ET " entre le contenu du registre W et une constante c

( W ) AND c -> ( W )

Nombre de cycle d'horloge : 1 Indicateurs positionnés :

Z si le résultat stocké dans W est nul ( Z=1 )

Exemple : Port_A equ 05h on affecte 05 à la variable Port_A utilisée ci - après #define W 0 on affecte 0 à la variable W utilisée ci - après Movf Port_A, W on met le contenu du port A dans le registre W Andlw 55h on masque un bit sur 2 ( 55 h = 0101 0101 )

ANDWF : Opération " ET " entre le contenu du registre W et f le résultat est en d

( W ) AND ( f ) -> ( d )

Nombre de cycle d'horloge : 1 Indicateurs positionnés :

Z si le résultat stocké dans W ou f est nul ( Z=1 ) d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Exemple :

R_etat equ 03h on affecte 03 à la variable R_etat utilisée ci - après Movlw 00000111b on met le contenu 00000111 dans le registre W Andwf R_etat, F on masque et on configure le registre d' état

B

BCF : Efface le bit spécifié de f

0 -> ( f{b} )

Page 8: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

f est l'emplacement mémoire d 'un registre Nombre de cycle d'horloge : 1

Indicateurs positionnés : Aucun

Exemple :

Port_b equ 06h on affecte 06 à la variable Port_B utilisée ci - après BCF Port_b, 2 on met à 0 le bit 2 du port B

BSF : Positionne le bit "b" de f à 1

1 -> ( f{b} ) Nombre de cycle d'horloge : 1 Indicateurs positionnés : Aucun Exemple : Port_b equ 06h on affecte 06 à la variable Port_B utilisée ci - après BSF Port_b, 3 on met à 1 le bit 3 du port B

BTFSC : Vérifier l'état du bit b de f et sauter l'instruction suivante si b = 0

"Saute l' instruction si" ( f{b} ) = 0

Nombre de cycle d'horloge : 1 ou 2

Indicateurs positionnés : Aucun

Exemple :

Ex1 equ 0Ah on affecte le registre 0A à la variable ex1 utilisée ci - après #define flag_Z 02h on affecte le flag Z à la variable flag_Z utilisée ci - après R_etat equ 03h on affecte 03 à la variable R_etat utilisée ci - après

Incf Ex1 on incrémente la variable Ex1 ( registre 0A ) Btfsc R_etat,flag_Z on vérifie si il y a un débordement ( Z=1 ) Movlw 54h si débordement ( Z=1 ) alors on met la valeur 54 dans le registre W

BTFSS : Vérifier l'état du bit b de f et sauter l'instruction suivante si b = 1

"Saute l' instruction si" ( f{b} ) = 1

Nombre de cycle d'horloge : 1 ou 2

Indicateurs positionnés : Aucun

Exemple :

Page 9: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Ex1 equ 0Ah on affecte le registre 0A à la variable ex1 utilisée ci - après #define flag_Z 02h on affecte le flag Z à la variable flag_Z utilisée ci - après R_etat equ 03h on affecte 03 à la variable R_etat utilisée ci - après

Incf Ex1 on incrémente la variable Ex1 ( registre 0A ) Btfss R_etat,flag_Z on vérifie qu ' il n' y a pas de débordement ( Z=0 ) Movlw 54h si aucun débordement ( Z=0 ) alors on met la valeur 54 dans W

C

CALL : Appel du sous programme s ( PC ) + 1 -> Haut de la pile s -> ( PC )

Nombre de cycle d'horloge : 2

Indicateurs à positionnés : PA0 à PA2 ( pour les PIC 16 C 5x ) Registre PCLATH pour les autres PIC

Exemple :

R_etat equ 03h on affecte 03 à la variable R_etat utilisée ci - après #define f 1 on affecte la valeur 1 à la variable f #define Pa0 05h on affecte la valeur 05 à la variable Pa0

Movlw 00111111b on charge un masque pour modifier le registre d' etat bsf R_etat, Pa0 on met le bit 5 du registre d état ( PA0 ) à 1 Andwf R_etat, f on sélectionne la page 1 pour un PIC 16 C 56 ( 0200 - 03FF ) Call sous_P Appel du sous programme sous_P à la 2 eme page de programme

CLRF : Efface le contenu de ( f )

00 -> ( f )

Nombre de cycle d'horloge : 1

Indicateurs positionnés : Z=1 Syntaxe : CLRF registre

Page 10: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

CLRW : Efface le contenu du registre W

00 -> W Nombre de cycle d'horloge : 1

Indicateurs positionnés : Z = 1 Syntaxe : CLRW

CLRWDT : Réinitialise le temporisateur du chien de garde 00 -> WDT 00 -> prédiviseur de WDT Nombre de cycle d'horloge : 1

Indicateurs positionnés : TO = 1 PD = 1 Syntaxe : CLRWDT COMF : Stocke en d le complément de f

f/ -> (d) f est l'emplacement mémoire d 'un registre

Nombre de cycle d'horloge : 1 Indicateurs positionnés : Z si résultat stocké dans W ou f est nul ( Z=1 )

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Exemple :

Dans cet exemple on charge une valeur dans un registre ici 55h puis on complémente cette valeur qui devient alors AAh.

Reg_temp equ 0Ah OA correspond à l'adresse d' un registre temporaire #define f 1 on affecte la valeur 1 à la variable f

Movlw 01010101b on charge 55h dans le registre W Movwf Reg_temp on met W dans le registre temporaire Comf Reg_temp, f on complémente le contenu du registre temporaire

Page 11: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

D

DECF : Décrémente f et range le résultat dans d

(f) - 1 -> (d) f est l'emplacement mémoire d 'un registre

Nombre de cycle d'horloge : 1

Indicateurs positionnés :

Z si résultat stocké dans le registre W ou f est nul ( Z=1 )

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Exemple :

Dans cet exemple on charge une valeur dans un registre ici 01h puis on décrémente cette valeur qui devient alors 00h ( flag Z = 1 dans cet exemple ) .

Reg_temp equ 0Ah OA correspond à l'adresse d' un registre temporaire #define f 1 on affecte la valeur 1 à la variable f Movlw 01h on charge 01h dans le registre W Movwf Reg_temp on met W dans le registre temporaire Decf Reg_temp, f on décrémente le contenu du registre temporaire DECFSZ : Décrémente f et sauter l 'instruction suivante si f = 0

(f) - 1 -> ( d ) et sauter l' instruction suivante si f=0

f est l'emplacement mémoire d 'un registre Nombre de cycle d'horloge : 1 ou 2 Indicateurs positionnés : Aucun

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Page 12: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

G

GOTO : Branchement inconditionnel à l' adresse a

a -> PC

Nombre de cycle d'horloge : 2

Indicateurs à positionnés :

PA0 : extension à 9 bits pour les PIC ( PIC 16c56 et 16c57 ) PA1 : extension à 10 bits pour le PIC ( PIC 16c57 ) PA2 : extension future Registre PCLATH pour les autres PIC

Exemple :

Goto fin Va à l'étiquette nommée "fin" - - - fin : Etiquette fin

Page 13: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

I

INCF : Incrémente f et range le résultat dans d

(f) + 1 -> (d) f est l'emplacement mémoire d 'un registre

Nombre de cycle d'horloge : 1 Indicateurs positionnés :

Z si résultat stocké dans le registre W ou f est nul ( Z=1 )

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Exemple :

Dans cet exemple on charge une valeur dans un registre ici 55h puis on incrémente cette valeur qui devient alors 56h. Reg_temp equ 0Ah OA correspond à l'adresse d' un registre temporaire #define f 1 on affecte la valeur 1 à la variable f

Movlw 01010101b on charge 55h dans le registre W Movwf Reg_temp on met W dans le registre temporaire Incf Reg_temp, f on complémente le contenu du registre temporaire

INCFSZ : Incrémente f et sauter l'instruction suivante si (f) = 0

(f) + 1 -> (d) et saute si le résultat = 0

f est l'emplacement mémoire d 'un registre Nombre de cycle d'horloge : 1 ou 2 Indicateurs positionnés : Aucun

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

IORLW : Opération logique "OU" entre le registre W et une constante c

( W ) OR c -> ( W )

Nombre de cycle d'horloge : 1 Indicateurs positionnés :

Page 14: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Z si résultat stocké dans le registre W est nul ( Z=1 )

Exemple :

Dans cet exemple on charge une valeur dans le registre W puis on éxécute un ou logique avec ne valeur immédiate

Movlw 01010101b on charge 01010101b dans le registre W Iorlw 11110000b aprés le ou logique W = 11110101b

IORWF : Opération logique "OU" entre le registre W et f résultat dans d

( W ) OR ( f ) -> ( d )

Nombre de cycle d'horloge : 1

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Indicateurs positionnés :

Z si résultat stocké dans le registre W ou f est nul ( Z=1 )

Exemple :

Dans cet exemple on charge une valeur dans le registre W puis on éxécute un ou logique avec le contenu d'un registre temporaire, le résultat est dirigé vers le registre temporaire..

Reg_temp equ 0Ah OA correspond à l'adresse d' un registre temporaire #define f 1 on affecte la valeur 1 à la variable f

Movlw 01010101b on charge 55h dans le registre W Movwf Reg_temp on met W dans le registre temporaire Movlw 00001111b on charge 0Fh dans le registre W Iorwf Reg_temp, f ou logique avec W le contenu du registre temporaire= 01011111b

M

MOVF : Copier le registre ( f ) dans ( d )

(f) + 1 -> (d) f est l'emplacement mémoire d 'un registre Nombre de cycle d'horloge : 1

Page 15: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Indicateurs positionnés :

Z si résultat stocké dans le registre W ou f est nul ( Z=1 )

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Exemple :

Dans cet exemple on copie le contenu d'un registre temporaire dans le registre W

Reg_temp equ 0Ah OA correspond à l'adresse d' un registre temporaire #define W 0 on affecte la valeur 0 à la variable W

Movf Reg_temp, W on copie Reg_temp dans W

MOVLW : Charge une constante c dans le registre W

c -> ( W )

Nombre de cycle d'horloge : 1

Indicateurs positionnés : Aucun

Exemple :

Dans cet exemple on charge une valeur dans le registre W Movlw 01010101b on charge 55h dans le registre W

MOVWF : Charge le registre W dans le registre f

( W ) -> ( f ) Nombre de cycle d'horloge : 1 Indicateurs positionnés : Aucun

Exemple :

Dans cet exemple on charge une valeur dans le registre W puis on charge le contenu vers un registre temporaire..

Reg_temp equ 0Ah OA correspond à l'adresse d' un registre temporaire #define f 1 on affecte la valeur 1 à la variable f Movlw 01010101b on charge 55h dans le registre W Movwf Reg_temp on met W dans le registre temporaire

Page 16: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

N

NOP : Aucune opération

(PC) + 1 -> (PC)

Nombre de cycle d'horloge : 1

Indicateurs positionnés : Aucun

Syntaxe : NOP

O

OPTION : Charger le registre OPTION

( W ) -> ( OPTION )

Nombre de cycle d'horloge : 1

Instruction utilisable sur les PIC de la famille 16 C 5x ( reconnue par les autres PIC )

Indicateurs positionnés : Aucun

Exemple :

Dans cet exemple on utilise la broche RTCC avec cadence horloge externe et prédivision de 8 le flanc actif sur la broche RTCC = front montant ( se reporter au tableau qui suit )

#define Def_option 22h on affecte 22 à la variable Def_option (22 correspond à l'énoncé )

Movlw Def_option on met la variable Def_option dans le registre W Option transfert du contenu de W dans le registre OPTION

Page 17: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

R

RETFIE : Retour d' interruption

1 -> GIE Haut de pile -> ( PC )

( la série PIC 16C5x ne comprend pas cette instruction)

Nombre de cycle d'horloge : 2

Indicateurs positionnés : aucun

Syntaxe : RETFIE retour d' interruption

RETLW c : Retour de routine , chargement d ' une valeur c dans le registre W

c -> ( W ) Haut de pile -> ( PC )

Nombre de cycle d'horloge : 2

Indicateurs à positionnés : PA0 à PA2 pour PIC 16C56 et 16C57

Syntaxe : RETLW 0afh retour de sous programme et on charge 0afh dans W

RETURN : Retour de sous programme

Haut de pile -> ( PC ) ( la série PIC 16C5x ne comprend pas cette instruction) Nombre de cycle d'horloge : 2

Indicateurs positionnés : aucun Syntaxe : RETURN retour d'un sous programme

RLF : Rotation à gauche de ( f ) au travers du bit carry © le résultat va dans d

Carry -> ( d0 ) ( f0 ) -> ( d1 ) ( f1 ) -> ( d2 ) ( f2 ) -> ( d3 ) ( f3 ) -> ( d4 ) ( f4 ) -> ( d5 ) ( f5 ) -> ( d6 ) ( f6 ) -> ( d7 ) ( f7 ) -> ( Carry )

Page 18: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f Nombre de cycle d'horloge : 1

Indicateurs positionnés : Éventuellement le bit C

RRF : Rotation à droite de ( f ) au travers du bit carry © le résultat va dans d

( f0 ) -> Carry ( f1 ) -> ( d0 ) ( f2 ) -> ( d1 ) ( f3 ) -> ( d2 ) ( f4 ) -> ( d3 ) ( f5 ) -> ( d4 ) ( f6 ) -> ( d5 ) ( f7 ) -> ( d6 ) Carry -> ( d7 )

Nombre de cycle d'horloge : 1

Indicateurs positionnés : : Éventuellement le bit C

S

SLEEP : Mise en veille du microcontrôleur ( Power Down mode )

0 -> PD 1 -> TO 00 -> WDT 00 -> Prédiviseur de WDT

Nombre de cycle d'horloge : 1

Indicateurs positionnés :

PD=0 et TO=1

Syntaxe : SLEEP La consommation de courant est minimale.

SUBLW : Soustraction entre une valeur et le registre W

Page 19: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

v - ( W ) -> ( W ) ( la série PIC 16C5x ne comprend pas cette instruction)

Nombre de cycle d'horloge : 1 Indicateurs positionnés :

C si retenue ( C=1 ) DC si la somme des quatre bits de poids faible est > 15 ( DC=1 ) Z si la somme est nulle ( Z=1 )

Syntaxe : SUBLW 0x01 éxécute la soustraction 01 - contenu de W résultat dans W ( méthode du complément à 2 )

SUBWF : Soustraire le contenu du registre W du contenu du registre f résultat dans d

( f ) - ( W ) -> ( d )

Nombre de cycle d'horloge : 1

Indicateurs positionnés : Z si résultat stocké dans le registre W ou f est nul ( Z=1 ) C = 1 si f > W ou f = W

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Exemple :

Dans cet exemple on charge une valeur dans le registre W puis on la soustraie avec le contenu d'un registre temporaire, le résultat est dirigé vers le registre temporaire.. ( méthode du complément à 2 )

Reg_temp equ 0Ah OA correspond à l'adresse d' un registre temporaire #define f 1 on affecte la valeur 1 à la variable f

Movlw 00001010b on charge 0Ah dans le registre W Movwf Reg_temp on met W dans le registre temporaire Movlw 00000001b on charge 01h dans le registre W Subwf Reg_temp, f on soustraie avec W le registre temporaire= 00001001b

SWAPF : Échange de quartets entre le registre ( f ) et ( d )

( f bit 0 à bit 3) -> ( d bit 4 à bit 7 ) ( f bit 4 à bit 7) -> ( d bit 0 à bit 3 )

Nombre de cycle d'horloge : 1

Page 20: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Indicateurs positionnés : Aucun

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

T

TRIS : Charge le registre TRIS f

Cette instruction concerne les PIC 16 C 5x ( compatible avec les autre PIC )

( W ) -> ( TRIS f )

Nombre de cycle d'horloge : 1

Indicateurs positionnés : Aucun

TRIS 5 configure le port A TRIS 6 configure le port B TRIS 7 configure le port C

si bit = 0 alors la broche est en sortie

Exemple : Dans cet exemple les broches A0 A1 et A7 du port A sont déclarées en sortie, les autres broches en entrées #define Sens_port_A 01111100b on affecte 7C ( en hexa ) à la variable Sens_port_A Port_A equ 05h on affecte 05 à la variable Port_A ( adresse du port A ) Movlw Sens_port_A on met la variable Sens_port_A dans le registre W Tris Port_A transfert du contenu de W dans le registre de direction du Port A

X

XORLW : Opération logique XOR ( ou exclusif ) entre le contenu de W et une constante c

( W ) XOR c -> ( W )

Nombre de cycle d'horloge : 1

Indicateurs positionnés:

Page 21: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Z si résultat stocké dans le registre W est nul ( Z=1 )

Exemple :

Dans cet exemple on charge une valeur dans le registre W puis on éxécute un ou exclusif avec une valeur immédiate , le résultat est dirigé vers le registre W

Movlw 01010101b on charge 55h dans le registre W Xorlw 00111100b ou exclusif avec W le contenu du registreW = 01101001b

XORWF : Opération logique XOR ( ou exclusif ) entre le contenu de W et f le résultat en d

( W ) XOR ( f ) -> ( d )

Nombre de cycle d'horloge : 1

Indicateurs positionnés :

Z si résultat stocké dans le registre W est nul ( Z=1 )

d est paramétrable si d= 0 le résultat va dans le registre W si d= 1 le résultat va dans le registre f

Exemple :

Dans cet exemple on charge une valeur dans le registre W puis on éxécute un ou exclusif avec le contenu d'un registre temporaire, le résultat est dirigé vers le registre temporaire..

Reg_temp equ 0Ah OA correspond à l'adresse d' un registre temporaire #define f 1 on affecte la valeur 1 à la variable f

Movlw 01010101b on charge 55h dans le registre W Movwf Reg_temp on met W dans le registre temporaire Movlw 00001111b on charge 0Fh dans le registre W Xorwf Reg_temp, f ou exclusif avec W le contenu du registre temporaire= 01011010b

Page 22: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Présentation

L' E²PROM ( Electrically Erasable Programmable Read Only Memory ) du PIC 16F84 est une mémoire pouvant stocker 64 octets. L ' atout majeure de ce type de mémoire est qu' elle conserve les données une fois l 'alimentation disparue. L 'inconvénient des E²PROM est leur temps d'accès assez long, cette mémoire ne convient pas pour mémoriser des calculs intermédiaires demandant de la rapidité ( exemple : asservissement ). Le constructeur Microchip donne une durée de vie d 'environ un million de cycles en lecture-écriture.

• Lors de l 'écriture d 'un programme il est possible d' aller écrire en E²PROM, pour par exemple entrer un paramètre, ou bien encore pour donner le numéro de la version logiciel. Pour ce faire une syntaxe précise indique au précompilateur de stocker les informations mentionnées vers l ' E²PROM. La première adresse de la mémoire E²PROM est 2100 en héxa. La syntaxe org permet de définir l 'endroit ou l 'on code l 'instruction qui suit. Dans la syntaxe suivante 'org 2100' le compilateur "sait" que l 'instruction qui suit doit être logée à l 'adresse 2100. La syntaxe 'de' indique au compilateur que la donnée qui suit doit être écrite en E²PROM.

Syntaxe:

org h'2100' de "Programme d' essai ver 1.0 01/08/01 "

• Au cours de l 'exécution d 'un programme il est possible de lire ou d 'écrire en E²PROM pour ce faire il faut respecter le cheminement donné dans l 'exemple suivant :

1 - Écriture en E²PROM :

bsf STATUS,5 ; on met à 1 le 5eme bit du registre status pour accéder à la 2eme page mémoire MOVLW 0x04 ; on met 04 dans le registre W

Page 23: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

MOVWF EECON1 ; on met 04 dans le registre EECON1 bcf STATUS,5 ; on remet à 0 le 5eme bit du registre status

movf adresse,W ; on met le registre adresse ( déclaré auparavant ) dans W MOVWF EEADR ; on met W sur EEADR ( adresse E²PROM )

movf donnée,W ; on met le contenu du registre donnée dans W MOVWF EEDATA ; on met W sur EEDATA ( donnée E²PROM ) bsf STATUS,5 ; on met à 1 le 5eme bit du registre status pour accéder à la 2eme page mémoire ( EECON 1 et 2 ) movlw 0x55 ; passage obligatoire pour écrire en E²PROM movwf EECON2 ;... movlw 0xAA ;... movwf EECON2 ;... bsf EECON1,1 ;... bcf STATUS,5 ; on remet à 0 le 5eme bit du registre status

2 - Lecture en E²PROM :

MOVF adresse, W ; on met le registre adresse ( déclaré auparavant ) dans W MOVWF EEADR ; on met W sur EEADR ( adresse E²PROM ) bsf STATUS,5 ; on met à 1 le 5eme bit du registre status pour accéder à la 2eme page mémoire MOVLW 0x01 ; on met 01 dans le registre W MOVWF EECON1 ; on met 01 dans le registre EECON1 bcf STATUS,5 ; on remet à 0 le 5eme bit du registre status MOVF EEDATA, W ; on met la donnée E²PROM dans W

Pour résumer ...

La mémoire Eprom du PIC 16F84 comporte 64 octets disponibles pour l 'utilisateur Cette mémoire sauvegarde les données même hors tension Pour écrire dans cette mémoire il faut respecter une syntaxe rigoureuse décrite

précédemment

Page 24: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Présentation

Vous êtes tranquillement en pleine conversation téléphonique avec votre ami(e) préféré(e) et soudain quelqu'un sonne à la porte, le premier réflexe est de faire patienter votre interlocuteur au téléphone et d 'aller voir à votre porte qui se présente... on vous à interrompu pendant votre conversation.

Finalement c 'était un représentant , vous lui signifiez que vous n ' êtes pas intéressé et vite vous retournez à votre première tâche , c'est à dire à votre conversation téléphonique, vous avez traité le plus urgent. Pour un programme qui se déroule "tranquillement" le principe est le même. Une tâche de fond s ' exécute, c'est votre programme principal, par exemple vous faites clignoter une lampe ( led ). Soudain l ' utilisateur "appui" sur le bouton "plus rapide" , que fait votre programme ? en fait il fait comme vous avez fait précédemment, c 'est à dire que quelque soit l 'endroit ou l 'on se situe dans le programme ( c'est votre conversation téléphonique ) , il exécute le plus urgent, dans notre exemple il détecte l 'appui sur le bouton et enregistre cette information . Ensuite l 'appui étant mémorisé le programme "revient" à l 'endroit ou il s 'était arrêté auparavant et la lampe clignote plus vite. Pour résumer ...

Le programme principal s exécute normalement ( clignotement de la led ) Un événement extérieur survient ( un appui sur le bouton ) Le micro contrôleur termine l 'instruction qu 'il exécutait et mémorise l 'adresse en

cours ( cette adresse lui servira à revenir à l 'endroit ou il s 'est "dérouté" dès la fin de l 'interruption )

Le micro contrôleur saute à l 'adresse du sous-programme d 'interruption ( comme on le verra sur le pic 16f84 l 'adresse de sous-programme d 'interruption est 04 )

Le micro contrôleur exécute le programme d 'interruption

Page 25: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Le micro contrôleur revient à l 'adresse suivante par rapport à la dernière instruction exécuté dans le programme principal. Sur le PIC 16F84 il y a quatre événements qui peuvent déclencher une interruption :

• Une modification de de l 'état d 'une des broches (configurées en entrées) RB4 à RB7 • Une modification de l 'état de la broche RB0/int • De la fin de l 'écriture en E²PROM • Du débordement du timer interne

Pour que le micro contrôleur accepte une ou plusieurs de ces sources d 'interruptions il va falloir lui préciser par l 'intermédiaire de bits que l 'on déclarera dans un registre nommé INTCON Vue des bits du registre INTCON

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

Ce bit permet de valider les interruptions. C'est une validation générale

Ce bit permet de valider l 'interruption issue de la fin d 'écriture en E²PROM

Ce bit valide l 'interruption issue du débordement du TIMER

Ce bit valide l 'interruption du programme suite à un changement d 'état sur RB0

Ce bit valide l 'interruption du programme suite à un changement d 'état sur RB4-RB7

Ce bit signale que l 'interruption en cours provient du débordement du TIMER

Ce bit signale que l 'interruption en cours provient d 'un changement d 'état sur la broche RB0

Ce bit signale que l 'interruption en cours provient d 'un changement d 'état sur l 'une des broches RB4-RB7

Tableau 1

Synoptique des modes d' interruptions

Page 26: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

Maintenant un exemple de programme avec une interruption. Dans cet exemple on configure le pic pour que dès l'apparition d 'une impulsion sur la broche RB0 ( sur un front montant, c'est le bit INTEDG du registre OPTION ( bit 6 ) qui précise front montant ou front descendant sur RB0 ), on déroute le programme principal qui était en mode sleep pour allumer une led connectée sur RB1. Le passage à 1 ( front montant ) sur la broche RB0 va provoquer une interruption du programme principal le compteur de programme va charger l 'adresse 04 ( sur le pic 16f84 ce sera toujours cette unique adresse ) correspondant à l 'adresse du sous-programme d'interruption. A la fin d 'un programme d 'interruption il ne faut pas oublier : - de remettre le flag ( un bit qui se positionne à 1 dès qu 'une interruption est active ) de l 'interruption déclenchée : ( soit TOIF soit INTF soit RBIF , dans notre exemple se sera INTF ) - de mettre l 'instruction de retour d 'interruption RETFIE afin que le programme revienne à l' endroit ou il a été dérouté ;************** Début du programme ********************* ;------------ Directive d' assemblage pour PLAB --- - list p=16f84A #include p16f84A.inc __config H'3FF9' ORG 0 goto init ;****** Le programme d' interruption se déclenche *** ;****** lorsque l' entrée RB0 passe de 0 à 1 *** ORG 4

Page 27: Présentationg.fondeville.free.fr/fichiers/Cours 16F84.pdf ·  · 2004-08-05Le jeu d 'instruction du PIC 16F84 A ADDLW: Additionner le registre W et une valeur immédiate , la somme

;*********** Programme d 'interruption ********************** bsf PORTB,1 ; on allume la led connectée sur rb1 bcf INTCON,INTF ; on remet à 0 le bit du registre d' IT qui est passé à 1 RETFIE ; retour d 'interruption ;************* Programme d' INIT ************************** init bsf STATUS,5 ; on met à 1 le 5eme bit du registre status pour accéder ; à la 2eme page mémoire ( pour configurer trisa et trisb ; -> broches en entrée ou en sortie ) MOVLW B'10011001' ; rb0,rb3,rb4 en entrée ( rb0 sera la broche utilisée ; pour l ' interruption ) MOVWF TRISB bcf STATUS,5 ; on remet à 0 le 5eme bit du registre status pour accéder ; à la 1ere page mémoire bsf OPTION_REG,INTEDG ; Le passage de 0 à 1 sur RB0 provoque une IT ; sur un front montant bsf INTCON,INTE ; autorise l ' IT sur RB0 bsf INTCON,GIE ; autorise les Interruptions clrf PORTB ;************ Programme principal en rebouclage ********************* debut sleep ; mise en sommeil du PIC conso : 3.2 mA, attente impulsion sur RB0 GOTO debut ;*********** Fin du programme ***********