microcontroleurs_2010-2011

Upload: amine-azeroual

Post on 07-Apr-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    1/76

    1

    MICROCONTROLEURS

    Famille Mid-Rangede Microchip

    LE PIC 16F876/877

    A. Oumnad

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    2/76

    2

    SOMMAIRE

    I Introduction ............................................................................................................. 5 I.1 Les PICs de Microchip ........................................................................................... 6

    II Les lments de base du PIC 16F876/877 ............................................................. 7

    II.1 L'Horloge ............................................................................................................. 7 II.2 L'ALU et laccumulateur W ..................................................................................... 8 II.3 Organisation de la mmoire RAM ........................................................................... 8

    II.3.1 Accs la RAM par adressage DIRECT ................................................................ 8 II.3.2 Accs la RAM par ladressage INDIRECT ......................................................... 10

    II.4 Quelques registres de configuration et leurs bits .................................................... 11 II.5 Les instructions du 16F876/877............................................................................ 12

    II.5.1 Les instructions orientes Registre ............................................................... 12 II.5.2 Les instructions orientes bits ..................................................................... 12 II.5.3 Les instructions oprant sur une constante ........................................................ 12 II.5.4 Les instructions de saut et appel de procdures ................................................. 12

    II.5.5

    Le jeu d'instructions ........................................................................................ 13

    II.5.6 Les paramtres des instructions agissant sur registre ......................................... 14 II.5.7 Les paramtres des instructions agissant sur bit ................................................ 14 II.5.8 Les instruction MOVWF et MOVF ...................................................................... 14 II.5.9 Les instructions btfss et btfsc ........................................................................... 15 II.5.10 Les instructions incfsz et decfsz ........................................................................ 15 II.5.11 Linstruction goto ............................................................................................ 15 II.5.12 Linstruction call .............................................................................................. 16 II.5.13 Les indicateur dtat (drapeaux) ....................................................................... 17

    II.5.13.1 Les indicateurs, la soustraction et la comparaison ....................................... 17 II.6 Les directives de l'assembleur MPASM .................................................................. 18

    III Les outils de dveloppement .................................................................................22 III.1 Procdure de travail ............................................................................................ 22 III.2 Lenvironnement de dveloppement MPLAB .......................................................... 23 III.3 Structure gnrale dun programme ..................................................................... 25 III.4 Quelques exemples ............................................................................................. 26

    III.4.1 Comparaison................................................................................................... 26 III.4.2 Boucles de temporisation ................................................................................. 27

    III.4.2.1 Temporisation avec une boucle ................................................................. 27 III.4.2.2 Temporisation avec 2 boucles imbriques .................................................. 28 III.4.2.3 Temporisation avec 3 boucles imbriques .................................................. 28

    IV Les ports dE/S .......................................................................................................29

    IV.1 Le port d' E/S PORTA .......................................................................................... 29 IV.1.1 La broche RA4 ................................................................................................ 29 IV.1.2 Les autres broches de PORTA........................................................................... 29

    IV.2 Le port d' E/S PORTB .......................................................................................... 30 IV.3 Le port d' E/S PORTC .......................................................................................... 30 IV.4 Le port d' E/S PORTD .......................................................................................... 30 IV.5 Le port d' E/S PORTE .......................................................................................... 31

    V Les mmoires permanentes ...................................................................................32 V.1 La mmoire EEPROM de donnes ......................................................................... 32

    V.1.1 Procdure de lecture dans l'EEPROM ................................................................. 33 V.1.2 Procdure d'criture dans l'EEPROM.................................................................. 33

    V.2 La mmoire Programme ou mmoire flash ............................................................ 33 V.2.1 Procdure de lecture dans la mmoire programme ............................................. 34 V.2.2 Procdure d'criture dan la mmoire programme ............................................... 34

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    3/76

    3

    VI Les interruptions ....................................................................................................35 VI.1 Droulement d'une interruption ........................................................................... 35 VI.2 Les sources d'interruption .................................................................................... 36 VI.3 L'interruption INT (Entre RB0 du port B) ............................................................. 36 VI.4 L'interruption RBI (RB4 A RB7 du port B) .............................................................. 36 VI.5 Les autres interruptions ....................................................................................... 36

    VII Les Timers ..............................................................................................................37 VII.1 Le Timer TMR0 ................................................................................................... 37 VII.2 Le Watchdog Timer WDT (Chien de garde) .......................................................... 38 VII.3 Le Timer TMR1 ................................................................................................... 39

    VII.3.1 Le mode Timer ............................................................................................... 39 VII.3.2 Le mode Compteur .......................................................................................... 39 VII.3.3 Le registre de control de T1CON ....................................................................... 40

    VII.4 Les module de Comparaison/Capture CCP1 et CCP2............................................... 41 VII.4.1 Le module CCP1 .............................................................................................. 41

    VII.4.1.1 Le mode Capture ..................................................................................... 41 VII.4.1.2 Le registre de configuration CCP1CON ....................................................... 42

    VII.4.1.3 Le mode Comparaison .............................................................................. 42 VII.4.2 Le module CCP2 .............................................................................................. 43 VII.5 Le Timer TMR2 ................................................................................................... 44

    VIII Le module de conversion A/N................................................................................46 VIII.1 Droulement dune Conversion ............................................................................ 47 VIII.2 Temps de conversion .......................................................................................... 48 VIII.3 Temps d'acquisition ............................................................................................ 48 VIII.4 Frquence d'chantillonnage ................................................................................ 49 VIII.5 Valeur numrique obtenue .................................................................................. 49 VIII.6 Programmation ................................................................................................... 49

    IX

    L'USART ..................................................................................................................50

    IX.1 Mode Asynchrone ............................................................................................... 50 IX.2 Le port en transmission ....................................................................................... 50

    IX.2.1 Les tapes de transmission (sans interruption, mode 8 bits) ............................... 51 IX.3 Le port en rception ............................................................................................ 52

    IX.3.1 Les tapes de rception (sans interruption, mode 8 bits) .................................... 53 IX.4 La vitesse de communication ............................................................................... 53

    X Le module MSSP (Master Synchronous Serial Port) .............................................55 X.1 Introduction au bus I2C ...................................................................................... 55

    X.1.1 start condition................................................................................................. 56 X.1.2 Transmission d'un bit....................................................................................... 56

    X.1.3 Stop condition ................................................................................................. 56 X.1.4 Remarque sur le Start et le Stop condition ......................................................... 57 X.1.5 L' acknowledge ............................................................................................... 57 X.1.6 L'adresse et le bit R/W ..................................................................................... 57

    X.2 Le module MSSP en mode I2C ............................................................................. 58 X.2.1 Transmission dun octet ................................................................................... 58 X.2.2 Rception dun octet ........................................................................................ 58 X.2.3 Les registres de configuration ........................................................................... 58

    X.2.3.1 Le registre SSPSTAT :............................................................................... 59 X.2.3.2 Le registre SSPCON : ................................................................................ 59 X.2.3.3 Le registre SSPCON2 : .............................................................................. 60

    X.2.3.4

    Le registre SSPADD : ................................................................................ 60

    X.2.4 MSCP en mode I2C Master ............................................................................... 60 X.2.4.1 Master en transmission : ........................................................................... 61 X.2.4.2 Master en rception : ............................................................................... 63

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    4/76

    4

    X.2.5 MSCP en mode I2C Slave ................................................................................ 65 X.2.5.1 Slave en Rception de donnes (venant du master) .................................... 65 X.2.5.2 Slave en transmission de donnes (vers le master) ..................................... 67 X.2.5.3 Utilisation des interruptions ....................................................................... 69

    X.3 Le module MSSP en mode SPI ............................................................................. 70 X.3.1 Le mode SPI master ........................................................................................ 71

    X.3.1.1

    Rcapitulation mode master ...................................................................... 72

    X.3.2 Le mode SPI slave ........................................................................................... 73 X.3.2.1 Les chronogrammes de fonctionnement : ................................................... 73

    XI Annexe : Gestion du Programme Counter, ............................................................75 XI.1 GOTO calcul : modification de la valeur de PCL .................................................... 75 XI.2 Instruction de branchement ................................................................................. 75

    XII Rfrences ..............................................................................................................76

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    5/76

    5

    I Introduction

    Un microcontrleur est un composant lectronique Autonome dot : dun microprocesseur,

    de la mmoire RAM, de la mmoire permanente, des interfaces dE/S //, srie (RS232,I2C, SPI) des interfaces dE/S analogique Des Timer pour grer le temps Dautres module plus au moins sophistiqus selon la taille des C

    Il est gnralement moins puissant quun microprocesseur en terme de rapidit ou de taillemmoire, ilse contente le plus souvent dun bus 8 ou 16 bits. Ceci en fait un composant trs bonmarch parfaitement Adapt pour piloter les applications embarques dans de nombreuxdomaines dapplication. Je pense quon ne se tromperait pas beaucoup si on affirme quaujourdhuiil ya un microcontrleur ( grand) dans chaque quipement lectronique : Informatique (souris, modem ) Vido (Appareil photos numrique, camra numrique ) Contrle des processus industriels (rgulation, pilotage) Appareil de mesure (affichage, calcul statistique, mmorisation) Automobile (ABS, injection, GPS, airbag) Multimdia (tlviseur,carte audio, carte vido, MP3, magntoscope) Tlphones (fax, portable, modem) Electromnager (lave-vaisselle, lave-linge, four micro-onde)

    Un microcontrleur peut tre programm une fois pour toutes afin qu'il effectue une ou destches prcises au sein d'un appareil lectronique. Mais les C rcents peuvent tre reprogrammset ceci grce leur mmoire permanente de type FLASH (do le terme flasher q uelque chose)

    Plusieurs Constructeurs se partagent le march des microcontrleurs, citons INTEL,MOTOROLA, AMTEL, ZILOG, PHILIPS et enfin MICROCHIP avec ses PICs trs populaires qui intresse ici dans ce cours.

    Les microcontrleurs, quelque soit leurs constructeurs, ont des architecture trs similaires etsont constitus de modules fondamentaux assurant les mmes fonctions: UAL, Ports dE/S,interfaces de communications srie, Interfaces dE/S analogiques, Timers et horloge temps relsOn peut dire que seul le langage de programmation (Assembleurs) constitue la diffrencemajeure en deux microcontrleur (similaires) venant de deux constructeurs diffrents.

    Nous avons choisit dans ce cours dapprendre les microcontrleurs travers une tudedtaille des microcontrleur 16F87x (x=3, 4, 6, 7) qui constitue les lments fondamentaux de lafamille mid-range qui est la famille moyenne puissance de Microchip

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    6/76

    6

    I.1 Les PICs de Microchip

    Les PICs sont des microcontrleurs architecture RISC (Reduce Instructions ConstructionSet), ou encore composant jeu dinstructions rduit. L'avantage est que plus on rduit le nombredinstructions, plus leur dcodage sera rapide ce qui augmente la vitesse de fonctionnement dumicrocontrleur.

    La famille des PICs est subdivise en 3 grandes familles : La familleBase-Line , qui utilise desmots dinstructions de 12 bits, la famille Mid-Range , qui utilise des mots de 14 bits (et dont fontpartie la 16F84 et 16F876), et la familleHigh-End , qui utilise des mots de 16 bits.

    Les PICs sont des composants STATIQUES, Ils peuvent fonctionner avec des frquencesdhorloge allant du continu jusqu une frquence max spcifique chaque circuit. Un PIC16F876 -04 peut fonctionner avec une horloge allant du continu jusqu 4 MHz.

    Nous nous limiterons dans ce document la famille Mid-Range et particulirement au PIC16F876/877, sachant que si on a tout assimil, on pourra facilement passer une autre famille, etmme un autre microcontrleur.

    PIC FLASH RAM EEPROM I/O A/D Port // Port Srie

    16F870 2K 128 64 22 5 NON USART16F871 2K 128 64 33 8 PSP USART16F872 2K 128 64 22 5 NON MSSP16F873 4K 192 128 22 5 NON USART/MSSP16F874 4K 192 128 33 8 PSP USART/MSSP16F876 8K 368 256 22 5 NON USART/MSSP16F877 8K 368 256 33 8 PSP USART/MSSP

    Tableau I.1 : diffrents circuit de la famille 16F87X

    Les lments essentiels du PIC 16F876 sont :

    Une mmoire programme de type EEPROM flash de 8K mots de 14 bits, Une RAM donne de 368 octets, Une mmoire EEPROM de 256 octets, Trois ports d'entre sortie, A (6 bits), B (8 bits), C (8 bits), Convertisseur Analogiques numriques 10 bits 5 canaux, USART, Port srie universel, mode asynchrone (RS232) et mode synchrone SSP, Port srie synchrone supportant I2C Trois TIMERS avec leurs Prescalers, TMR0, TMR1, TMR2 Deux modules de comparaison et Capture CCP1 et CCP2 Un chien de garde, 13 sources d'interruption, Gnrateur d'horloge, quartz (jusqu 20 MHz) ou Oscillateur RC Protection de code, Fonctionnement en mode sleep pour rduction de la consommation, Programmation par mode ICSP (In Circuit Serial Programming ) 12V ou 5V, Possibilit aux applications utilisateur daccder la mmoire programme, Tension de fonctionnement de 2 5V, Jeux de 35 instructions

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    7/76

    7

    Fig. I.1 : Les lments constitutifs du PIC 16F877

    Le port D (8 bits) et le port E (3 bits) ne sont pas disponibles sur tous les processeurs. (VoirTableau I.1)

    II Les lments de base du PIC 16F876/877 II.1 L'Horloge

    L'horloge peut tre soit interne soitexterne. L'horloge interne est constitue d'unoscillateur quartz ou d'un oscillateur RC.

    Avec l'oscillateur Quartz, on peut avoirdes frquences allant jusqu' 20 MHz selon letype de C. Le filtre passe bas (Rs, C1, C2)limite les harmoniques dus lcrtage etRduit lamplitude de loscillation, il n'est pasobligatoire.

    Avec un oscillateur RC, la frquence del'oscillation est fixe par Vdd, Rext et Cext.Elle peut varier lgrement d'un circuit l'autre.

    Dans certains cas, une horloge externeau microcontrleur peut tre utilise poursynchroniser le PIC sur un processusparticulier.

    Quelque soit l'oscillateur utilis, l'horlogesystme dite aussi horloge instruction estobtenue en divisant la frquence par 4. Dansla suite de ce document on utilisera le termeFosc/4 pour dsigner l'horloge systme.

    Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pourexcuter une instruction de 1s.

    Mmoireprogrammede type Flash

    8 x 1024mots de 14 bits

    EEPROM256 octets

    14 bits : config

    timer 2TMR2

    Chien degarde

    WDT Horlogesystme

    PORTB

    W

    ALU

    PORTAPORTC

    timer 1TMR1

    timer 0TMR0

    MSSP(I2C/SPI)

    CCP1Capture/Comparaison

    CCP2Capture/Comparaison

    DAC10 bits

    USART(RS232)

    PORTE PORTD

    96 registressystme

    368 registresutilisateur

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    8/76

    8

    II.2 L'ALU et laccumulateur W

    LALU est une Unit Arithmtique et logique 8 Bits qui ralise les oprations arithmtiques etlogique de base. Laccumulateur W est u n registre de travail 8 bits, toutes les oprations deuxoprandes passe par lui. On peut avoir :

    - Une instruction sur un seul oprande qui est en gnral un registre situ dans la RAM- Une instruction sur 2 oprandes. Dans ce cas, lun des deux oprandes est toujourslaccumulateur W, lautre peut tre soit un registre soit une constante.

    Pour les instructions dont un des oprandes est un registre, le rsultat peut tre rcupr soitdans laccumulateur, soit dans le registre lui -mme.

    II.3 Organisation de la mmoire RAM Lespace mmoire RAM adressable est de 512 positions de 1 octet chacune :

    96 positions sont rserves au SFR (Special Function Registers ) qui sont les registres deconfiguration du PIC. Les 416 positions restantes constituent les registres GPR (General Propose Registers ) ou RAM

    utilisateur. Sur le 16F876 et 16F877, 3 blocs de 16 octets chacun ne sont pas implantsphysiquement do une capacit de RAM utilisateur de 368 GPR.

    Pour accder la RAM, on dispose de deux modes dadressage :

    II.3.1 Accs la RAM par adressage DIRECT

    Avec ce mode dadressage, on prcise dans linstruction la valeur de ladresse laquelle onveut accder. Par exemple, pour copier le contenu de l'accumulateur W dans la case mmoired'adresse 50, on utilise l'instructionMOVWF 50 . Cette instruction sera code sur 14 bits, la partieadresse est code sur 7 bits ce qui va poser quelques petits problmes. En effet, 7 bitspermettent dadresser seulement 128 positions. Pour pouvoir adresser les 512 positionsaccessibles, il faut9 bits dadresse. Pour avoir ces 9 bits, le PIC complte les 7 b its venant delinstruction par deux bits situs dans le registre de configuration STATUS. Ces bits sont appelsRP0 et RP1 et doivent tre positionns correctement avant toute instruction qui accde la RAMpar ladressage direct.

    La RAM apparat alors organise en 4 banks de 128 octets chacun. L'adresse instructionpermet d'adresser l'intrieur d'un bank alors que les bits RP0 et RP1 du registre STATUSpermettent de choisir un bank . La Figure II-1 montre lorganisation de la RAM avec les zones alloue au SFR et aux GPR. Les zones hachures ne sont pas implantes physiquement. Si on essay e dy accder, on est aiguill automatiquement vers la zone [70 h ,7F h ] appele zone commune.

    Mme si on prcise une adresse suprieure 127 (+ de 7 bits) dans une instruction, elle esttronque 7 bits puis complte par les bits RP0 et RP1 pour former une adresse 9 bis. Parexemple, pour copier laccumulateur W dans la case mmoire dadresse 1EF h, il faut dabord placerles bits RP0 et RP1 1 (bank 3), ensuite on utilise soit linstruction MOVWF 6Fh soit linstruction

    9 bits

    RP0RP1

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    9/76

    9

    MOVWF 1EFh , qui donne le mmersultat. En effet, que lon crive 6Fh = 0110 1111 ou 1EFh= 0001 1110 1111, le PIC ne prend que 7 bits soit : 1101111 = 6Fh et complte avec les bitsRP1,RP0 pour obtenir 11 1101111 = 1EFh

    Bank 0 (00) Bank 1 (01) Bank 2 (10) Bank 3 (11) 00h INDF 80h INDF 100h INDF 180h INDF01h TMR0 81h OPTION_REG 101h TMR0 181h OPTION_REG02h PCL 82h PCL 102h PCL 182h PCL03h STATUS 83h STATUS 103h STATUS 183h STATUS04h FSR 84h FSR 104h FSR 184h FSR05h PORTA 85h TRISA 105h 185h06h PORTB 86h TRISB 106h PORTB 186h TRISB07h PORTC 87h TRISC 107h 187h08h PORTD (*) 88h TRISD (*) 108h 188h09h PORTE (*) 89h TRISE (*) 109h 189h0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah PCLATH0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh INTCON0Ch PIR1 8Ch PIE1 10Ch EEDATA 18Ch EECON10Dh PIR2 8Dh PIE2 10Dh EEADR 18Dh EECON20Eh TMR1L 8Eh PCON 10Eh EEDATH 18Eh0Fh TMR1H 8Fh 10Fh EEADRH 18Fh10h T1CON 90h 110h

    16Fh

    190h

    1EFh

    11h TMR2 91h SSPCON212h T2CON 92h PR213h SSPBUF 93h SSPADD14h SSPCON 94h SSPSTAT15h CCPR1L 95h16h CCPR1H 96h17h CCP1CON 97h18h RCSTA 98h TXSTA19h TXREG 99h SPBRG1Ah RCREG 9Ah1Bh CCPR2L 9Bh1Ch CCPR2H 9Ch1Dh CCP2CON 9Dh1Eh ADRESH 9Eh ADRESL1Fh ADCON0 9Fh ADCON120h

    6Fh

    A0h

    EFh

    70h

    7Fh

    Zonecommune

    F0h

    FFh

    170h

    17Fh

    1F0h

    1FFh

    Figure II-1 : organisation de la RAM du 16F876/877

    Nous allons anticiper un peu et prsenter les instructions bcf et bsf et qui permettent depositionner un bit 0 ou 1

    bcf STATUS,RP0 ; place le bit RP0 0 bsf STATUS,RP1 ; place le bit RP1 1

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    10/76

    10

    II.3.2 Accs la RAM par ladressage INDIRECT Pour accder une position de la RAM en utilisant ladressage indirect, on passe toujours par

    une position fictive appele INDF(Indirect File) .Exemple: linstruction CLRF INDF signifie: mettre zro la case mmoire dadresse INDF.

    Mais quelle est ladresse de cette position appele INDF ? La rponse est :

    INDF est la case mmoire pointe par le pointeur IRP/FSR.

    IRP est un bit qui se trouve dans STATUS et FSR est un registre accessible dans tous lesbancs. On peut se demander pourquoi on ajoute le bit IRP. En effet, le registre de pointage FSR est un registre 8 bits, il peut donc adresser au maximum 256 positions mmoire (de 00h FFh),cest seulement la moiti de la RAM dont on dispose. Il nous manque un bit pour avoir les 9 bitsncessaires. On utilise le bit IRP qui se trouve dans le registre STATUS.

    Exemle : Si on place 74h dans le registre FSR et on positionne le bit IRP 1, alors, linstructionCLRF INDF signifie :remettre zro la case mmoire dadresse 174h .

    Donc en rsum, chaque fois que le PIC rencontre le mot INDF dans un programme, il saitquil sagit de la case mmoire dont ladresse (9 bits) se trouve dans le registre FSR complt par

    le bit IRP du registre STATUS

    INDF est la case mmoire pointe par le pointeur:

    IRP = 0 000h 0FFh page 0

    IRP = 1 100h 1FFh page 1

    FSR

    pointeur 9 bits

    IRP

    SFR (32)

    SFR (32)GPR (80)

    GPR (96)

    SFR (16)GPR (96)

    SFR (16)GPR (96)

    0 00

    0 1F0 20

    0 7F0 80

    0 9F0 A0

    0 EF

    1 001 0F1 10

    1 6F

    1 801 8F1 90

    1 EF

    IRP

    page 0 page 1

    FSR

    0 FF 1 FF

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    11/76

    11

    II.4 Quelques registres de configuration et leurs bits STATUS IRP RP1 RP0 TO PD Z DC C 0001 1xxxOPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000xPIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000PIE2 N.I. Rserv N.I. EEIE BCLIE N.I. N.I. CCP2IE -r-0 0--0PIR2 N.I. Rserv N.I. EEIF BCLIF N.I. N.I. CCP2IF -r-0 0--0EECON1 EEPGD WRERR WREN WR RD x--- x000TXSTA CSRC TX9 TXEN SYNC BRGH TRMT TX9D 0000 -010RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000xCCPxCON DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0 --00 0000T1CON T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000T2CON TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000SSPSTAT SMP CKE D/A P S R/W UA BF 0000 0000CCP1CON CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000TXSTA CSRC TX9 TXEN SYNC BRGH TRMT TX9D 0000 -010RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x

    CCP2CON CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE ADON 0000 00-0ADCON1 ADFM PCFG3 PCFG2 PCFG1 PCFG0 0--- 0000TRISx 1111 1111

    Tableau II.1 : dtail des registres SFR et leurs tats au dmarrage

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    12/76

    12

    II.5 Les instructions du 16F876/877 Tous lesPICs Mid-Range ont un jeu de 35 instructions, Chaque instruction est code sur un mot de 14 bits qui contient le code opration (OC) ainsi

    que l'oprande, Toutes les instructions sont excutes en un cycle d'horloge, part les instructions de saut qui

    sont excutes en 2 cycles dhorloge. Sachant que lhorloge systme est gale fosc/4, si onutilise un quartz de 4MHz, on obtient une horloge fosc/4 = 1000000 cycles/seconde, cela nousdonne une puissance de lordre de 1MIPS (1 Million d Instructions Par Seconde). Avec unquartz de 20MHz, on obtient une vitesse de traitement de 5 MIPS.

    II.5.1 Les instructions orientes Registre Ce sont des instructions qui manipulent un octet se trouvant dans la RAM. a peut tre un

    registre de configuration SFR ou une case mmoire quelconque (Registre GPR)

    II.5.2 Les instructions orientes bits Ce sont des instructions destines manipuler directement un bit dun registre que se so it unregistre de configuration SFR ou une case mmoire quelconque (registre GPR). Tous les bits de laRAM peuvent tre manipul individuellement.

    II.5.3 Les instructions oprant sur une constante Ce sont les instructions entre laccumulateur W est une constante K

    II.5.4 Les instructions de saut et appel de procdures Ce sont les instructions qui permettent de sauter une autre position dans le programme et

    de continuer lexcution du programme partir de cette position.

    Exercice 1)

    Dans quel bank se trouvent les cases mmoire d'adresse : 1A4h, B5h, 130h, 58h, 100, 200, 250,300, 400

    Exercice 2)

    Combien de cases mmoires libres (GPR) y a-t-il dans la zone mmoire qui commence la position A0h et se termine EAh .

    Exercice 3) Quelle est l'adresse de la dernire position d'une zone mmoire de 40 cases qui commence laposition 190h.

    Exercice 4)

    Combien de cases mmoires libres (GPR) y a-t-il dans le bank1. Mme question pour le bank2.

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    13/76

    13

    II.5.5 Le jeu d'instructions

    {W,F ? d} signifie que le rsultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f

    INSTRUCTIONS OPERANT SUR REGISTRE indicateurs Cycles ADDWF F,d W+F {W,F ? d} C,DC,Z 1 ANDWF F,d W and F {W,F ? d} Z 1CLRF F Clear F Z 1COMF F,d Complmente F {W,F ? d} Z 1DECF F,d dcrmente F {W,F ? d} Z 1DECFSZ F,d dcrmente F {W,F ? d} skip if 0 1(2)INCF F,d incrmente F {W,F ? d} Z 1INCFSZ F,d incrmente F {W,F ? d} skip if 0 1(2)IORWF F,d W or F {W,F ? d} Z 1MOVF F,d F {W,F ? d} Z 1MOVWF F W F 1RLF F,d rotation gauche de F a travers C {W,F ? d} C 1RRF F,d rotation droite de F a travers C {W,F ? d} 1SUBWF F,d F W {W,F ? d} C,DC,Z 1SWAPF F,d permute les 2 quartets de F {W,F ? d} 1

    XORWF F,d W xor F {W,F ? d} Z 1

    INSTRUCTIONS OPERANT SUR BIT BCF F,b RAZ du bit b du registre F 1BSF F,b RAU du bit b du registre F 1BTFSC F,b teste le bit b de F, si 0 saute une instruction 1(2)BTFSS F,b teste le bit b de F, si 1 saute une instruction 1(2)

    INSTRUCTIONS OPERANT SUR CONSTANTE ADDLW K W + K W C,DC,Z 1 ANDLW K W and K W Z 1IORLW K W or K W Z 1MOVLW K K W 1SUBLW K K W W C,DC,Z 1

    XORLW K W xor K W Z 1

    AUTRES INSTRUCTIONS CLRW Clear W Z 1

    CLRWDT Clear Watchdoc timer TO', PD' 1CALL L Branchement un sous programme de label L 2GOTO L branchement la ligne de label L 2NOP No operation 1RETURN retourne d'un sous programme 2RETFIE Retour d'interruption 2RETLW K retourne d'un sous programme avec K dans W 2SLEEP se met en mode standby TO', PD' 1

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    14/76

    14

    On remarque que : Les instructions qui agissent sur un registre ou un bit dun registre contiennent toutes la lettre

    F dans le nom de linstruction. Ceci vient du fait que chez Microchip, la RAM est appeleregister File (Fichier des registres).

    Les instructions qui agissent sur une constante contiennent toutes la lettre L, parce que chezMicrochip, on appelle Literal ce genre dadressage, chez dautre s constructeurs, on parledadressage immdiat

    II.5.6 Les paramtres des instructions agissant sur registre Pour les instructions qui agissent sur registre, le paramtre F reprsente ladresse du registre

    considr. Le paramtre d (destination) joue un rle important, si on prendd = 0 ou w , le rsultatde lopration sera plac dans laccumulateur W, si on prend d = 1 ou f , le rsultat de loprationsera plac dans le registre prcis par F.

    ADDWF 70h,1 ou ADDWF 70h,f Signifie : additionner le contenu de W avec le contenu de la case mmoire dadresse 70h et placer lersultat dans la case mmoire 70h

    XORWF 35h,0 ou XORWF 35h,w Signifie : faire un ou exclusif entre W et le contenu de la case mmoire dadresse 35h et placer lersultat dans laccumulateur W

    II.5.7 Les paramtres des instructions agissant sur bit Pour les instructions agissant sur un bit, le paramtre F indique le registre qui contient le bit

    modifier et le paramtre b indique le numro du bit modifier; on compte partir de zro encommenant droite

    BSF STATUS,2 ; signifie : placer 1 le bit 2 (3me bit partir de la droite) du registre STATUS

    BCF 45h,6 ; signifie : placer 0 le bit 6 (7me bit partir de la droite) du registre de lacase mmoire dadresse 45h

    II.5.8 Les instructions MOVWF et MOVF

    Ce sont les instructions les plus utilises,MOVWF permet de copier laccumulateur W dans unregistre (SFR ou GPR):

    MOVWF STATUS ; signifie : Copier le contenu de W dansle registre STATUS

    MOVWF 55h ; signifie : Copier le contenu de W dansla case mmoire dadresse 55h

    MOVF permet de copier le contenu dun registre (SFR ou GPR) dans laccumulateur W, leparamtre d doit tre = 0

    7 6 5 4 3 2 1 0

    W

    RAM

    MOVWF

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    15/76

    15

    MOVF STATUS,0 ; Copier le contenu du registre STATUS dans laccumulateur W

    MOVF 35h,0 ; Copier le contenu de la casemmoire dadresse 35h danslaccumulateur W

    Avec le paramtred=1 , linstruction MOVF semble inutile carelle permet de copier un registre sur lui-mme ce qui priorine sert rien.

    MOVF STATUS,1 ; Copier le contenu du registre STATUSdans lui mme

    En ralit cette instruction peut savrer utile car, comme elle positionne lindicateur Z, ellepermet de tester si le contenu dun registre est gal zro

    II.5.9 Les instructions btfss et btfsc Ces instructions permettent de tester un bit et de sauter ou non une ligne de programme en

    fonction de la valeur du bit,

    btfsc F,b : bit test skip if clear : teste le bit b du registre F et saute linstruction suivante si lebit test est nul

    btfss F,b : bit test skip if set : teste le bit b du registre F et saute linstruction suivante si lebit test est gal 1

    exemple :

    sublw 100 ; 100 W W btfss STATUS,Z ; tester le bit Z du registre STATUS et sauter une ligne si Z=1clrf 70h ; aprs btfss, le programme continue ici si Z=0cmpf 70h,f ; aprs btfss, le programme continue ici si Z=1

    suite du programme suite du programme

    II.5.10 Les instructions incfsz et decfsz Ces instructions permette dincrmenter ou de dcrment er un registre et de sauter si le

    rsultat est nul

    Incfsz F,1 : increment skip if Z : incrmente le registre F et sauter une ligne si le rsultat =0. Le paramtre 1 indique que le rsultat de lincrmentation doit aller dans F.

    deccfsz F,1 : decrement skip if Z : dcrmente le registre F et sauter une ligne si le rsultat= 0. Le paramtre 1 indique que le rsultat de la dcrmentation doit aller dansF.

    II.5.11 Linstruction goto

    Permet de transfrer lexcution une autre position du programme re pre par unetiquette (label)

    W

    RAM

    MOVF

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    16/76

    16

    Instruction 1Instruction 2Goto bonjourinstruction 3instruction 4instruction 5

    bonjour instruction 6instruction 7

    II.5.12 Linstruction call Linstruction call permet dappeler une fonction. Une fonction est un sous programme crit

    la suite du programme principal. Sa premire ligne doit comporter une tiquette et elle doit seterminer parreturn

    Programme principal

    debut InstructionInstruction

    InstructionInstructionCall afficherInstructionInstructionInstruction

    goto debut

    Fonction afficher Instruction

    InstructionInstructionInstructionInstructionInstructionInstructionreturn

    La diffrence encall et goto est que, quantle processeur rencontre linstruction call , ilsauvegarde ladresse de la ligne suivante avantdaller excuter les instructions constituant lafonction. Comme a, quand il rencontrelinstruction return , il sait o il doit retournerpour continuer lexcution du programmeprincipal.

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    17/76

    17

    II.5.13 Les indicateur dtat (drapeaux) Les bits Z, DC et C situs dans le registre STATUS sont des indicateurs qui permettent de

    savoir comment une instruction sest termine. Toutes les instructions nagissent pas sur lesindicateurs, voir liste des instructions ci-dessous.

    Z : passe 1 quand le rsultat dune instruction est nul C : passe 1 quand lopration a gnr une retenue DC : passe 1 quand les 4me bits gnre une retenue

    Ces bits peuvent tre utilis trs astucieusement par les instructionsbtfsc et btfss quipermettent de tester un bit et de raliser un saut conditionnel. Nous aurons loccasion denreparler dans la suite du cours.

    STATUS IRP RP1 RP0 Z DC C

    II.5.13.1 Les indicateurs, la soustraction et la comparaison

    Suite unesoustraction , les drapeaux Z et C sont positionns comme suit :

    A - B = 0 ==> Z=1 , C=1 A - B > 0 ==> Z=0 , C=1 A - B < 0 ==> Z=0 , C=0

    On peut conclure :Z=1 ==> galitC=1 ==> A sup ou gal BC=0 ==> infrieur

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    18/76

    18

    II.6 Les directives de l'assembleur MPASM Les directives de l'assembleur sont des instructions qu'on ajoute dans le programme et qui

    seront interprtes par l'assembleur MPASM. Ce ne sont pas des instructions destines au PIC.Nous ne prsentons ici que quelques directives, pour le reste, consulter la documentation deMPASM"MPASM USER'S GUIDE".

    Remarque : Je vais prsenter les directives en Majuscule, mais sachez que le compilateur MPASMaccepte les instructions et les directives en minusculeet en majuscule. Attention ce nest pas lecas pour les tiquettes et les noms de dclaration des constantes.

    LIST : permet de dfinir un certain nombre de paramtres comme le processeur utilis (p), labase par dfaut pour les nombres (r) ainsi que d'autres paramtres. Exemple :LIST p=16F876, r=dec

    avec r=dec, les nombres sans spcification particulireseront considrs par l'assembleur comme des nombredcimaux, sinon voir tableau ci-contre

    INCLUDE : permet d'insrer un fichier source. Parexemple le fichier p16f876.inc contient la dfinitiond'un certain nombre de constante comme les noms des registres ainsi que les noms de certainsbits;INCLUDE "p16f876.inc"

    EQU : permet de dfinir une constante ou une variable :XX EQU 0x20Chaque fois que le compilateur rencontrera XX, il la remplacera par 0x20. a peut tre uneconstante s'il s'agit d'une instruction avec adressageLiteral , ou d'une adresse s'il s'agit d'uneinstruction avec adressage direct.

    MOVLW XX ; charger dans W la constante 0x20MOVF XX,w; charger dans W le contenu de la case dadresse 0x20

    CBLOCK/ENDC : permet de dfinir un ensemble de constantes :L'ensemble des dclarations suivantes :

    XX1 EQU 0x20XX2 EQU 0x21XX3 EQU 0x22XX4 EQU 0x23

    peut tre remplac parCBLOCK 0x20

    XX1, XX2, XX3, XX4

    ENDC

    ORG : dfinit la position dans la mmoire programme partir de laquelle seront inscrites lesinstructions suivantes.

    Base Prfixe Exemple (36)Dcimal D'nnn'

    .nnnD'36'.36

    Hexadcimal H'nn'0xnnnnh

    H'24'0x2424h

    Binaire B'.' B'00100100'Octal O'nnn' O'44'

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    19/76

    19

    Fig. II.1 : Illustration de la directive ORG

    #DEFINE : fonctionne un peu comme la directive EQU tout en tant un peu plus gnrale, carelle permet daffecter toute une chane une abrviation#DEFINE XX 0x20 ; dans ce cas cest quivalent XX EQU 0x20

    #DEFINE LED PORTB,3 ; ici chaque fois que le compilateur rencontrera le motLED,il leremplacera parPORTB,3

    BCF LED ; teindre la LED branche sur la broche 3 de PORTB

    On peu ainsi affecter une abrviation toute une instruction

    #DEFINE eteindre bcf PORTC,5 ; affecte labrviation eteindre linstruction bcf PORTC,5

    #DEFINE allumer bsf PORTC,5 ; affecte labrviation allumer linstruction bsf PORTC,5

    allumer ; allume la LED branche sur la broche 5 de PORTC eteindre ; teindre la LED branche sur la broche 5 de PORTC

    DE : pour dclarer des donns qui seront stocke dans l'EEPROM de donne au moment del'implantation du programme sur le PICORG 0x2100 DE "Programmer un PIC, rien de plus simple", 70, 'Z'

    DT : pour dclarer un tableau RETLWDT 10,35h,Hello ; sera remplace par la suite dinstructions :

    RETLW 10RETLW 35hRETLW 'H'RETLW 'e'RETLW l RETLW l RETLW o

    END : indique la fin du programme

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    20/76

    20

    __CONFIG : permet de dfinir les 14 bits (fusibles ouswitch ) de configuration qui serontcopis dans l'EEPROM de configuration (adresse 2007h) lors de l'implantation du programmedans le PIC.

    CP1 CP0 DEBUG WRT CPD LVP BODEN CP1 CP0 PWRTE WDTE F0SC1 F0SC0

    CP1/CP0 : bits 13/12 ; Dterminent quelle zone de la mmoire programme sera protge contrela lecture externe (via ICSP) ou l'criture par programme conformment l'tat du bit 9 (WRT).On peut choisir de protger la totalit de la mmoire ou seulement une partie. Les diffrenteszones pouvant tre protges sont les suivantes :1 1 : Aucune protection (_CP_OFF)1 0 : Protection de la zone 0x1F00 0x1FFF (_CP_UPPER_256)0 1 : Protection de la zone 0x1000 0x1FFF (_CP_HALF)0 0 : Protectionde lintgralit de la mmoire (_CP_ALL)

    DEBUG : bit 11 : Debuggage sur circuit. Permet de ddicacer RB7 et RB6 la communicationavec un debugger.1 : RB6 et RB7 sont des I/O ordinaires (_DEBUG_OFF)0 : RB6 et RB7 sont utiliss pour le debuggage sur circuit (_DEBUG_ON)

    WRT : bit 9 : Autorisation dcriture en flash 1 : Le programme peut crire dans les zones non protges par les bits CP1/CP0

    (_WRT_ENABLE_ON)0 : Le programme ne peut pas crire en mmoire flash (_WRT_ENABLE_OFF)

    CPD : bit 8 : Protection en lecture de la mmoire EEPROM de donnes.1 : mmoire EEPROM non protge (_CPD_OFF)0 : mmoire EEPROM protge contre la lecture externe via ICSP (_CPD_ON)

    LVP : bit 7 : Utilisation de la pin RB3/PGM comme broche de programmation 5V1 : La pin RB3 permet la programmation du circuit sous tension de 5V (_LVP_ON)0 : La pin RB3 est utilise comme I/O standard (_LVP_OFF)

    BODEN : bit 6 : provoque le reset du PIC en cas de chute de tension (surveillance de la tensiondalimentation)

    1 : En service (_BODEN_ON)0 : hors service (_BODEN_OFF)

    PWRTE : bit 3 : Dlai de dmarrage la mise en service. Attention, est automatiquement mis enservice si le bit BODEN est positionn.

    1 : dlai hors service (sauf si BODEN = 1) (_PWRTE_OFF)0 : dlai en service (_PWRTE_ON)

    WDTE : bit 2 : Validation du Watchdog timer1 : WDT en service (_WDT_ON)0 : WDT hors service (_WDT_OFF)

    FOSC1/FOSC0 : bits 1/0 : slection du type doscillateur 11 : Oscillateur de type RC (_RC_OSC) (3K < R < 100k, C > 20 pF)10 : Oscillateur haute vitesse (_HS_OSC) (4 Mhz 20 Mhz)01 : Oscillateur basse vitesse (_XT_OSC) (200 kHz 4 Mhz)00 : Oscillateur faible consommation (_LP_OSC) (32 k 200 kHz)

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    21/76

    21

    Voici 3 exemples dutilisation :

    __CONFIG B'11111100111001' __CONFIG H'3F39' __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_O

    _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSCRemarque :

    Attention, les microcontrleurs avec lextension A comme 16F876A ou 16F877A ont unedisposition des bits de configuration lgrement diffrente, consultez le datasheet.

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    22/76

    22

    III Les outils de dveloppement Loutil de dveloppement principal est lenvironnement de dveloppement intgr MPLAB

    fournit gratuitement par Microchip

    III.1 Procdure de travail Les tapes ncessaires permettant de voir un programme s'excuter sur un PIC sont :

    Ecrire un programme en langage assembleur dans un fichier texte et le sauvegarder avecl'extension.asm

    Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le rsultat est unfichier excutable avec l'extension.hex contenant une suite d'instruction comprhensible parle pic.

    Transplanter le fichier.hex dans la mmoire programme du PIC (mmoire flash) l'aide d'unprogrammateur adquat. On peut utiliser les programmateurs de Microchip ou tout autreprogrammateur achet ou ralis par soit mme.

    Mettre le PIC dans son montage final, mettre sous tension et admirer le travail.

    Microchip propose gratuitement l'outil de dveloppementMPLAB qui regroupe l'diteur detexte, le compilateur MPASM, un outil de simulation et le logiciel de programmation. Leprogrammateur lui-mme, n'est malheureusement pas gratuit.

    Pour ce qui nous concerne, nous utiliseront MPLAB pour crire, compiler et ventuellementsimuler nos programmes, ensuite, pour implanter les programmes dans la mmoire flash du PIC,nous utiliserons un programmateur fait maison que nous piloteront par le logiciel ICPROG, les deuxsont disponibles gratuitement sur le Web.

    Internet est riche en informations sur ce sujet. Vous trouverez une rubrique sur lesprogrammateurs de PIC sur mon site http://z.oumnad.123.fr

    http://z.oumnad.123.fr/http://z.oumnad.123.fr/http://z.oumnad.123.fr/http://z.oumnad.123.fr/
  • 8/3/2019 MICROCONTROLEURS_2010-2011

    23/76

    23

    III.2 Lenvironnement de dveloppement MPLAB MPLAB-IDE peut tre tlcharg sur le site Webhttp://www.microchip.com

    Aprs l'installation, lancer MPLAB et faire les config ci-dessous : Configure Select Device PIC16F876 ou PIC16F877

    Nous allons raliser un tout petit programme sans grand intrt pour voir la procdure defonctionnement (avec MPLAB 6.30) Ouvrir une nouvelle fentre (de l'diteur) pour commencer crire un programme :file

    new ou cliquez sur l'icne feuille blanche Taper le petit programme ci-dessous dans la fentre qui vient de s'ouvrir. Ce programme

    incrmente sans fin la position mmoire (RAM) 70H

    loop incf 70h,1 goto looopend

    Sauvegarder (file save ) ce programme dans la directory de votre chois sous le nombidon.asm

    Lancer la compilation du programme l'aide de la commande project Quikbuild Apparemment il y a un problme, le compilateur nous dit qu'il y une erreur la ligne 2

    Error[113] C:\...\BIDON.ASM 2 : Symbol not previously defined (looop)

    E videmment, le label loop dfinit dans la ligne prcdente prend seulement deux o. Corrigez etrecommencez. Cette fois a a l'air d'aller. On peut vrifier que le compilateur a cre le fichier

    bidon.hex dans la mme directory o se trouvebidon.asm . Les fichiersbidon.cod, bidon.err et bidon.lst ne nous servent rien pour l'instant on peut les dtruire.

    Nous pouvons maintenant excuter notre programme en simulation pour voir s'il ralise bien latache demande :Pour faire apparatre la barre d'outil du simulateur :Debugger Select tool MPLAB SIM

    Ouvrez la fentre qui visualise la mmoire RAM : view FileRegisters . et reprer la casemmoire 70h

    Excuter maintenant le programme PAS PAS en cliquant chaque fois sur le bouton StepInto { } en observant la case mmoire 70h . (on dirait que a marche).

    On peut aussi excuter en continu en cliquant sur le bouton animate, pour arrter, il fautcliquer sur le bouton halt

    Pour plus de dtail, consulter le manuel d'utilisation de MPLAB

    http://www.microchip.com/http://www.microchip.com/
  • 8/3/2019 MICROCONTROLEURS_2010-2011

    24/76

    24

    Modifiez maintenant la case 70h par la case 190h, compilez, simulez et tirer les conclusions

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    25/76

    25

    III.3 Structure gnrale dun programme

    ;***************************************************************** ; Ce programme crit les lettres A, B, C, D dans les positions suivantes de la RAM ; A => 20h B => A0h C => 110h D => 190h ;*****************************************************************

    list p=16f877 , r=decinclude __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF &

    _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC

    bcf STATUS,RP0 ;bank 0bcf STATUS,RP1 ;bank 0movlw 'A' movwf 20h

    bsf STATUS,RP0 ;bank 1

    movlw 'B' movwf 0xA0

    bcf STATUS,RP0 ;bank 2bsf STATUS,RP1 ;bank 2movlw 'C' movwf 110h

    bsf STATUS,RP0 ;bank 3movlw 'D' movwf 190h

    end

    Compilons le programme avecMPLAB (project quikbuild) etvisualisons la mmoire programme(view program memory) , on obtient lafentre ci-dessus.

    Observations :

    Comme il n'y a pas d'interruption, onne s'est pas souci de l'implantationdu programme dans la mmoireprogramme (directive ORG). onremarque sur la fentre quel'implantation du programmecommence l'adresse 0.

    La colonne de droite de cette fentreobtenue par cross-assemblage ducode machine n'utilise pas les nomsdes registres mais leurs adresses. Si nous avons pu utiliser les instruction comme :bcf STATUS,RP0, au lieu de bcf 0x3,0x5 c'est parce que le fichierp16f876.inc que nousavons inclus contient les dclarationsSTATUS EQU 0x3 et RP0 EQU 0x5

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    26/76

    26

    On remarque aussi que l'instructionmovwf 190h a t remplace parmovwf 0x10 , c'est tout fait normal car on ne retient que 7 bits de l'adresse 190h = 0001 1001 0000 ce qui donne 0010000 = 10h. Rassurons nous, c'est quand mme l'adresse 190h qui sera adresse l'adresse001 0000 sera complte par RP1,RP0=11 (bank 3) et on obtient 11001 0000 = 190h

    III.4 Quelques exemples

    Exercice 5) : Accs la RAM par l'adressage direct

    Donner le programme qui copie :35 dans la position 20h, 'A' dans la position A0h-5 dans la position 110h, 35h dans la position 190h

    Exercice 6) : Soustraction

    Donner le programme qui : soustrait la constante 33 de l'accumulateur W (W-33) Soustrait la constante 40h de la case mmoire d'adresse 70h ([70h]-40h) qui soustrait le contenu de la case mmoire 70h de l'accumulateur W avec le rsultat dans W

    ( W [70h] W ) qui soustrait le contenu de la case mmoire 71h de l'accumulateur W avec le rsultat dans la

    case mmoire( W [71h] [71h] )

    Exercice 7) : Accs la RAM par l'adressage indirect Donner le programme qui copie l'alphabet majuscule dans la RAM partir de la position 190h

    III.4.1 Comparaison

    Exercice 8) : (comp1.asm)

    Comparer les contenus des cases mmoire 6Fh et EFh, sil son gaux mettre zro tous lesbits de la case 16Fh sinon mettre 1 tous les bits de la case 1EFh

    Exercice 9) : (comp2.asm) Comparer les contenus des cases mmoire 6Fh et EFh,

    si [6Fh] = [EFh] copier la lettre E dans la case mmoire 16Fh si [6Fh] > [EFh] copier la lettre S dans la case mmoire 16Fh si [6Fh] < [EFh] copier la lettre I dans la case mmoire 16Fh

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    27/76

    27

    III.4.2 Boucles de temporisation Il arrive souvent qu'on dsire introduire des temporisations pendant l'excution d'un

    programme. Le PIC dispose de 3timers permettant de grer le temps avec prcision. Noustudierons ces modules plus tard, pour l'instant regardons comment on peut raliser destemporisations l'aide de simples boucles. L'ide est d'initialiser une variable une valeur donneet ensuite la dcrmenter en boucle jusqu' ce qu'elle atteint 0. Connaissant le temps d'excutionde chaque instruction, on peut calculer le temps que mettra le processeur terminer la boucle dedcrmentation

    III.4.2.1 Temporisation avec une boucle Examinons l'exemple ci-dessous, on met une valeur N1 dans la case mmoire 70h et on la

    dcrmente jusqu' 0

    movlw 4movwf 70h

    ici decfsz 70h,f goto ici

    - Les instructionsmovlw et movwf prennent 1 cycle chacune- L'instructiondecfsz prend un cycle si elle ne saute pas et 2 cycles quand elle saute- L'instructiongoto prend 2 cycles- chaque passage dans la boucle prend (1+2) cycle sauf le dernier qui prend 2 cycle

    T = 2 + (W-1)*3 + 2 = 3*W + 1 cycles

    La valeur max que l'on peut donner W est = 0 = 256, ce qui donne une temporisation maxde 769 cycles.

    Avec un quartz = fosc = 4 Mhz, 1 cycle = fosc/4 = 1 s, ce qui donne une temporisation max

    de 769 sPour faciliter l'utilisation de cette temporisation on va l'utiliser comme une fonction que l'on

    appelleratempo1. On note AN1 la case mmoire qui sert de compteur, il faut la dclarer au dbutavec la directiveEQU

    tempo1: ; il faut placer une valeur dans W avant d'appeler cette fonction movwf AN1

    t1: decfsz AN1,f goto t1return

    Cette fonction doit tre place aprs le programme principal, et on l'appelle avec l'instructioncall tempo1

    Pour le calcul il faut rajouter 2 cycles pour l'instructioncall et 2 cycles pour l'instructionreturn , ce qui donne

    T1 = 3 W + 5 cycles

    Le maximum est obtenu pour N1 =256, soit T1max = 773 s = 0.77 ms

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    28/76

    28

    III.4.2.2 Temporisation avec 2 boucles imbriques La boucle intrieure (N1) se fait toujours 256 fois. La boucle extrieure se fait N2 fois. Cest

    N2 qui constituera le paramtre de la fonction, Il faut le placer dans W avant de lappeler.

    tempo2 : ; il faut dfinir W dans le programme principal movwf AN2

    t2 : decfsz AN1,f goto t2decfsz AN2,f

    goto t2return

    T2 = 2 + 2 + [W(t1+3)-1] + 2 avec t1=256*3-1=767 on obtient :

    T2 = 770 W +5 cycles

    Le maximum est obtenu pour N2 =256, soit T2max = 197125 s = 0.197 s

    III.4.2.3 Temporisation avec 3 boucles imbriques Les boucles intrieures (N1 et N2) se font toujours 256 fois. La boucle extrieure se fait N3

    fois. Cest N3 qui constituera le paramtre de la fonction, Il faut le placer dans W avant delappeler.

    tempo3 : ;Il faut dfinir W dans le programme principal movwf AN3

    t3 : decfsz AN1,f goto t3decfsz AN2,f

    goto t3decfsz AN3,f

    goto t3return

    T3 = 2 + 2 + W(t2+3)-1 + 2 avec t2=256*(767+3)-1 on obtient :

    T3 = 197122 W +5 cycles

    Le maximum est obtenu pour N3 =256, soit T3max = 50463237 s = 50.46 s

    Remarque : La prcision de ces fonctions peut tre amliore en y insrant des instructionsnop ,dans ce cas il faut revoir les formules. On verra plus tard comment on peut faire destemporisations laide des timers.

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    29/76

    29

    IV Les ports dE/S Le PIC 16F877 dispose de 33 broches dentre sortie regroups dans 5 ports PORTA, PORTB,

    PORTC, PORTD et PORTE. Chaque broche dun port peut tre configure soit en entre soit ensortie laide des registres de direction TRISA, TRISB, TRISC et TRISD et TRISE:

    Bitk de TRISx =0

    brochek de PORTx =SORTIE

    Bitk de TRISx = 1 brochek de PORTx =ENTRE Certains ports ont quelques particularits que nous allons dtailler ci-desous,

    IV.1 Le port d' E/S PORTALe port A dsign par PORTA est un port de 6 bits (RA0 RA5). RA6 et RA7 ne sont pas

    accessibles.La configuration de direction se fait l'aide du registre TRISA, positionner un bit de TRISA 1

    configure la broche correspondante de PORTA en entr et inversement. Au dpart toutes lesbroches sont configures en entre

    IV.1.1 La broche RA4 En entre, la broche RA4 peut tre utilise soit comme E/S numrique normale, soit comme

    entre horloge pour le Timer TMR0

    En sortie, RA4 est une E/S drain ouvert, pour l'utiliser comme sortielogique, il faut ajouter une rsistance de pull-up externe. Le schma(Fig.IV.1) illustre (pour les non lectroniciens) le principe d'une sortie drainouvert (ou collecteur ouvert) : si RA4 est positionne 0, l'interrupteur estferm, la sortie est relie la masse, c'est un niveau bas. Si RA4 est place 1, l'interrupteur est ouvert, la sortie serait dconnecte s'il n'y avait pas larsistance externe qui place la sortie au niveau haut.

    Si on veut utiliser RA4 pour allumer une LED,on peut utiliser le schma deFig. IV.2 . Il faut

    juste remarquer que la logique est inverse, si onenvoie 0 sur RA4, l'interrupteur se ferme et la LED s'allume. Si on envoie1, l'interrupteur s'ouvre et la LED s'teint.

    Le schma illustr surFig. IV.3 peut aussi tre utilis. La logiquen'est pas inverse mais il demande une prcaution particulire. Il ne fautpas positionner la sortie RA4 l'aide d'une instruction qui ralise uneopration sur l'tat actuel du port; genre IORWF, ANDWF, XORWF ouCOMF, ADDWF, INCF Ces instructions ralisentune lecture-criture en commencent par lire l'tatdu port pour ensuite faire une opration dessus.Or, (sur Fig. IV.3 ) si la sortie tait au niveau

    haut, l'interrupteur est ouvert, la LED est allume et elle impose unetension de l'ordre de 1.5V qui sera considre ( tort) comme un niveaubas lors de la lecture du port par les instructions prcites. La solution estd'utiliser des instructions qui positionnent le PORT sans tenir compte deson tat courant comme MOVWF, BSF ou BCF

    IV.1.2 Les autres broches de PORTALes autres broches (RA0, RA1, RA2, RA3 et RA5) peuvent tre utilise soit comme E/S

    numriques soit comme entres analogiques. Au RESET, ces E/S sont configures en entres

    Vdd

    1k

    RA4

    Fig. IV.1 : rsistance de pull-up Vdd

    1k

    RA4

    LED

    Fig. IV.2 : LED sur RA4

    Vdd

    1k RA4

    LED

    Fig. IV.3 : LED sur RA4

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    30/76

    30

    analogiques . Pour les utiliser en E/S numriques, il faut crire '00000110' dans le registre ADCON1 (pour plus de dtail, voir chapitreVIII).

    Pour utiliser PORTA en port Numrique (normal), il faut placer 06h dans leregistre ADCON1 (bank1)

    Quelque soit le mode (Analogique ou Numrique), il faut utiliser le registre TRISA pourconfigurer la direction des E/S : Biti de TRISA = 0 bit i de PORTA configur ensortie

    Biti de TRISA = 1 bit i de PORTA configur enentre

    IV.2 Le port d' E/S PORTB Le port B dsign par PORTB est un port bidirectionnel de 8 bits (RB0 RB7). Toutes les

    broches sont compatibles TTL. La configuration de direction se fait l'aide du registre TRISB, positionner un bit de TRISB 1

    configure la broche correspondante de PORTB en entr et inversement. Au dpart toutes lesbroches sont configures en entre. En entre, la ligne RB0 appeleaussi INT peut dclencher linterruption externe INT. En entre, une quelconque des lignes RB4 RB7 peut dclencher l'interruption RBI. Nous

    reviendrons l-dessus dans le paragraphe rserv aux interruptions.

    IV.3 Le port d' E/S PORTC Le port C dsign par PORTC est un port bidirectionnel de 8 bits (RC0 RC7). Toutes les

    broches sont compatibles TTL. La configuration de direction se fait l'aide du registre TRISC, positionner un bit de TRISC 1

    configure la broche correspondante de PORTC en entr et inversement. Au dpart toutes lesbroches sont configures en entre.

    Toutes les broches du port C peuvent tre utilises soit comme E/S normales soit commebroches d'accs diffrents modules comme le timer 1, les modules de comparaison et decapture CCP1/2, le timer 2, le port I2C ou le port srie, ceci sera prcis au moment de l'tudede chacun de ces priphriques.

    Pour lutilisation dune broche du port C comme E/S normale, il faut sassurer quelle na past affecte un de ces modules. Par exemple, si TIMER1 est valid, il peut utiliser les broches

    RC0 et RC1 selon sa configuration.

    IV.4 Le port d' E/S PORTD Le port D dsign par PORTD est un port bidirectionnel de 8 bits (RD0 RD7). Toutes les

    broches sont compatibles TTL et ont la fonction trigger de Schmitt en entre. Chaque broche et configurable en entre ou en sortie laide du registre TRISD. Pour

    configurer une broche en entre, on positionne le bit correspondant dans TRISD 1 etinversement.

    PORTD nest pas implment sur tous les processe urs 16F87X, il est disponible sur le 16F877,le 16F874 et le 16F871

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    31/76

    31

    PORTD peut tre utilis dans un mode particulier appelparallel slave port , pour cela il fautplacer le bitPSPMODE (bit 4) de TRISE 1. Dans ce cas les 3 bits de PORTE deviennent lesentres de control de ce port (RE, WE et CS)

    Pour utiliser PORTD en mode normal, il faut placer le bit PSPMODE de TRISE 0

    IV.5 Le port d' E/S PORTE PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables en entre ou en

    sortie laide des bits 0, 1 ou 2 du registre TRISE. PORTEnest pas implment sur tous les processeur s 16F87X, il est disponible sur le 16F877,

    le 16F874 et le 16F871 Les 3 bits de PORTE peuvent tre utiliss soit comme E/S numrique soit comme entres

    analogiques du CAN. La configuration se fait laide du registre ADCON1.

    Si le bit PSPMODE de TRISE est plac 1, Les trois bits de PORTE deviennent les entres de

    control du PORTD qui (dans ce cas) fonctionne en modeparallel Slave mode A la mise sous tension (RESET), les 3 broches de PORTE sont configures comme entres

    analogiques.

    Pour utiliser les broches de PORTE en E/S numriques normales :- Placer 06h dans ADCON1- Placer le bitPSPMODE de TRISE 0

    Exercice 10) : Clignoter une LED

    Donner le programme qui fait clignoter une LED branche sur RA0 avec une temporisation

    voisine de 0.5s. Sachant que le PIC est dot d'un quartz de 4 MHz, la temporisation sera ralise l'aide de boucles imbriques

    Exercice 11) : compteur impulsions

    Programme qui : Allume la LED branche sur RB3 Compte 150 impulsions sur l'entre RA4 (la case mmoire 70h servira de compteur) Eteint la LED branche sur RB3

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    32/76

    32

    V Les mmoires permanentes Le PIC 16F877 dispose de 2 mmoires permanentes. La mmoire EEPROM PROGRAMME d

    capacit 8k mots de 14 bits et la mmoire EEPROM DE DONNES de capacit 256 octets. Ondispose de deux mthodes pour crire dans ces mmoires.

    La premire consiste flasher le PIC avec l'excutable (.hex). Les instructions sont flashsdans la EEPROM programme et les donne sont flashs dans la EEPROM de donnes. Le flashagese fait laide dun programmeur et le soft qui va avec. (voir les directive DE et ORG dans ce courset dautres directives comme DA, DW dans le manuel dutilisation de MPASM)

    La deuxime mthode consiste accder aux mmoires EEPROM partir du programmedurant la phase d'excution de ce dernier.Cest ce que nous allons dtailler dans les paragrap hesci-dessous.

    V.1 La mmoire EEPROM de donnes Le PIC 16F876/877 dispose de 256 octets de mmoire EEPROM de donne. Son implantation

    physique commence la position dadresse absolue 2100h. Mais pour y accder partir desprogrammes utilisateur on utiliseladressage relatif par rapport la premire position. La premireposition aura ladresse 0, la deuxime aura ladresse 1. . . et la dernire aura ladresse 255.

    Pour accder la EEPROM, on utilise 4 registres particuliers : EEADR : registre dadresse (relative) (bank 2) EEDATA : registre de donne (bank 2) EECON1 : registre de control (bank 3) EECON2 : 2me registre de control (bank 3)

    Le registre EECON1 : EEPGD WRERR WREN WR RD

    EEPGD : Accs la mmoire EEPROP ou la mmoire Programme0 : EEPROM de donnes1 : Mmoire programme (flash)

    WRERR : Erreur d'criture (indicateur)0 : Pas d'erreur1 : Une erreur s'est produite

    WREN : Validation de l'criture dans l'EEPROM0 : Ecriture interdite1 : Ecriture autorise

    WR : Write Enable. Ce bit doit tre mis 1 pour dmarrer l'criture d'un octet. Il est remis zro automatiquement la fin de l'criture. Ce bit ne peut pas tre mis zro par uneinstruction.

    RD : Read Enable. Ce bit doit tre mis 1 pour dmarrer la lecture d'un octet. Il est remis zro automatiquement la fin de la lecture. Ce bit ne peut pas tre mis zro par uneinstruction

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    33/76

    33

    V.1.1 Procdure de lecture dans l'EEPROM Pour lire le contenu dune position de la mmoire EEPROM, on place ladresse dans le registre

    EEADR, on lance lopration de lecture laide du bit RD du registre EECON1, la donne dsireest tout de suite disponible dans le registre EEDATA :1) Mettre le bit EEPGD 0 pour pointer sur l'EEPROM de donne2) Placer ladresse relative de la posi tion lire dans EEADR 3) Mettre le bit RD 1 pour dmarrer la lecture. Ce bit revient 0 automatiquement tout desuite aprs le transfert de la donne vers EEDATA, (moins d'un cycle)4) Traiter la donne disponible dans EEDATA5) Recommencer au point 2 si on a d'autres donnes lire,

    V.1.2 Procdure d'criture dans l'EEPROM Pour crire une donne dans une position de la mmoire EEPROM, on place ladresse dans le

    registre EEADR, la donne dans le registre EEDATA, on lance lopration dcriture laide du bitWR de EECON1 et du registre EECON2. La donne prsente dans EEDATA est alors copie dans laEEPROM mais cette opration prend 10 ms. A la fin de l'criture le bit WR revient zro

    automatiquement, le drapeau EEIF est lev ce qui peut dclencher l'interruption EEI si elle a tvalide auparavant :

    1) Interdire les interruptions (si elles ont t valides avant : bit INTCON.GIE)2) Mettre le bit EEPGD 0 pour pointer sur l'EEPROM de donne3) Positionner le bit WREN pour valider l'criture dans l'EEPROM4) Placer ladresse relative de la position crire dans EEADR 5) Placer la donne crire dans le registre EEDATA6) - Ecrire 55h dans EECON2 (commande de process hardwares)

    - Ecrire AAh dans EECON2 (commandes de process hardwares)- Positionner le bit WR pour dmarrer l'opration d'criture, et attendre quil revienne 0

    7) Recommencer au point (4) si on a d'autres donnes crire,Remarque : Les bits WREN et WR ne peuvent tre positionn dans la mme instruction. WR nepeut tre positionn que si le bit WREN a t positionn avant.

    V.2 La mmoire Programme ou mmoire flash Cette mmoire de 8 x 1024 mots de 14 bits sert stocker le programme, mais elle est

    accessible par programme et peut donc tre utilise comme une extension de la mmoire EEPROMde donnes. Elle est non volatile (flash) et reprogrammable souhait. Chaque position de 14 bitscontient une instruction. L'emplacement du programme peut se situer n'importe quel endroit dela mmoire. Cependant il faut savoir que suite un RESET ou lors de la mise sous tension, le PICcommence l'excution l'adresse 0000H. De plus, lorsqu'il y a une interruption, le PIC va l'adresse 0004H. Il est donc ncessaire de bien organiser le programme si celui-ci utilise desinterruptions.

    Le programme excutable par le PIC est implant dans la mmoire flash l'aide d'unprogrammateur (hard+soft) sur lequel nous reviendrons dans la suite de ce document.

    L'accs la mmoire flash par les instructions du programme se fait de la mme faon quel'accs l'EEPROM de donnes, l'exception des points suivant : Le bit EEPGD doit tre plac 1

    Le registre EEADR (8 bits) seul ne suffit pas adresser les 8k de mmoire programme, on luiaccole le registre EEADRH dans lequel il faut crire la partie haute de l'adresse. On obtientainsi les 13 bits ncessaires pour adresser 8K.

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    34/76

    34

    Le registre EEDATA (8 bits) seul ne suffit pas pour contenir les 14 bits contenus dans uneposition de la mmoire programme. On lui accole le registre EEDATH qui contiendra les 6 bitssuprieurs.

    Il faut insrer deux instructions NOP dans les cycles de lecture/criture. Pendant la phased'criture, le processeur arrte l'excution des instructions. Il n'est donc pas ncessaired'attendre la fin de l'criture pour continuer car ceci se fait automatiquement, la fin del'criture, l'excution reprend l'instruction qui suit le 2me NOP,

    V.2.1 Procdure de lecture dans la mmoire programme 1) Mettre le bit EEPGD 1 pour pointer sur la mmoire programme2) Placer ladresse de la position lire dans EEADRH:EEADR 3) Mettre le bit RD 1 pour dmarrer la lecture4) Attendre 2 cycles machine (2 instructions NOP)5) Lire le contenu des registres EEDATH:EEDATA6) Recommencer au point 2) si on a d'autres donnes lire

    V.2.2 Procdure d'criture dan la mmoire programme 1) Interdire les interruptions (si elles ont t valides avant)2) Mettre le bit EEPGD 1 pour pointer sur la mmoire programme3) Positionner le bit WREN pour valider l'criture dans la mmoire programme4) Placer ladresse de la position crire dans EEADRH:EEADR 5) Placer la donne crire dans le registre EEDATH:EEDATA

    6) - Ecrire 55h dans EECON2 (commande de process hardwares)- Ecrire AAh dans EECON2 (commandes de process hardwares)- Positionner le bit WR pour dmarrer l'opration d'criture

    7) Excuter 2 instructions NOP8) Recommencer au point 3 si on a d'autres donnes crireRemarque : aprs le point (6), ane sert rien dattendre que WR passe 0 pour dtecter la finde l'criture. Le processeur arrte l'excution du programme pendant la phase d'criture dans lammoire programme. La boucle de scrutation ne sera excute qu'aprs la fin de l'criture ce quila rend tout fait inutile. Il suffit de mettre deux instructions NOP avant de continuer.

    Exercice 12)

    Programme qui crit l'alphabet majuscule dans la mmoire EEPROM de donnes partir de laposition 20h.

    Exercice 13) EEPROM-D vers RAM

    Programme qui utilise la directive DE pour initialiser les premires positions de l'EEPROM dedonnes avec la chane "BONJOUR CHER AMI". Le programme doit ensuite lire ces caractres (1par 1) dans l' EEPROM et les copier dans la RAM partir de la position 110h

    Exercice 14) Mem-Prog vers RAM

    Programme qui lit 20 positions de la mmoire programme dbutant la position 12FAh et les copie

    dans la RAM partir de la position 110h. Attention : Le contenu dune position mmoire programme permet de remplir 2 positions de la RAM. Le dbordement de EEADR naffecte pas EEADRH

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    35/76

    35

    VI Les interruptions Une interruption provoque larrt du programme principal pour aller excuter une procdure

    d'interruption. A la fin de cette procdure, le microcontrleur reprend le programme principal lendroit o il la laiss. A chaque interruption sont associs deux bits, un bit de valida tion et undrapeau. Le premier permet d'autoriser ou non l'interruption, le second permet au programmeurde savoir de quelle interruption il s'agit.

    Sur le 16F876/877, l'es interruptions sont classes en deux catgories, les interruptionsprimaires et les interruptions priphriques. Elles sont gres par les registres :

    INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIFPIE1 (bk1) PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IPIR1 (bk0) PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IPIE2 (bk0) - - - EEIE BCLIE - - CCP2IEPIR2 (bk1) - - - EEIF BCLIF - - CCP2IFOPTION_REG(bk1) INTEDG Toutes les interruptions peuvent tre valides/interdites par le bit INTCON.GIE Toutes les interruptions priphriques peuvent tre valides/interdites par le bit INTCON.PEIE Chaque interruption peut tre valide/interdite par son bit de validation individuel

    En rsum, pour valider une interruption priphrique (par exemple), il faut positionner 3 bits,GIE, PEIE et le bit individuel de linterruption.

    VI.1 Droulement d'une interruption Lorsque l'vnement dclencheur d'une interruption intervient, alors son drapeau est

    positionn 1 (lev). Si l'interruption a t valide (bits de validations = 1), elle est alorsdclenche : le programme arrte ce qu'il est en train de faire et va excuter la procdured'interruption qui se trouve l'adresse 4 en excutant les tapes suivantes : l'adresse contenue dans le PC (Program Counter) est sauvegarde dans la pile, puis remplace

    par la valeur 0004 (adresse de la routine d'interruption). Le bit GIE est plac "0" pour inhiber toutes les interruptions (afin que le PIC ne soit pas

    drang pendant l'excution de la procdure d'interruption). A la fin de la procdure d'interruption (instruction RETFIE) : le bit GIE est remis 1 (autorisant ainsi un autre vnement) le contenu du PC est recharg partir de la pile ce qui permet au programme de reprendre l

    o il s'est arrt

    Deux remarques importantes sont faire :

    Le drapeau reste ltat haut mme aprs le traitement de linterruption. Par consquent, il fauttoujours le remettre "0" la fin de la routine d'interruption sinon l'interruption sera dclenchede nouveau juste aprs l'instruction RETFIE

    Seul le PC est empil automatiquement. Si cela est ncessaire, les registres W et STATUS doiventtre sauvegards en RAM puis restaurs la fin de la routine pour que le microcontrleur puissereprendre le programme principal dans les mmes conditions o il l'a laiss.

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    36/76

    36

    VI.2 Les sources d'interruption Interruption : Source dinterruption Validation Flag PEIET0I : Dbordement Timer 0 INTCON,T0IE INTCON,T0IF nonINT : Front sur RB0/INT INTCON,INTE INTCON,INTF nonRBI : Front sur RB4-RB7 INTCON,RBIE INTCON,RBIF nonADI : Fin de conversion A/N PIE1,ADIE PIR1,ADIF ouiRCI : Un Octet est reu sur l'USART PIE1,RCIE PIR1,RCIF ouiTXI : Fin transmission d'un octet sur l'USART PIE1,TXIE PIR1,TXIF ouiSSPI : Caractre mis/reu sur port srie synchrone PIE1,SSPIE PIR1,SSPIF ouiTMR1I : Dbordement de Timer 1 PIE1,TMR1IE PIR1,TMR1IF ouiTMR2I :Timer 2 a atteint la valeur programme PIE1,TMR2IE PIR1,TMR2IF ouiPSPI : Lecture/criture termine sur Port parallle (16F877) PIE1,PSPIE PIR1,PSPIF ouiCCP1I : Capture/comparaison de TMR1 avec module CCP1 PIE1,CCP1IE PIR1,CCP1IF ouiCCP2I : Capture/comparaison de TMR1 avec module CCP2 PIE2,CCP2IE PIR2,CCP2IF ouiEEI : Fin d'criture en EEPROM PIE2,EEIE PIR2,EEIF ouiBCLI : Collision sur bus SSP en mode I2C PIE2,BCLIE PIR2.BCLIF oui

    VI.3 L'interruption INT (Entre RB0 du port B) Cette interruption est provoque par un changement d'tat sur l'entre RB0 du port B quand

    elle est programme en entre. En plus de son bit de validation INTE et son drapeau INTF, elle estgre aussi par le bit INTEDG (OPTION_REG) qui dtermine le front sur lequel l'interruption sedclenche, 1=montant, 0=descendant

    VI.4 L'interruption RBI (RB4 A RB7 du port B) Cette interruption est provoque par un changement d'tat sur l'une des entres RB4 RB7 du

    port B, Le front n'a pas d'importance. Les bits associs sont RBIE (validation) et RBIF (drapeau). ATTENTION : Le drapeau RBIF ne peut tre remis zro sans la lecture pralable de PORTB

    (MOVF PORTB,w ). Si on ne veut pas modifier le contenu de W, on peut copier PORTB sur lui-mme(MOVF PORTB,f) .

    VI.5 Les autres interruptions Les autres interruptions seront abordes au moment de l'tude des modules qui les

    dclenchent.

    Exercice 15) (int.asm)

    Programme qui utilise linterruption INT comme suit :Chaque fois que lentre RB0 passe de 1 0, la LED branche sur RB1 clignote 4 fois au rythme dela seconde

    Exercice 16) (div-freg-rbi.asm)

    Ecrire un programme qui ralise une division de frquence par 5. Le signal d'entre est appliqusur l'entre RB4. Le signal de sortie est gnr sur la sortie RB1. On utilisera l'interruption RBIpour dtecter les transitions du signal d'entre.

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    37/76

    37

    VII Les Timers VII.1 Le Timer TMR0 Cest un compteur 8 bits ayant les caractristiques suivantes : Il est incrment en permanence soit par lhorl oge interne Fosc/4 (mode timer) soit par une

    horloge externe applique la broche RA4 du port A (mode compteur). Le choix de l'horlogese fait l'aide du bit T0CS du registre OPTION_REG

    o T0CS = 0 horloge interneo T0CS = 1 horloge externe applique RA4

    Dans le cas de l'horloge externe, Le bit T0SE du registre OPTION_REG permet de choisir lefront sur lequel le TIMER s'incrmente.

    o T0SE = 0 incrmentation sur fronts montantso T0SE = 1 incrmentation sur fronts descendants

    Quelque soit l'horloge choisie, on peut la passer dans un diviseur defrquence programmable (prescaler) dont le rapport DIV est fixs parles bits PS0, PS1 et PS2 du registre OPTION_REG (tableau ci-contre).L'affectation ou non du prdiviseur se fait l'aide du bit PSA duregistre OPTION_REG

    o PSA = 0 on utilise le prdiviseuro PSA = 1 pas de prdiviseur (affect au chien de garde)

    Le contenu du timer TMR0 est accessible par le registre qui porte lemme nom. Il peut tre lu ou crit n'importe quel moment. Aprs une criture, le timer necomte pas pendant deux cycles machine.

    Au dbordement de TMR0 (FF 00), le drapeau INTCON.T0IF est plac 1. Cecipeut dclencher l'interruption T0I si celle-ci est valide

    OPTION_REG RBPU INTEDGT0CS T0SE PSA PS2 PS1 PS0

    En rsum, chaque fois que le compteur complte un tour, le drapeau T0IF se lve. Si on note TH la priode de l'horloge source, T0 l'horloge de TMR0 et TF0 le temps qui spare 2 levs de drapeausuccessifs : Sans prdiviseur :T F0 = 256 T 0 = 256 T H Avec prdiviseur :T F0 = 256 T 0 = 256 x (DIV x T H ) Avec prdiviseur et compteur N dans le programme on obtient :NxT F0 = N x 256 x (DIV x T H )

    Exercice 17) Clignoter LED / TMR0

    PIC dot d'un quartz de 4 MHz. Programme qui fait clignoter une LED branche sur RB0, delayvoisin de 0.5s l'aide de TMR0

    a) Par scrutation du drapeau T0IF (pas d'interruption)b) En utilisant l'interruption T0I

    PS2 PS1 PS0 Div0 0 0 20 0 1 40 1 0 80 1 1 16

    1 0 0 321 0 1 641 1 0 1281 1 1 256

    Fosc/4

    TMR0Prdiviseur

    programmable

    PS0PS1PS2

    Horloge quartz

    Fosc 4

    RA4

    T0CS

    00

    1 1

    T0SE PSA

    T0IF0 1

    TH TF0 T0

    T F0 = 256 x (DIV x T H )

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    38/76

    38

    VII.2 Le Watchdog Timer WDT (Chien de garde)

    Cest un compteur 8 bits in crment en permanence (mme si le C est en mode sleep) parune horloge RC intgre indpendante de l'horloge systme. Lorsquil dborde, (WDT TimeOut),deux situations sont possibles :

    Si le C est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci permetdviter de rester plant en cas de blocage du microcontrleur par un processus indsirablenon contrl

    Si le C est en mode SLEEP, le WDT time-out provoque un WAKE-UP, l'excution duprogramme continue normalement l o elle s'est arrte avant de rentrer en mode SLEEP.Cette situation est souvent exploite pour raliser des temporisations

    L'horloge du WDT a une priode voisine de 70 s ce donne un Time-Outtoutes les 18 ms. Il est cependant possible d'augmenter cette dure en faisantpasser le signal Time-Out dans un prdiviseur programmable (partag avec letimer TMR0). L'affectation se fait l'aide du bit PSA du registre OPTION_REG

    o PSA = 1 on utilise le prdiviseuro PSA = 0 pas de prdiviseur (affect TMR0)

    Le rapport du prdiviseur est fix par les bits PS0, PS1 et PS2 du registreOPTION_REG (voir tableau ci-contre)

    L'utilisation du WDT doit se faire avec prcaution pour viter larinitialisation (inattendue) rpte du programme. Pour viter un WDT timeOut lors de l'excutiond'un programme, on a deux possibilits : Inhiber le WDT d'une faon permanente en mettant 0 le bit WDTE dans l'EEPROM de

    configuration Remettre le WDT 0 priodiquement dans le programme l'aide de l'instruction CLRWDT pour

    viter qu'il ne dborde

    PS2 PS1 PS0 Div0 0 0 10 0 1 2

    0 1 0 40 1 1 81 0 0 161 0 1 321 1 0 641 1 1 128

    WDTPrdiviseur

    programmable

    PS0PS1PS2

    HorlogeWDT

    00

    1 1

    PSA

    WDTtimeout

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    39/76

    39

    VII.3 Le Timer TMR1 TMR1 est un Timer/Compteur 16 bits accessible en lecture/criture par l'intermdiaire des

    registres 8 bits TMR1H (bank0) et TMR1L (bank0) qui constituent sa partie haute et sa partiebasse.

    On le configure l'aide du registre T1CON (bank0)

    TMR1 peut fonctionner dans 3 modes diffrents :- Timer Synchrone (horloge interne)- Compteur Synchrone (horloge externe)- Compteur Asynchrone (horloge externe)

    Le bit de contrle TMR1CS dtermine le fonctionnement en Timer ou en Compteur et le bitT1SYNC dtermine le mode de fonctionnement en synchrone ou en asynchrone

    TMR1 peut tre arrt/dmarr l'aide du bit TMR1ON TMR1 peut tre RAZ l'aide du module de capture/comparaison CCP TMR1 peut tre prcd d'un prdiviseur (Prescaler) qui peut diviser la frquence par 1, 2, 4

    ou 8 selon la valeur des bits T1CKPS1 et T1CKPS0 A son dbordement (FFFFh 0000h) le drapeau PIR1.TMR1IF (bank0) est positionn ce qui

    peut dclencher l'interruption priphrique TMR1I si elle est valide par son bit de validationPIE1.TMR1IE (bank1).

    VII.3.1 Le mode Timer

    Dans ce mode, TMR1 est incrment par lhorloge systme Fosc/4 ventuellement prdivise.Le bit de synchronisation n'a pas d'effet car l'horloge Fosc/4 est toujours synchronise sur l'horlogesystme.

    VII.3.2 Le mode Compteur Dans ce mode, TMR1 est incrment chaque front montant de l'horloge externe T1CKI

    (RC0) ou l'horloge ddie gnre par loscillateur T1OSC condition de positionner le bitT1OSCEN 1 et de brancher un quartz entre les broche RC0 et RC1.

    En mode compteur, RC0 et RC1 sont automatiquement configures en entre, on na pasbesoin de configurer les bits TRISC,0 et TRISC,1

    0

    1 TMR116 bits

    TMR1IF

    SYNC

    PrdiviseurDIV =1,2 4,8

    HorlogeSystmeFOSC/4

    T1OSC

    T1SYNC

    TMR1ON

    TMR1CS

    T1OSCEN

    RC0

    RC1

    0

    1

    CLR

    CCP

    T1CON TF1

    T1 TH

    T F1 = 65536 x T 1 = 65536 x (DIV x T H )

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    40/76

    40

    En fonctionnementSynchrone , l'horloge externe (ventuellement prdivise) n'incrmentepas directement le timer mais elle est synchronise sur l'horloge systme ce qui peut entranerun dlai de l'ordre de 1 cycle machine. Dans cette configuration

    En fonctionnement Asynchrone , l'horloge externe (ventuellement prdivise) incrmente letimer indpendamment de l'horloge systme.

    En mode Compteur Asynchrone, on ne peut pas utiliser les modules CCP1 et CCP2 pour fairedes captures ou des comparaisons sur TMR1

    VII.3.3 Le registre de control de T1CON

    T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

    T1CKPS1,T1CKPS0 : Control du prescaler00 : division par 101 : division par 210 : division par 411 : division par 8

    T1OSCEN : Validation de l'Oscillateur associ TMR10 : Oscillateur arrt1 : Oscillateur activ

    T1SYNC : Synchronisation de l'horloge externe (ignor en mode timer)0 : Synchronisation1 : pas de synchronisation

    TMR1CS : Choix de l'horloge du Timer0 : horloge systme (Fosc/4) : mode timer1 : Horloge externe : mode compteur

    TMR1ON : Dmarrer arrter le timer0 : Timer stopp1 : Timer en fonctionnement

    En rsum :Le temps qui spare 2 levs de drapeau TMR1IF est :T F1 = 65536 x T 1 = 65536 x (DIV x T H ) Si on ajoute un compteurN dans le programme on obtient un temps =N x T F1 Exercice 18) Clignoter LED / scrutation de TMR1

    Clignoter une LED relie RE0. La temporisation voisine de 0.5s sera ralise l'aide de TMR1 parscrutation du drapeau TMR1IF

    Exercice 19) Clignoter LED / interruption TMR1

    Clignoter une LED relie RD0. La temporisation voisine de 0.5s sera ralise l'aide de TMR1 estson interruption TMR1I

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    41/76

    41

    VII.4 Les module de Comparaison/Capture CCP1 et CCP2 Chacun des modules CCP1 et CCP2 permet :

    Soit de CAPTURER en un seul coup le contenu du double registre TMR1 Soit de COMPARER en permanence son contenu avec un registre 16 bits et de dclencher un

    vnement au moment de lgalit.

    Ces modules ne fonctionnent pas si TMR1 est configur en mode Compteur non synchronis

    VII.4.1 Le module CCP1 Ce module est constitu de : Un registre 16 bits CCPR1 utilis pour la capture ou la comparaison de TMR1. Il est accessible

    par sa partie basse CCP1L et sa partie haute CCP1H Un registre de contrle 8 bits CCP1CON. Un prdiviseur permettant de filtrer les vnements dclencheurs de capture venant de la

    broche RC2VII.4.1.1 Le mode Capture

    Dans ce mode le contenu de TMR1 est copi dans CCPR1 chaque fois qu'un vnementintervient sur la broche RC2. Le choix de l'vnement dclencheur se fait en programmant leprescaler laide des bits 0 3 du registre de contrle CCP1CON. On a le choix parmi lesvnements suivants :

    A chaque front descendant A chaque front montant (prescaler 1:1) A chaque 4me front montant (prescaler 1:4) A chaque 16me front montant (prescaler 1:16)

    A la fin de la capture, le drapeau CCP1IF est positionn, l'interruption priphrique associeest dclenche si elle a t valide.

    Plusieurs aspects sont noter comme : Si on veut dclencher la capture par un signal externe, celui-ci doit tre appliqu sur la proche

    RC2 qui doit tre configure en entre par le bit TRISC,2

    Prescaler1, 4 ou 16

    TMR1H TMR1L

    CCPR1H CCPR1L

    chargement

    CCP1IF

    CCP1CON CCPR1Registre de capture et comparaisonRegistre de control

    TMR1

    RC2

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    42/76

    42

    Si on veut dclencher la capture par programme en changeant la valeur du bit RC2, celui-cidoit tre configur en sortie par le bit TRISC,2

    Lors de la modification du mode de capture, une interruption indsirable peut intervenir.L'utilisateur doit veiller masquer l'interruption CCP1I avant de procder cette modificationet de baisser le drapeau CCP1IF aprs la modification.

    En mode Sleep, le prescaler et le drapeau CCP1IF restent oprationnels. le positionnement dudrapeau peut dclencher un Wake-up si le bit de validation CCP1IE a t valid auparavant

    VII.4.1.2 Le registre de configuration CCP1CON

    DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0

    DC1B1, DC1B0 : utiliss en PWM modeCe sont les 2 bits de poids faible des 10 bits MWM duty cycle. Les 8 autres bits sont dans leregistre CCPR1L

    CCP1M3 CCP1M0 : mode de fonctionnement du module CCP10000 : Module arrt (reset module)0100 : Capture sur chaque front descendant0101 : Capture sur chaque front montant0110 : Capture tous les 4 fronts montants0111 : capture tous les 16 fronts montants1000 : Mode comparaison (drapeau CCP1IF + broche RC2 01)1001 : Mode comparaison (drapeau CCP1IF + broche RC2 10)1010 : Mode comparaison (drapeau CCP1IF seulement)1011 : Mode comparaison (drapeau CCP1IF + RAZ TMR1)10xx : PWM mode (modulation de largeur dimpulsion), ce mode ne sera pas trait dan cecours

    VII.4.1.3 Le mode Comparaison Dans ce mode le registre CCPR1 est compar en permanence TMR1. Quand l'galit

    intervient, le drapeau CCP1IF passe 1 et diffrentes actions sont accomplies selon le mode dfinipar les bits de configuration CCP1M3:CCP1M0

    mode 1000 : Au moment de l'galit, le drapeau CCP1IF est le bit RC2 passent 1. C'est l'utilisateur deles remettre 0 pour une prochaine utilisation. RC2 doit tre configur en sortie.

    TMR1H TMR1L

    CCPR1H CCPR1L

    CCP1IF

    RC2

    Logiquede

    controlComparateur

    (RAZ)

    CCP1Mx

    horloge

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    43/76

    43

    mode 1001 : Au moment de l'galit, le drapeau CCP1IF passe 1 et le bit RC2 passe 0. C'est l'utilisateur de les remettre leur tat dorigine pour une prochaine utilisation. RC2 doit treconfigur en sortie.

    mode 1010 : A l'galit le drapeau CCP1IF passe 1. La broche RC2 n'est pas utilise.

    mode 1011 : A l'galit, le drapeau CCP1IF passe 1 et le timer TMR1 est remis 0

    VII.4.2 Le module CCP2 Le module CCP2 est identique au module CCP1, il suffit dinterchanger 1 et 2 et de constater lespoints suivants : CCP2 est associ la broche RC1 Il est gr par le registre de control CCP2CON Son registre de capture/comparaison est CCPR2 = CCPR2H:CCPR2L En mode comparaison 1011, A lgalit :

    o le drapeau CCP2IF passe 1o RAZ de TMR1

    o envoi dun GO vers le convertisseur analogique numrique

    Exercice 20) gnrer signal TMR1/CCP1

    Programme qui gnre le signal ci-dessous sur la sortie RE0 en utilisant TMR1 associ CCP1

    500 s500 s

  • 8/3/2019 MICROCONTROLEURS_2010-2011

    44/76

    44

    VII.5 Le Timer TMR2

    TMR2 est un timer