23012826-microcontroleur-PIC16F84

  • Upload
    reda

  • View
    215

  • Download
    0

Embed Size (px)

DESCRIPTION

pic 16f84 exll cours

Citation preview

  • Notes de cours sur le microcontrleur PIC16F84BADR DIDOUHFSTF

  • PLAN I. FAMILLE PIC DE MICROCHIP II. ORGANISTION DU 16F84 Description Gnrale Structure interne et externe Organisation de la mmoire

    III. LE JEU DINSTRUCTIONS IV. LES MODES DADRESSAGE V. LES INTERRUPTIONS SUR LES PICS Mcanisme dinterruption sur les PICs Les sources dinterruptions sur la 16F84

    VI. FORME GENERALE DUN PROGRAMME Configuration du PIC Structure dun programme avec interruption

    VII. EXEMPLES DAPPLICATIONS

  • I. FAMILLE PIC DE MICROCHIP Introduction

    Une PIC est un microcontrleur, cest dire une unit de traitement de linformation de type microprocesseur laquelle on a ajout des priphriques internes;

    La dnomination PIC est sous copyright de Microchip;

    Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), ou encore composant jeu dinstructions rduit;

  • Les diffrents familles des PICs

    La famille des PICs est subdivise en 3 grandes familles:

    La famille Base-Line, qui utilise des mots dinstructions de 12 bits;

    La famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876);

    La famille High-End, qui utilise des mots de 16 bits.

  • Identification dune PIC16 F 84 -04Catgorie du PIC:

    PIC Mid-RangeIndique une mmoire de type FlashIdentification du PICfrquence dhorloge maximale (4 Mhz)Le PIC existe aussi en deux versions:PIC16F 84 : pour une utilisation dans une gamme d'alimentation classique (4.5 5.5V).PIC16LF84: pour une gamme tendue de l'alimentation (2 6V).

  • II. ORGANISATION DU 16F84Description GnraleLe PIC16F84 est un microcontrleur 8 bits qui offre un trs bon rapport qualit/prix.

    Ses principales caractristiques: seulement 35 mots dinstructions vitesse jusqu' 10Mhz 4 sources d'interruption 1000 cycles effacement/criture possible de la mmoire programme flash 1K mots mmoire programme Flash 68 octets de donnes RAM 64 octets de donnes EEPROM

  • principales caractristiques: (suite)

    13 Entre/Sortie 1 Timer/Compteur4 Sources doscillateur slectionnableMode sleep (pour une faible consommation)Programmation par ISP (In Serial Programming)

  • Structure externeLe PIC16F84 est log dans un botier 18 broches DIL ou SOIC ( version CMS).

    PIN 1: 3me bit du PORTA PIN 2: 4me bit du PORTAPIN 3: 5me bit du PORTA / TOCKPIN 4: RESET PIN 5: GNDPIN 6: 1er bit du PORTBPIN 7: 2me bit du PORTBPIN 8: 3me bit du PORTBPIN 9: 4me bit du PORTB

    PIN 18: 2me bit du PORTAPIN 17: 1er bit du PORTAPIN 16: OSCILLATEURPIN15: OSCILLATEUR 2PIN 14: VCCPIN 13: 8me bit du PORTBPIN 12: 7me bit du PORTBPIN 11: 6me bit du PORTBPIN 10: 5me bit du PORTB

  • Structure interne

  • Organisation de la mmoireLa mmoire du PIC16F84 est divise en deux parties distinctes:

    *la mmoire programme; *la mmoire de donne.

    Le premier contient les instructions du programme ainsi que les vecteursRESET et INTERRUPTION. Dans la mmoire de donne se trouve tout les registres ncessaires pourla configuration et l'utilisation des priphriques internes ainsi que 68 octets de RAM utilisateurs.

  • la mmoire programmeLa mmoire programme est constitue de 1K mots de 14 bits. RESET le PIC16F84 commence l'adresse 0000H (Vecteur RESET).Interruption le microcontrleur va l'adresse 0004H (Vecteur d'INTERRUPTION).

    On trouve donc en mmoire programme un mot de 14 bits:Exemple: movlw 10110000 00001010

  • la mmoire RAMLa mmoire RAM est organise en 2 banques pour la 16F84.La RAM est subdivise de plus en deux parties. Dans chacune des banques nous avons des cases mmoires spciales appeles Registres spciaux et 68 octets de cases mmoires libre pour notre utilisation. En page 0, des registres fondamentauxEn page 1, des registres associsLes adresses 00 et 07 ne contiennent aucunemmoire.

    01 TMRO: contenu du timer 8 bits, il peut tre Incrment par lhorloge (fosc/4) ou RA4.02 PCL: 8 bits du poids faible du PC, les 5 bitsDu poids fort sont dans PCLATH.

  • 03 STATUS: registre dtat contenant:- 5 bits, drapeaux caractrisant le rsultat de lopration ALU; (lecture)- 1 bit de slection de page RP0 (0: page 0). ( lecture /criture)

    04 FSR: contient ladresse dun autre registre (adressage indirect).05 PORTA et 06 PORTB: registres de donnes des ports parallles.08 EEDATA: contient un octet lu ou a crire dans lEEPROM de donnes.09 EEADR: contient ladresse de la donne lue ou crite dans lEEPROM.0B INTCON: contrle des 4 interruptions.

    Time out:dbordement du timer DWTPower Down: caractrise lactivit du chien du gardeCarry: retenue sur un octetDigit carry: retenue sur un quartetZro: rsultat nul pour une opration ALU

  • Masques:GIE: (Global Interrupt Enable): masque global dinter.EEIE: (EEProm Interrupt Enable)T0IE: (Timer 0 Interrupt Enable)INTE: ( Interrupt Enable) Entre dinter sur broche RB0/INTRBIE: (RB Interrupt Enable)Entres dinter sur broches RB4-RB7.Drapeaux:T0IF: (Timer 0 Interrupt Flag)dbordement du timerINTF: ( Interrupt Flag) interruption provoque par la broche RB0/INTRBIF: ( RB Interrupt Flag) interruption provoque par les broches RB4-RB7.81 OPTION_REG: 8 bits (tous a 1 au reset) affectant le comportement des E /S et timers.

    RBPU/: (RB Pull Up) Rsistances de tirage Vdd des entres du port B.INTEDG: (Interrupt Edge) Front actif sur RB0 ( 1 pour front montant).RTS: (Real Timer Source) Signal alimentant timer0: 0 pour horloge interne, 1 pour RA4/T0CLKRTE (Real Timer Edge) front actif du signal timer ( 0 pour front montant).PSA (Prescaler assignment) 0 pour Timer 0 et 1 pour chien de garde WDT.PS2..0 (Prescaler 210 ) Valeur du Diviseur de frquence pour les timers.

  • 85 TRISA: Direction des donnes pour le port A: 0 pour sortir et 1 pour entrer86 TRISB: Direction des donnes pour le port B: 0 pour sortir et 1 pour entrer88 EECON1: Contrle le comportement de lEEPROM de donnes.

    EEIF: (EEProm Interrupt Flag) passe 1 quand lcriture est termine.WRERR: (Write Error) 1 si erreur dcriture.WREN: (Write Enable): 0 pour interdire lcriture en EEProm de donnes.WR: (Write) 1 pour crire une donne. Bit remis automatiquement 0RD: (Read): 1 pour lire une donne. Bit remis automatiquement 0

  • 89 EECON2: Registre de scurit dcriture en EEPROM de donnes.

    Une donne ne peut tre crite quaprs avoir crit successivement 0x55 et 0xAA dans ce registre:movlw Adressemovwf EEADR;dfinition de ladressemovlw Donneemovwf EEDATA;dfinition de la donnemovlw Ox55;)movwf EECON2;) scuritmovlw OxAA;)movwf EECON2;)bsf EECON1,WR; criture

  • III. LE JEU DINSTRUCTIONSMnmoniquesADDWF f,dANDWF f,dCLRF fCLRWCOMF f,dDECF f,dDECFSZ f,dINCF f,dINCFSZ f,dIORWF f,dMOVF f,dMOVWF fNOPRLF f,dRRF f,dSUBWF f,dSWAPF f,dXORWF f,d

    DescriptionsAdditionne W et fAND de W avec fEfface fEfface WEffectue le Complment de fDcrmente fDcrmente f, passe si 0Incrmente fIncrmente f, passe si 0OR Inclusif de W avec fDplace fDplace W dans fPas dopration (No Opration)Rotation gauche travers la Retenue (Carry)Rotation droite travers la Retenue (Carry)Soustrait W de fBascule f sur lui mmeXOR de W avec f

  • Oprations sur les Bit

    MnmoniquesBCF f,bBSF f,bBTFSC f,bBTFSS f,b

    DescriptionsMet 0 le bit b de fMet 1 le bit b de fTest le bit b de f, passe si 0Test le bit b de f, passe si 1

    Oprations Littrales et de Contrles MnmoniquesANDLW kCALL kCLRWDT kGOTO kIORLW kMOVLW kOPTION kRETLW kSLEEPTRIS fXORLW k

    DescriptionsAND dun Littral avec WAppel dune sous-fonctionEfface le 'Watchdog Timer'Branchement inconditionnelOR Inclusif dun Littral avec WPlace un Littral dans WCharge le registre OPTIONRetourne au programme principal, place un Littral dans WSe met en mode Stand byCharge le registre TRISXOR dun Littral avec/vers W

  • IV. LES MODES DADRESSAGEla 16F84 utilise 3 modes dadressages:

    1. Adressage littral ou immdiat:Exemple: movlw D'0122. Adressage direct:Exemple: movf D'012', W3. Adressage indirect:Cet adressage fait aux registres INDF et FSR.INDF indirect File registre dadresse 0x00, ce registre nexiste pas vraiment,ce nest quun procd daccs particulier FSR utilis par la PIC pour des raisons de facilit de construction lectronique interne.

    FSR est ladresse 0x04 dans les 2 banques.Pour modifier la case mmoire pointe, on modifie FSRPour connatre ladresse de la case pointe, on accde FSRPour accder au contenu de la case pointe, on accde via INDF

  • Exemple:movlw0x50 movwfmavariable movlwmavariable movwfFSR movfINDF,w LE CONTENU DE INDF EST TRADUIT PARLA PIC COMME ETANT LE CONTENU DE LEMPLACEMENT MEMOIRE POINTE PAR FSR (W) = 0X50

  • V. LES INTERRUPTIONS SUR LES PICs Mcanisme dinterruption sur les PICs:*Tout dabord, ladresse de dbut de toute interruption est fixe. Il sagit toujours de ladresse 0x04. *Les PICs en se connectant cette adresse, ne sauvent rien part le contenu du PC, qui servira connatre ladresse du retour de linterruption. *Le contenu du PC est sauv sur la pile interne (8 niveaux). Donc, on dispose que de 7 niveaux dimbrication pour les sous-programmes. *Le temps de raction dune interruption est calcul de la manire suivante: le cycle courant de linstruction est termin, le flag dinterruption est lu au dbut du cycle suivant. Celui-ci est achev, puis le processeur sarrte un cycle pour charger ladresse 0x04 dans PC. Le processeur se connecte alors ladresse 0x04 o il lui faudra un cycle supplmentaire pour charger linstruction excuter. Le temps mort total sera donc compris entre 3 et 4 cycles.*Une interruption ne peut pas tre interrompue par une autre interruption. Les interruptions sont donc invalides automatiquement lors du saut ladresse 0x04 par leffacement du bit GIE.*Les interruptions sont remises en service automatiquement lors du retour de linterruption. Linstruction RETFIE agit donc exactement comme linstruction RETURN, mais elle repositionne en mme temps le bit GIE.

  • Les sources dinterruption de la 16F84:La 16F84 ne dispose que de 4 sources dinterruptions:

    *TMR0: Dbordement du timer0 (tmr0). Une fois que le contenu du tmr0 passe de 0xff 0x00, une interruption peut tre gnre. -*EEPROM: cette interruption peut tre gnre lorsque lcriture dans une case EEPROM interne est termine. Nous verrons ce cas dans le chapitre sur lcriture en zone eeprom.-*RB0/INT: Une interruption peut tre gnre lorsque, la pin RB0, encore appele INTerrupt pin, tant configure en entre, le niveau qui est appliqu est modifi. Nous allons tudier ce cas ici.-*PORTB: De la mme manire, une interruption peut tre gnre lors du changement dun niveau sur une des pins RB4 RB7. Il nest pas possible de limiter linterruption une seule de ces pins. Linterruption sera effective pour les 4 pins ou pour aucune.

  • VI. FORME GENERALE DUN PROGRAMME; Aprs chaque point virgule on peut mettre des commentaires list p=16f84,f=inhx8m ; Type de PIC et format de ;fichier __config B'11111111110001' ; Configuration du PIC #include "p16f84.inc" ; Bibliothque des ;instructions pour le PIC16F84 Son equ D129' ; Dfinition des constantes Note equ H'0C' ; Dfinition des Variables org H'00' ; Dbut du programme (non obligatoire) { les instructions du programme } end ; Obligatoire

  • Configuration du PIC

    __config B'11111111110001' ~ Bit0 et bit1: fixe le type d'oscillateur:11 => horloge avec un circuit RC 01 => horloge quartz (4Mhz en gnral)~ Bit2: Le chien de garde est activ lorsqu'il est "1"

    ~ Bit3: La tempo l'allumage du PIC est utilise lorsqu'il est "0" Cette tempo est utile pour permettre l'oscillateur de se stabiliser.

    ~ Bit4 Bit 13: lorsqu'ils sont "1", le programme n'est pas protg, on peut toujours le rcuprer du PIC. Dans le cas contraire, on ne peut pas lire le programme contenu dans le PIC, on peut juste l'excuter.

  • Structure dun programme avec interruption list p=16f84,f=inhx8m ; Type de PIC et format de fichier __config B'11111111110001' ; Configuration du PIC #include "p16f84.inc" ; Bibliotheque des ;instructions pour le PIC16F84 Son equ D'129' ; Dfinition des constantes Note equ H'0C' ; Dfinition des Variables org H'00' ; Dbut du programme (non obligatoire) goto dbutorg H'04' ; adresse dinterruption{ programme dinterruption } retfie ;retour lendroit ou le programme sest interrompudbut { les instructions du programme } end

  • VII. EXEMPLES DAPPLICATIONS

  • Exemple1: clignotement d'une LED l'aide du chien de garde.

    list p=16f84,f=inhx8m __config B'11111111110111' #include "p16f84.inc" bsf STATUS,RP0 movlw B'00001101' movwf OPTION_REG movlw B'11111110' movwf TRISB bcf STATUS,RP0Boucle sleep comf PORTB,1 goto Boucle end

  • Exemple2: clignotement d'une LED en crant des retards dans le PIC.p=16f84,f=inhx8m __config B'11111111110001' #include "p16f84a.inc"temp1 equ H'0Ctemp2 equ H'0D' bsf STATUS,RP0 movlw B'11111110' movwf TRISB bcf STATUS,RP0 clrf temp1Debut movlw D'244' movwf temp2Boucle nop decfsz temp1,1 goto Boucle

    decfsz temp2,1 goto Boucle comf PORTB,1 goto Debut end

  • Exemple3: clignotement d'une LED laide des interruptions du TIMER 0.p=16f84,f=inhx8m __config B'11111111110001' #include "p16f84a.inc"temps equ H'0C' org H'00' goto Debut org H'04' movlw D'012' movwf TMR0 bcf INTCON,T0IF decfsz temps,1 retfie comf PORTB,1 movlw D'008'

    movwf temps retfie Debut bsf STATUS,RP0 movlw B'10000111' movwf OPTION_REG bcf TRISB,0 bcf STATUS,RP0 movlw D'008' movwf temps movlw B'10100000' movwf INTCON Boucle goto Boucle end

  • Exemple3: Lecture et criture dans la mmoire EEPROM du PIC.

  • list p=16f84,f=inhx8m __config B'11111111110001' include "p16f84.inc" bsf STATUS,RP0 movlw B'11100000' movwf TRISA bcf OPTION_REG,7 bcf STATUS,RP0 clrf PORTA clrf EEADR Boucle btfss PORTB,6 call Enregistre btfss PORTB,7 call Lit goto BoucleEnregistre btfss PORTB,6 goto Enregistre comf PORTB,0 movwf EEDATA movwf PORTA call Ecriture incf EEADR,1 return Lit btfss PORTB,7 goto Lit call Lecture movf EEDATA,0 movwf PORTA incf EEADR,1 return

  • ;criture EEPROM Ecriture bsf STATUS,RP0 clrf EECON1 bsf EECON1,WREN movlw H'55' movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR EcritureFin btfsc EECON1,WR goto EcritureFin bcf STATUS,RP0 Return

    ; Lecture EEPROMLecture bsf STATUS,RP0 bsf EECON1,RD bcf STATUS,RP0 return ;criture des donnes dans la mmoire EEPROM du ;PIC l'aide du programmateur org H'2100' de B'00000001',B'00000010',B'00000100',B'00001000' de B'00010000',B'00010000',B'00001000',B'00000100' de B'00000010',B'00000001',B'00000000' end

  • FIN