Les Pic 16F877
Les Pic 16F877
Les Pic 16F877
Gnralit sur les Pics : Introduction : Un objet technique, intgrant de llectronique, fait souvent apparaitre des fonctions ayant pour rle le traitement dinformation : oprations arithmtiques (Addition, multiplication ) ou logique (Et, OU ) entre plusieurs signaux dentre permettant de gnrer des signaux de sortie. Ces fonctions peuvent tre ralises pas des circuits analogiques ou logiques. Mais, lorsque lobjet technique devient complexe, et quil est alors ncessaire de raliser un ensemble important de traitement dinformation, il devient plus simple de faire appel une structure base de microcontrleur PIC. Dfinition : Une PIC nest rien dautre quun microcontrleur, c'est--dire une unit de traitement de linformation de type microprocesseur laquelle on a ajout des priphriques internes permettant de raliser des montages sans ncessiter de lajout des composants externes. La nomenclature de PIC et sous copyright Microship, ce microcontrleur encore trs utiliser a lheure actuelle est un compromis entre simplicit demploi et prix de revient. Il fait partie de la famille des circuits RISC (Reduced Instruction Set Computer), caractrise par leur vitesse dexcution et leur jeu dinstruction rduite (le 16f84 possde seulement 35 instruction de base). Sachons que plus quen rduit le nombre dinstructions, plus facile et plus rapide quen est le dcodage, et plus vite le composant fonctionne. Lhorloge fournie la PIC est pr divis par 4 au niveau de celle-ci. Cest cette base de temps qui donne le temps dun cycle. Alors Si on utilise par exemple un quartz de 4MHz, on obtient donc 1000000 de cycles/seconde, or, comme la PIC excute pratiquement une instruction par cycle, hormis les sauts, cela donne une puissance de lordre de 1MIPS (1 Million dInstructions Par Seconde). Les diffrentes familles des PICs : La famille des pics est subdivise lheure actuelle en 3 grandes familles : Base-line : cest une famille qui utilise des mots dinstructions de 12 bits. Mid-range : cest une famille qui utilise des mots de 14 bits (dont font partie les 16F84, 16f876 et 16f877) High-end : cest une famille qui utilise des mots de 16 bits.
Remarque : toutes les PICs Mid-range ont un jeu de 35 instructions, stockent chaque instruction dans un seul mot de programme, et excutent chaque instruction (sauf les sauts) en un cycle. On atteint donc des trs grandes vitesses, et les instructions sont de plus trs rapidement assimiles. Identification dun Pic : Pour identifier un PIC, on utilise simplement son numro : On considre la lecture suivante : kk
(L) X yy -zz
kk : reprsente la famille dont appartient la PIC actuellement (12, 14, 16, 17 et 18) L : Celle-ci indique que la PIC peut fonctionner avec une plage de tension beaucoup plus tolrante. X : peut avoir deux sens : C : pour dire que la mmoire programme est une EPROM ou plus rarement une EEPROM F : pour indiquer une mmoire de type FLASH CR : pour indiquer une mmoire de type ROM
yy : Identificateur -zz : reprsente la frquence dhorloge maximal que la PIC est capable daccepter Exemple : Une 16F877-20 est une PIC Mid-Range (16) dou la mmoire programme est de type FLASH (F) donc rinscriptible de type 877, et capable daccepter une frquence dhorloge de 20MHz. Remarque : Les PICs sont des composants STATIQUES, cest dire que la frquence dhorloge peut tre abaisse jusqu larrt complet sans perte de donnes et sans dysfonctionnement. Structure minimale dune PIC : Peut-tre est-il bon de ne pas acheter une voiture avant d'avoir son permis et, avant de traiter de programmation et doutils de dveloppement, il vaut mieux de dfinir clairement ceux dont on va parler. Un microcontrleur est donc un circuit intgr qui contient en interne, cest--dire dans un seul et mme botier, lquivalent de la structure complte dun micro-ordinateur. Alors le microcontrleur le plus simple quil soit, possde au minimum les lments suivants :
Une unit centrale qui est le cur du systme, galement appel CPU pour Central Processing Unit, Cest lquivalent du microprocesseur que vous trouvez dans votre ordinateur mais avec une puissance gnralement moindre, la vocation ntant pas la mme. Cest cette unit centrale qui excute le programme et pilote ainsi tous les autres lments. Elle dispose Gnralement de deux connexions avec lextrieur, une pour son horloge et une pour sa rinitialisation ou reset. Une mmoire contenant le programme excuter par le microcontrleur, gnralement appele mmoire morte ou ROM pour (Read Only Mmory), mmoire lecture seule. Cette mmoire a la particularit de sauvegarder en permanence les informations quelle contient, mme en absence de tension (ce qui est primordiale, sinon il faudrait reprogrammer le microcontrleur a chaque remise sous tension !). Cest donc elle en fait qui personnalise votre circuit, puisque cest elle qui dfinit sa fonction. Une mmoire vive galement appele RAM (Random Access Mmory), cette mmoire permet de sauvegarder temporairement des informations alors le microcontrleur pourra utiliser cette mmoire pour stoker des variables temporaires ou faire des calculs intermdiaires. Il est a noter que le contenu dune RAM nest sauvegard que pendant la phase dalimentation du circuit.
Des entres/sorties qui vont permettre au microcontrleur de dialoguer avec le monde extrieur. Cest donc l que vont tre connects les claviers, afficheurs, poussoir, moteurs, relais, les capteurs, ..., que va utiliser votre application. Tous ces lments sont relis entre eux par ce que lon appelle un bus, cest--dire un ensemble de liaisons transportant des adresses, des donnes et des signaux de contrle. Remarque : Dans de trs nombreux microcontrleurs, dont ceux que nous utiliserons dans cette srie darticles, ce bus nest pas accessible de lextrieur du botier et nous naurons donc pas nous en occuper.
Choix du microcontrleur : Le choix dun microcontrleur est lune des phases dimportance extrme car cest de ce dernier que dpendent en grande partie la performance, la taille, la facilit dutilisation et le prix du montage. Comme on utilise plusieurs lments externes, le choix de PIC 16f877 tait une solution parfaite car elle contient un nombre convenable des ports. Ce qui augmente dautant le nombre dentres/sorties disponibles, il dispose de 33 lignes dentres/sorties reparties en cinq ports : Un port A de 6 bits (RA0 RA5). Un port B de 8 bits (RB0 RB7). Un port C de 8 bits (RC0 RC7). Un port D de 8 bits (RD0 RD7). Un port E de 3 bits (RE0 RE3).
Principaux caractristiques du PIC 16f877 : Le PIC 16f877 possde les caractristiques suivantes : Une frquence de fonctionnement allant jusqu 20 MHZ Jeu dinstructions de 35 instructions Une mmoire de programme de type FLASH sur 8K mots (1 mot = 14 bits) Une mmoire de donnes de type EEPROM sur 256 octets Une pile (Stack) 8 niveaux 14 sources dinterruptions Un chient de garde WDT (Watch Dog Timer) Timer 0 (compteur 8-bits avec pr-diviseur) Timer 1 (compteur 16-bits avec pr-diviseur et possibilit dutiliser une horloge externe) Timer 2 (compteur 8-bits avec pr-diviseur) Un convertisseur Analogique-Numrique 10-bits 8 entres multiplexes Deux modules de capture/comparaison/PWM Ports Entres/Sorties : A, B, C, D et E Une interface de communication srie (MSSP, USART) Tension de fonctionnement entre 2 et 5.5 V
Brochage du PIC 16F877 : Le boitier ci-contre dcrit larchitecture externe du 16F877 qui comprend 40 pins dont : 33 pins dentres/sorties multiplexes avec dautres fonctions 4 pins pour lalimentation : VDD et VSS 2 pins pour loscillateur : OSC 0 et OSC 1 1 pin pour le RESET : MCL
Brochage du 16F877
Architecture interne :
Une fois le programme est stock dans la mmoire (Program Memory) et le microcontrleur est initialis, linstruction a excuter est dsigne par le PC (Program Counter) et sera charge dans le registre dinstruction (instruction deg) au moyen dun bus de programme sur 14-bits, puis elle sera dcode dans le dcodeur et le contrleur
dinstruction (instruction dcode & control) et ensuite dirige vers lUAL (ALU) avec les donnes charges a partir des pins configures comme entres , lUAL fera lopration ncessaire et sauvegarde le rsultat temporairement dans le registre de travail (W reg) sur 8-bits, ce rsultat sera aussi mit dans la RAM a laide dun bus de donnes sur 8-bits. a- Registres de fonction Spciale (SFR : Special Function Registers) Les SFR sont des registres utiliss par lunit centrale et les modules peripheriques, ils sont implments comme une RAM statique. Ils jouent le role dun tableau de bord pour configurer les differentes ressources internes du PIC, parmi ces registres il y a : Registre STATUS : (adresses : 03h, 83h, 103h, 183h) Contient les different bits flags lis aux operation arithmetiques, les indicateurs de RESET et le bit de selection de la BANK mmoire. Registre OPTION_REG : (addresses : 81h, 181h) Ce register peut etre lu et crit, il contient les bits de controle qui permettent de configure le pre-diviseur, les interruption externes, le TMR0 et le pull-up sur le PORTB. Registre INTCON : (addresses : 0Bh, 8Bh, 10Bh, 18Bh) Cest le registre de controle des interruption. b- Les memoires Le 16F877 possde 3 types de mmoire : Une mmoire FLASH pour stoker le programme. Une RAM pour les donnes. Une EEPROM pour les donnes.
La mmoire FLASH
La mmoire FLASH est une mmoire qui peut etre ecrite et effacce electriquement. Elle est conue pour stoker le programme et elle est sur 8K mots (1 mot = 14-bits). La RAM et LEEPROM
La RAM est sur 368 octets, elle sert a stoker les donnes temporaires ( resultat de lUAL), elle comprend tous les registres de fonction spciale. Cette mmoire est partitionnes en 4 parties, chaque partie est appele BANK et comporte 7Fh addresses (i.e. 128 octets), chaque BANK peut etre selectionn a partir des bits RP1 et RP0 du registre STATUS comme suit : RP0, RP1 00 01 10 11 Slection des BANK BANK 0 1 2 3
c- Configuration de loscillateur (Horloge) Le PIC 16F877 peut fonctionner en 4 modes doscillateur : LP : Low Power Crystal (Quartz Faible Puissance) XT : Crystal/Resonater (Quartz/Rsonateur en cramique) HS : High Speed Crystal/Rsonater (Quartz haute frequence/resonateur en cramique H) RC : Circuit RC
Chacun de ces modess peut etre slectionn travers les bits de configuration FOSC 1 et FOSC 0 (Registre : CONFIGURATION WORD 2007h), d- Ports dEntres/Sorties Le PIC 16F877 dispose de 5 ports Entres/Sorties (au total 33 pins) : PORT A, B, C, D et E. de plus il y a le PSP (Parallele Slave Port) : le Port Parallle Esclave PORT A
Le PORT A est un port bidirectionnel de 6-bits (6 entres/sorties) : de RA0 arrivant RA5 ; le registre correspondant qui dfinit la direction des donnes est le TRISA, la mise en 1 dun bit du TRISA configura la broche correspondante a ce bit comme entre, et la mise a 0 de ce mme bit mettra la broche correspondante comme sortie. La broche RA4 est multiplexe avec une autre fonction qui est lentre pour lhorloge du TIMERO, cette broche deviendra donc RA4/TOCKI. Les autres pins sont multiplexes avec les entres analogiques du CAN et lentre VREF, pour cela, le registre ADCON1 permet de dterminer la fonction de chaque pin.
Adress e Nom Bit-7 Bit -6 Bit-5 Bit-4 Bit-3 Bit-2 Bit-1 Bit0 Valeur sur POR, BOR 0x 0000 -11 1111 PCF G0 -0-0000 Valeur sur autres reset --0u 0000 -11 1111 -0-0000
05 h 85 h 9fh
_ _
ADFM
_ _ _
RA5
RA4
RA3 PCFG 3
RA2 PCFG2
RA1 PCFG1
RA0
Rsum des registres associs avec le PORT A x : inconnu, u : inchang, - : emplacements non implments (0), les cellules ombrages ne sont pas utilises par le PORT A. Au dmarrage (Power-On Reset POR), les pins de ce port sont configurs comme des entres analogiques et lus comme 0. PORT B
Le PORT B est un port bidirectionnel de 8-bits (8 entes/sorties) : de RB0 arrivant RB7; le registre correspondant qui definit la direction des donnes est le TRIS B, la mise
1 dun bit du TRIS B configura la broche correspondante a ce bit comme entre, et la mise a 0 de ce meme bit mettra la broche correspondante comme sortie. En mode entre, chaque broche du PORT B doit etre maintenue a un niveau haut a laide des resistances de Pull-Up, ceci en mettant a 0 le bit RBPU (du registre OPTION). En mode sortie ou lors dun POR (Power-On Reset), ces Pull-Up sont desactivs. Un changement detat sur lune des broches RB4, RB5, RB6, RB7 declenche une interruption, ceci nest possible que pour celles qui sont configures comme entres.
Adresse Nom Bit-7 Bit-6 Bit-5 Bit-4 Bit3 RB3 Bit2 RB2 Bit1 RB1 Bit0 RB0 Valeur sur POR, BOR xxxx xxxx 1111 1111 1111 1111 Valeur sur autres reset uuuu uuuu 1111 1111 1111 1111
RB7
RB6
RB5
RB4
Registre de direction des donnes PORTB RBPU INTEDC TOCS TOSE PSA PS2 PS1 PS0
Rsum des registres associs avec le PORTB x : inconnu, u : inchang, - : emplacement non implements 0, les cellules ombrages ne sont pas utilises par PORTB PORT C
Le PORT C est un port bidirectionnel de 8-bits (8 entres/sorties) : de RC0 arrivant RC7 ; le registre correspondant qui definit la direction des donnes est le TRIS C, a la mise a 1 dun bit du TRIS C configura la broche correspondante ce bit comme entre, et la mise a 0 de ce meme bit mettra la broche correspondante comme sortie.
Adresse 07h 87h Nom PORTC TRISC Bit7 RC7 BitBitBitBitBitBit6 5 4 3 2 1 RC6 RC5 RC4 RC3 RC2 RC1 Registre de direction de donnes PORTC Bit0 RC0 Valeur sur POR, BOR xxxx xxxx 1111 1111 Valeur sur autres RESET uuuu uuuu 1111 1111
Le PORT D est un port bidirectionnel de 8-bits (8 entres/sorties) : de RD0 arrivant RD7 ; le registre correspondant qui definit la direction des donnes est le TRISD, la mise a 1 dun bit TRISD configura la broche correspondante a ce bit comme entres, et la mise a 0 de ce meme bit mettra la broche correspondante comme sortie. Le PORTD peut etre configur comme port parallele esclave : PSP (Parallele Slave Port) en mettant a 1 le bit PSPMODE du registre TRISE
Adresse
Nom
Bit-7
Bit-6
Bit-5
Bit-4
Bit-3
Bit-2
Bit-1
Bit-0
RD7
RD6
RD5
RD4
RD3
RD2
RD1
RD0
Registre de direction des donnes PORTD IBF OBF IBOV PSPMODE _ PORTE Data Direction Bits
Valeur sur POR, BOR xxxx xxxx 1111 1111 0000 111
Valeur sur autres RESET uuuu uuuu 1111 1111 0000 111
x : inconnu, u : inchang, - : emplacement non implments (0), les cellules ombrages ne sont pas utilises par le PORTD PORT E
Le PORT E a 3 broches, RE0, RE1 et RE2, configurables en entres et en sorties a partir des trois premiers bits du registre TRIS E. Ces broches sont multiplexes avec les entes du CAN (Convertisseur Analogique Numrique). Au dmarrage (Power-On Reset POR), les pins de ce port sont configurs comme des entres analogique et lus comme 0.
Adresse Nom Bit-7 Bit6 Bit-5 Bit-4 Bit-3 Bit-2 Bit-1 Bit0 Valeur sur POR, BOR ---- xxx 0000 111 --00000 Valeur sur autres RESET ---- uuu 0000 111 --00000
IBF ADFM
OBF -
IBOV -
PSPMODE -
PCFG2
RE2
RE1
RE0
x : inconnu, u : inchang, - : emplacement non implements (0), les cellules ombrages ne sont pas utilises par le PORT E. Port Parallele Esclave (PSP : Parallele Slave Port)
Cest le PORT D qui fonctionne en PSP (8-bits) quand le bit de contrle PSPMODE (du registre TRIS E) est a 1. La mise a 1 du bit PSPMODE activera aussi les pins RD (Read), WR (Write) et CS (Chip Select), physiquement sont celles du PORT E). pour cette fonctionnalit, les broches du PORTE doivent etre configures en entres (mise a 1 des bits 0, 1 et 2 dans TRISE) et aussi il faut mettre les 4 premiers bits du registre ADCON 1 a 1 pour que le PORTE soit en E/S numeriques (pas de conversion A/N sur ce port) Le PSP peut interfacer directement avec un microprocesseur 8-bits (bus de donnes sur 8-bits) a laide des broches : CS : pour valider le PIC RD : pour indiquer au PIC quil doit lire
Lcriture dans le PSP ce fais lorsque CS et WR sont a 0, et quand lune de ces broches se met a 1 le bit flag IBF (Input Buffer Full), du registre TRISE, se met a 1 pour signaler la et qui sera signale par le bit PSPIF(PSP Interput Flag) fin de lecriture. La lecture su PSP ce fais lorsque CS et RD sont a 0. Ds la mise a 0 de ces derniers, le bit flag OBF (Output Buffer Full), du registre TRISE, se met immediattement a 0 pour indiquer que le PORTD est en attente pour etre lue par le bys externe. Qaund CS ou RD se met a 1, cest la finde la lecture (du registre PIR1) en se mettant a 1. Quand le mode PSP est desactiv, les bits IBF et OBF doivent etre a 0. Cependant, meme si le bit IBVO tait a 1, il doit etre effac par logiciel. e- Timers - Timer 0 Timer 0 est un 8-bits temporisateur/compteur. En mode temporisateur, selectionn en mettant a 0 le bit TOSC (OPTION_REG), lincrementation du Timer 0 se produit a chaque cycle dinstruction sans le prediviseur, lecriteure dans le registre TMR0 fais que lincrementation sera arrete durant les deux cycles dinstruction suivants. Le mode compteur est selectionn en mettant a 1 le bit TOSC(OPTION_REG), dans ce cas le Timer 0 sera incremant soit sur front montant soit sur front descendant de lhorloge externe sur la patte RA4/TOCK 1. Le front dinstruction est selectionn a partir du bit TOSE (OPTION_REG) Le timer 0 peut engendrer une interruption lors dun debordement de FFh a 00h, ce debordement mit a 1 le bit TOIF (INTCON) pour signaler linterruption, aprs la fin de linterruption ce bit doit etre effac par logiciel. Il suffit de mettre a 0 le bit T0IE (INTCON) pour desactiver linterruption du timer 0. Pour ce mode le timer 0 un pre-diviseur (Prescaler) est disponible et il est partag avec le Timer chien de garde WDT (Watchdog Timer), lassignation du pre-diviseur au Timer 0 fait que le WDT na pas de pre-diviseur associ, et vice-versa. Lassignation et la selection de taux de division de frequence se fais a laide des bits PSA (pour lassignation) et PS2 : PS0 (pour le taux) (registre OPTION_REG). Quand le pre-diviseur est assigne au Timer 0, lecriture dans le registre TMR0 efface le prediviseur mais ne change pas son assignation, et aussi, cette ecriture fais que lincrementation ne reprenne quapres un delai de trois cycles dinstructions. Timer 1
Timer 1 est un temporisateur/compteur 16-bits, il possde 2 registres : TMR1H et TMR1L Chacun est sur 8-bits qui sincrmentent de 0000h a FFFFh. le Timer1 dclenche une interruption sur un passage de FFFFh 0000h (dbordement de
Timer1), cette interruption est signale par la mise a 1 du bit TMR1IF ( registre PIR1). Cette interruption peut etre active / desactive a laide du bit TMR1IE (registre PIE1). Ce module peut etre active/desactive a laide du bit TMR1ON (registre T1CON),1/0. Le Timer1 fonctionne en deux modes : Mode temporisateur Mode compteur Timer2
Le timer2 est un temporisateur/compteur 8-bits avec un pre-diviseur, un postdiviseur et un registre sur 8-bits PR2 dit registre de periode. Le registre TMR2 est incremente est increment, a laide de lhorloge interne (FOSC/4), de 00h jusqu' une valeur specefie dans le registre PR2, puis il recommence de 00h. Lorsquil y a une egalit entre le contenu du registre TMR2 et celui du PR2, un signale sera appliqu au post-divideur (4-bits) pour generer une interruption. Le timer2 est arret sur la mise a 0 du bit TMR2ON (du registre T2CON) Registre T2CON : (adresse = 12h) U-0 L/E-0 L/E-0 L/E-0 L/E-0 L/E-0 L/E-0 L/E-0 TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 TOUTPS0 Bit 7 Bit 0 Bit 7 Non-implement : lu comme 0 Bit 6 :3 T OUT PS3 : T OUT PS0 bits de selection du taux de post-division de la sortie du Timer2 0000 = 1 :1 valeur de post-division 0001 = 1 :2 valeur de post-division 1111 = 1 :16 valeur de post-division Bit 2 : TMR2ON : bit de mise en marche du timer2 1= activer le Timer2 0= stoppe le Timer2 Bit 1 : 0T2CKPS1 : T 2CKPS0 : Bits de selection du taux de pre-division de lhorloge du Timer2.
00 = predivision par 1 01 = predivision par 4. 1x = predivision par 16 f- Interface MSSP : (master synchronous serial Port) Le MSSP est une interface de communication serie, qui permet une communiction serie avec des microcontroleurs et dautres composants peripheriques (EEPROMs series, Afficheur LCD, CAN). Le MSSPfonctionne en deux modes : - Mode SPI ( serial Peripheral Interface) - Mode I2C (Inter-Inegrated Circuit g- Interface USART : (Universal Synchronous Asynchronous Receiver Transmitter) Le module USART est un module de communication srie, il est connu aussi sous SCI (Serial Communication Interface). LUSART peut etre configur en 3 modes de fonctionnement : Asynchrone (Full Duplex) Synchrone Maitre (Half Duplex) Synchrone Esclave (Half Duplex)
Le bit SPEN (Registre RCSTA) et les bits 6 et 7 du registre TRISC doivent etre a 1 pour que les deux pattes RC6/TX/CK et RC7/RX/DT soient configures en USART.