Telecharger-livre-Programmation Des PIC en C Part1-Www.marocetude.com

download Telecharger-livre-Programmation Des PIC en C Part1-Www.marocetude.com

of 39

Transcript of Telecharger-livre-Programmation Des PIC en C Part1-Www.marocetude.com

  • - 1 -

    Programmation des PIC en C

    Microcontrleur facile pour lectronicien amateur

    PARTIE 1

    Noxyben 2007

  • WWW.MarocEtude.Com --- PORTAIL DE LA FORMATION PROFESSIONNELLE AU MAROC

    Tlcharger des livres gratuitement sur notre site, en accdant la rubrique : LIVRES

    Vous trouverez aussi sur notre site :

    - Modules, Cours, Exercices tlcharger gratuitement.

    - Documents Techniques ddies la formation professionnelle : Gnie Electrique, Gnie Mcanique. Gnie Informatique, Gnie Industriel, Gnie Climatique

    "On ne jouit bien que de ce qu'on partage" [Madame de Genlis]

  • - 2 -

    Introduction ................................................................................................................................ 3

    Intrt de la programmation en langage C ................................................................................. 4

    Choix du compilateur ................................................................................................................. 5

    Choix dun PIC : le 16F877 ....................................................................................................... 6

    Choix du programmateur ........................................................................................................... 7

    Structure du PIC 16F877............................................................................................................ 8

    Le cur du PIC : le microprocesseur ..................................................................................... 9

    La mmoire .......................................................................................................................... 11

    La Pile et le Compteur Programme ...................................................................................... 13

    Les Ports dEntres/Sorties gnraux : PORTA, PORTB, PORTC, PORTD, PORTE....... 15

    Le Port Parallle Esclave (PSP : Parallel Slave Port) .......................................................... 17

    Le circuit de gnration dhorloge ....................................................................................... 18

    Le TIMER0 .......................................................................................................................... 19

    Le TIMER1 .......................................................................................................................... 20

    Le TIMER2 .......................................................................................................................... 22

    Les modules CCP1 et CCP2................................................................................................. 23

    Le convertisseur Analogique Digital 10bits :.................................................................... 25

    LUSART............................................................................................................................. 27

    Le SSP, Synchronous Serial Port ......................................................................................... 29

    La logique de RESET........................................................................................................... 31

    LIn-Circuit Debugger.......................................................................................................... 33

    Low-Voltage Programming et ICSP (In-Circuit Serial Programming) ............................... 34

    Les Bits de Configuration .................................................................................................... 36

    Les Interruptions .................................................................................................................. 36

    Le mode SLEEP ................................................................................................................... 37

    Brochage du PIC16F877 .......................................................................................................... 38

    Conclusion................................................................................................................................ 38

  • - 3 -

    Introduction Dans un pass pas trs lointain, llectronique pour les amateurs (clairs) se rsumait essentiellement aux circuits analogiques et ventuellement en logique cble (portes logiques, compteurs, registres dcalage). Lusage des microprocesseurs tait plutt rserv un public averti dingnieurs sachant les interfacer avec diffrents circuits priphriques (eprom, ram) et programmer en assembleur. Au fil du temps on a vu apparatre de nouveaux circuits regroupant dans une seule puce le microprocesseur et ses circuits priphriques : les microcontrleurs. On en trouve maintenant partout : automobile, lave-vaisselle, rasoir, brosse dent lectrique Loffre en microcontrleurs sest dveloppe dautant : plus de priphriques intgrs, capacit de calcul accrue, plus de mmoire embarque. Il y a maintenant de nombreux fabricants de microcontrleurs, possdant chacun plusieurs gammes allant du circuit gnraliste , vritable couteau suisse lectronique, la puce spcialise ddie par exemple, la rgulation de vitesse dun moteur de ventilateur. La voie royale pour tirer le maximum des performances de ces circuits est toujours la programmation en assembleur. On accde alors au moindre bit enfoui dans nimporte quel registre du circuit. Cela ncessite nanmoins un investissement en temps consquent, lassembleur ntant pas un langage trs naturel . De plus, dun constructeur lautre, voire dun circuit lautre dans la mme gamme, il existe des diffrences qui obligent rapprendre tout ou partie du langage lorsque lon change de microcontrleur. Cest un investissement intressant pour un professionnel qui cherche produire un code optimis sur la puce la moins chre possible, mais pnible pour un amateur qui ne dispose que de relativement peu de temps pris sur ses loisirs. Heureusement, avec la monte en puissance des microcontrleurs, on voit apparatre actuellement des compilateurs en langage C (voire mme C++) qui permettent de gagner un temps considrable pour le dveloppement et le dbogage des programmes. Pour tous ceux qui se sont retrouv largu sur le bord du chemin cause de ces de microcontrleurs, cest mon avis une formidable opportunit de sauter dans le train de llectronique numrique et dapprivoiser ces tranges petites btes. Et pourquoi pas un ampli tubes pilot par microcontrleur ? Les capacits tonnantes de ces circuits vous ouvrent un espace de crativit infini. Ce serait vraiment dommage de se passer de leurs services Une fois la dcision prise je vais me lancer dans les micros ! se pose la question du comment. On trouve sur internet toutes les informations ncessaires, la difficult serait plutt de les trier. Vous pouvez commencer par exemple par lire la documentation de Microchip sur la gamme de PIC mid-range , cest une excellente ide, mais a va vous prendre du temps (plus de 800 pages !) Dans le but de vous simplifier la tche, je vais essayer dans le prsent ouvrage de synthtiser quelque peu ces informations. Et pour viter la frustration du je saurais utiliser un microcontrleur PIC, mais avant je dois me taper un bouquin de 1000 pages je vais tcher dutiliser une approche progressive permettant de, trs rapidement, crer de vritables petits circuits.

  • - 4 -

    Intrt de la programmation en langage C

    Tout dabord, les inconvnients : Un compilateur C produit du code plus volumineux et moins performant que ce que sait faire un bon programmeur en assembleur. De plus, selon le compilateur employ, on naccde plus difficilement, voire pas du tout certaines ressources de bas niveau. Et nayant plus besoin de plonger les mains dans le cambouis, on risque galement de moins approfondir ltude du microcontrleur utilis. Un dernier point : les compilateurs C sont souvent payants. En contrepartie, il y a de sacrs avantages : connatre la programmation en C permet de crer des programmes sur de multiples plateformes, commencer par les PC. Autrement dit, les connaissances utilises sont en grande partie rutilisables. Le C est un langage de haut niveau , compar lassembleur, qui permet dcrire des programmes nettement plus intelligibles et donc plus faciles relire et corriger ou modifier. Le compilateur contrle la cohrence du code au moment de la compilation et signale bon nombre derreurs, qui seront autant de bogues en moins corriger. Le compilateur prend en charge la gestion dun certain nombre de mcanismes fastidieux : par exemple, pas besoin de spcifier la page mmoire dans laquelle on veut crire, le compilateur sen charge ! De plus, certains compilateurs permettent tout de mme daccder des ressources de bas niveau, voir mme dinsrer dans le code des portions dassembleur. A vrai dire, moins dtre un pro de lassembleur, vous pourrez certainement crer avec un bon compilateur C un code plus propre et plus robuste, en nettement moins de temps. Et, cerise sur le gteau, le portage dun de vos programmes sur un nouveau microcontrleur sera nettement simplifi. Pour bien fixer les ides sur la diffrence de niveau de langage entre assembleur et C, je vais donner un exemple. Soit dcrire une action simple : ouvrir la fentre de la pice dans laquelle vous tes actuellement. En assembleur a donnerait :

    - soulever pied droit - avancer pied droit - poser pied droit - soulever pied gauche - avancer pied gauche - poser pied gauche - soulever pied droit - avancer pied droit - . - Slectionner bras gauche - Soulever bras - Avancer bras - Prendre poigne fentre dans main gauche - Tourner poigne de -90 - Tirer poigne - Etc.

    En C ce serait plutt :

    - Ouvrir la fentre Et cest le compilateur qui se chargerait de traduire la fonction ouvrir la fentre en instructions lmentaires comprhensibles par le microcontrleur. Alors, merci qui ? Merci le C !

  • - 5 -

    Choix du compilateur Il y a sur le march plusieurs compilateurs C. Le microcontrleur tudi ici tant un PIC Microchip, la solution la plus vidente consiste voir ce que propose Microchip : Si on nous propose bien des compilateurs, ceux-ci sont payants et ne couvrent que le haut de la gamme des PIC, ce qui est un peu luxueux pour un amateur dsirant sinitier lutilisation de ces petites btes. Dautres diteurs proposent galement des compilateurs dont certains sont trs complets, livrs avec des bibliothques simplifiant lutilisation des priphriques du PIC. Malheureusement, ici encore cest assez cher, jusqu plusieurs centaines deuros pour un environnement de dveloppement intgr couvrant lessentiel de la gamme des PIC. Heureusement il existe des alternatives moins onreuses. Par exemple, en cherchant bien sur internet on peut dnicher des compilateurs freeware en ligne de commande. Mon choix sest port sur le compilateur BoostC de la socit SourceBoost, pour les raisons suivantes : Il existe une version gratuite avec quelques limitations mineures (taille du code gnr) permettant de se faire la main et de crer des applications personnelles, les versions payantes ( des tarifs trs raisonnables) permettent de crer des applications commerciales et davoir accs au code source des bibliothques. BoostC est livr avec un environnement de dveloppement intgr facilitant le dveloppement dapplications. Le langage est du C ANSI , avec toutefois quelques extensions destines tirer pleinement parti de toutes les spcificits des microcontrleurs PIC. Et surtout, BoostC reste assez proche du matriel : on peut trs facilement accder tous les bits dun registre quelquonque. On peut faire lessentiel de ce quil est possible de faire en assembleur, avec les contraintes en moins. Ce qui sous-entend nanmoins de sintresser dassez prs la structure du PIC et de des diffrents sous-ensembles. A noter que SourceBoost propose galement un compilateur C++ pour PIC, ainsi quun compilateur Basic. http://www.sourceboost.com

  • - 6 -

    Choix dun PIC : le 16F877 Pour apprendre, la meilleurs solution est de se faire la main sur du concret. On va donc tudier un vrai microcontrleur, sachant que ce qui aura t vu sera assez facilement transposable dautres PIC. Le 16F877 est un PIC de la srie Mid-range qui se prte particulirement bien la programmation en C. Les PIC de la srie infrieure sont un peu justes en performance et en capacit mmoire pour accueillir un programme issu dun compilateur C ; mieux vaut les programmer en assembleur. Les gammes suprieures (16 ou 32 bits) supportent sans problme la programmation en C, mais comme se sont des circuits plus complexes (et plus chers), commenons par quelque chose de plus simple et de plus didactique. Le 16F877 (F comme Flash ) convient parfaitement : mmoire programme de taille suffisante (8K), nombreux priphriques intgrs, frquence de fonctionnement jusqu 20 MHz. Tout ce quil faut pour crer des applications sympa en samusant !

  • - 7 -

    Choix du programmateur Une fois le programme cr, il faudra le transfrer dans la mmoire programme du PIC. Pour cela, il existe plusieurs solutions : Vous pouvez construire votre propre programmateur. De nombreuses variantes existent, il suffit de faire une recherche sur le net pour sen rendre compte. Ces programmateurs se raccordent sur un port srie RS232 ou parallle. A vrai dire la majorit des circuits ont un air de famille. Pas sr nanmoins que tous fonctionnent. Si vous vous engagez dans cette voie, un des design les plus rigoureux est certainement celui propos par Microchip dans une de ses Application Note ( voir sur le site de Microchip). Vous pouvez aussi acheter un programmateur tout fait, en tat de marche. Il en existe pour port srie, parallle et, USB ! Sachant que les ports srie RS232 et parallle tendent disparatre au profit de lUSB, cette dernire option, bien que souvent un peu plus onreuse semble tre un bon choix. Il existe en outre des outils permettant la fois de programmer le microcontrleur, mais aussi de le dboguer en temps rel et tout a avec le microcontrleur en place dans son circuit dapplication (voir les outils proposs par Microchip ce sujet). Enfin, il y a la solution du programmateur en kit. Aprs mtre lanc dans un premier temps dans la ralisation dun programmateur home made (dcrit dans un livre fort onreux) qui na jamais daign fonctionner, je me suis tourn vers cette dernire solution : Un programmateur en kit Velleman K8076 pour une quarantaine deuros (c'est--dire moins cher que le prix des composants de celui que jai vainement tent de raliser moi-mme), quip dun support ZIF (Zro Insertion Force). Il permet en outre la programmation in-circuit , et est livr avec un logiciel de transfert compatible avec lessentiel de la gamme des PIC. Des mises jour tant disponibles sur le site de Velleman pour les circuits les plus rcents. Il faut procder au montage soi-mme, mais a marche du premier coup ! (du moins si vous tes rigoureux au moment du montage). Le seul inconvnient : il sagit ici dun programmateur raccorder sur port RS232, donc impossible raccorder sur un pc portable rcent. Un jour ou lautre il faudra bien passer par lUSB http://www.velleman.be

  • - 8 -

    Structure du PIC 16F877

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

    Le schma ci-dessus reprsente les diffrents modules du PIC 16F877. Ca a lair un peu complexe au premier abord, une visite guide nous permettra dy voir plus clair.

  • - 9 -

    Le cur du PIC : le microprocesseur

    Un microcontrleur, cest avant tout un microprocesseur, une unit de traitement logique qui effectue lune aprs lautre les oprations contenues dans un microprogramme stock en mmoire (la mmoire FLASH). On peut le voir sur le schma (en jaune ci-dessous), il est essentiellement compos de l ALU (Unit Arithmtique et Logique) qui effectue les oprations sur les donns, le registre de travail W reg. , le multiplexeur MUX , le registre de statut status reg , le registre FSR reg utilis pour ladressage indirect (en assembleur), le multiplexeur dadresse Addr mux , le compteur programme Program Counter qui pointe les instructions excuter, la pile 8 niveaux 8 level Stack , le registre dinstruction Instruction reg , ainsi que les diffrents bus qui relient tous ces lments entre eux.

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 10 -

    On nentrera pas ici dans les dtails du fonctionnement dun microprocesseur ; cest trs intressant connatre, indispensable mme si on programme en assembleur. Mais en ce qui nous concerne, on veut programmer en C, et cest donc le compilateur qui se chargera de traduire notre code source en instructions de bas-niveau pour le microprocesseur contenu dans le PIC. Cest l le principal avantage de la programmation en C : on prend du recul par rapport au fonctionnement intime du systme. On se concentre davantage sur ce que fait le programme que sur comment fonctionne le programme . On va tout de mme jeter un petit coup dil sur le schma ci-dessus, histoire de comprendre quelques particularits du PIC, droutantes au premier abord. On saperoit que les bus autour de lALU ont un format de 8 bits : le PIC 16F877 travaille sur des donnes de 8 bits, cest donc bien un microcontrleur 8 bits ! (logique). Pourquoi donc ce cas le Program Bus est-il, lui, large de 14 bits ? Cest simple, certaines instructions peuvent tre codes sur plus de 8 bits. Si ce bus ntait large que de 8 bits, il faudrait plus dun cycle dhorloge pour transmettre ces instructions, alors quavec un bus plus large, a passe en une fois. De plus, la mmoire programme, indpendante du bus de donnes, est elle-mme adresse avec un bus large : le Program Counter , qui pointe sur linstruction en cours, une largeur de 13 bits. Et avec 13 bits on peut coder environ 8000 adresses. Autrement dit, on 8000 cases de mmoire programme pouvant contenir chacune 1 instruction complte. Cette architecture avec bus de donnes et de programme spars (architecture Harvard ) permet donc doptimiser le fonctionnement du PIC. La plupart du temps, votre PIC excute une instruction et charge la suivante simultanment en un seul cycle dhorloge. En comparaison, un microcontrleur 8 bits construit selon larchitecture concurrente Von Neumann (mmoire programme et donnes relis au microprocesseur par un unique bus 8 bits) devra faire plusieurs cycles pour chercher les instructions en mmoire (en plusieurs fois si cest une instruction longues) et les excuter ensuite. En consquence, frquence dhorloge gales, un microprocesseur Harvard sera plus rapide quun Von Neumann .

  • - 11 -

    La mmoire

    Sur le PIC, il ny a pas une mais trois mmoires :

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

    La Mmoire Programme, de type FLASH sur le 16F877. Capacit : 8K. Cest dans celle-ci quest stock le programme du PIC. Aprs compilation de votre code, le compilateur gnre un fichier .hex , une suite de codes hexadcimaux. Celui-ci est transfr ensuite dans la mmoire programme du PIC laide du programmateur. Cette mmoire nest pas relie au bus de donnes (DATA Bus), sa vocation est de stocker le programme du PIC, mais PAS les variables de votre programme. Le gros avantage de la mmoire FLASH cest que vous pouvez la rcrire, donc implanter un nouveau programme dans le PIC. Les PIC existent galement avec dautres versions de mmoire programme (non-FLASH), certaines ne pouvant tre programme quune seule fois.

  • - 12 -

    La Mmoire RAM, qui fait partie de la zone dadressage des donnes. Elle comprend tous les registres spciaux permettant de contrler le cur du PIC ainsi que ses priphriques. Elle contient galement des cases mmoires usage gnrique dans lesquelles pourront tre stockes les variables de nos futurs programmes. La Mmoire EEPROM. LEEPROM est plutt une mmoire de stockage de donnes long terme, alors que la RAM est utilise pour les variables du programme. Sur le PIC 16F877, on a 256 octets dEEPROM disponible. Les mmoires de type EEPROM sont limites en nombre de cycles deffacement / criture. Ce nombre de cycle est tout de mme de lordre du million pour le PIC, mais si on lutilisait pour stocker des variables modifies plusieurs milliers de fois par secondes, cette limite pourrais tre atteinte plus vite quon ne le crot. Par contre, pour stocker toute les heures une mesure de temprature, cest tout bon !

  • - 13 -

    La Pile et le Compteur Programme

    On les a dj voqus dans le paragraphe le cur du PIC : le microprocesseur , mais puisquon vient de parler de la mmoire, une petite remarque simpose.

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 14 -

    Le Program Counter ou PC est le compteur qui pointe dans la mmoire programme la prochaine instruction excuter. Il est li la pile systme (Pile = Stack en anglais) qui est sur le PIC 16F877 une pile 8 niveaux. Quest ce que cela signifie ? Simplement quon peut avoir jusqu' 8 niveaux dimbrication dappels de sous-programme ou fonctions. Ce point est surtout critique pour la programmation en assembleur : un sous-programme peut appeler un autre sous-programme qui appelle son tour un autre sous-programme jusqu une profondeur de 8. Au-del, cest la cata : votre programme est bugg et va faire nimporte quoi, tant donn que le PIC ne peut dpiler que 8 niveaux. Le Compteur Programme narrivera pas revenir la racine des appels. La programmation en C apporte l un peu de souplesse : un bon compilateur veillera pour vous ce que la limite de 8 niveaux ne soit pas dpasse, quitte recopier localement une fonction pour viter un saut ladresse mmoire o cette fonction est dj prsente. Au dtriment donc de loccupation en mmoire. Ainsi, mieux vaut-il viter de crer trop de niveaux dimbrication dappels de fonctions dans nos programmes.

  • - 15 -

    Les Ports dEntres/Sorties gnraux : PORTA, PORTB, PORTC, PORTD, PORTE

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 16 -

    Le PIC 16F877 est gnreusement dot de 5 ports, ce qui est plutt confortable. Un examen plus attentif du schma ci-dessus nous montre cependant que les lignes dentres/sorties (les pattes du composant) correspondantes sont galement utilises par dautres modules du PIC. Ainsi, les pattes du PORTA servent galement au convertisseur Analogique/Numrique, les pattes du PORTD au Port Parallle Esclave, etc. Il faudra faire des choix au moment de la conception du schma lectronique ! On voit galement que les ports B, C et D ont 8 lignes dentre/sortie, alors que le port A nen a que 6 et le port E que 3. Ils sont tous connects au bus de donne (DATA BUS), on pourra donc librement les adresser pour y lire ou crire des donnes, et donc allumer des LED, commander des moteurs pas pas, des afficheurs LCD, lire les donnes envoyes par un clavier ou un bouton poussoir On peut configurer les entres/sorties de chaque port en entre ou en sortie, grce un registre spcial ddi chaque port. De plus, un des ports (le port B) possde des rsistances de pull-up internes qui peuvent tres valides ou non par logiciel.

  • - 17 -

    Le Port Parallle Esclave (PSP : Parallel Slave Port)

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

    Le Port Parallle Esclave est un port 8 bits permettant dinterfacer le PIC avec, par exemple, un autre microprocesseur. Les donnes transitent via les lignes PSP0 PSP7, qui physiquement utilisent les mmes broches que le PORTD. Le flux de donnes est contrl par les lignes RD, WR et CS qui correspondent aux broches du PORTE. Cest le microprocesseur externe qui est le chef dorchestre : il valide notre PIC par la ligne CS (Chip Select), et indique au PIC sil lit ou crit grce aux lignes RD (Read) et WR (Write). Do lappellation de port parallle ESCLAVE. Esclave, puisque cest le microprocesseur externe qui donne les ordres, notre PIC ne fait quexcuter.

  • - 18 -

    Le circuit de gnration dhorloge

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

    Pour faire battre le cur de notre PIC, on a besoin dun circuit de gnration dhorloge. Avec les PIC Mid Range , plusieurs options possibles : circuit RC (rsistance + condensateur), ou circuit rsonateur cramique, ou oscillateur quartz... Le mode de fonctionnement est dtermin au moment de la programmation du PIC par des bits de configuration qui sont en fait des emplacements de mmoire non-volatile. Pour gnrer un cycle dinstruction , il faut 4 cycles dhorloge. Autrement dit, si votre quartz bat 20 MHz, les instructions du programme sexcutent une cadence de 5 MHz.

  • - 19 -

    Le TIMER0

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

    Dans le pass, le Timer0 sappelait RTCC. Cest un compteur 8 bits (0 255) simple, qui compte des impulsions soit internes, soit dune source externe. On peut par ailleurs lui appliquer une pr-division programmable entre 1 et 256. On peut librement lire ou crire dans le registre de comptage associ. On peut donc le pr charger avec une valeur, partir de laquelle il comptera jusqu atteindre 255. Une fois le registre de comptage plein, il peut gnrer une interruption. tant donn quune fois configur il fonctionne quasi-indpendamment du microprocesseur, on pourra sen servir comme base de temps.

  • - 20 -

    Le TIMER1

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 21 -

    Le Timer1 fonctionne sur le mme principe que le Timer0, mais avec un registre de comptage plus gros : 16 bits au lieu de 8, ce qui tend notablement ces capacits de comptage. De plus, il possde un mode de fonctionnement particulier : on peut lutiliser en association avec un des modules CCP (modules de capture et de comparaison, voir plus loin). Voyons rapidement le mode capture : lorsquun vnement survient sur lentre du module CCP, la valeur du Timer1 est lue. Comme on connat la frquence de comptage, on peut en quelque sorte chronomtrer la survenue dun vnement. Exemple : si lentre du module CCP est relie un capteur qui dlivre une impulsion chaque tour de larbre dun moteur, la valeur contenue dans le registre du Timer1 au moment de limpulsion est le reflet de la vitesse de rotation. Voyons maintenant le mode comparaison : Le Timer1 compte en continu, et une interruption est gnre chaque fois que la valeur du compteur est gale celle quon aura pr charge dans le registre de comparaison. On peut sen servir pour, par exemple, gnrer un signal carr.

  • - 22 -

    Le TIMER2

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

    Le Timer2 a un fonctionnement diffrent des Timer0 et Timer1. Cest un compteur 8 bits avec pr-diviseur et post-diviseur. On sen sert pour gnrer des signaux carrs, ou, en association avec le module CCP, des signaux PWM. PWM tant lacronyme de Pulse Width Modulation ou, en franais, Modulation de Largeur dImpulsion (MLI).

  • - 23 -

    Les modules CCP1 et CCP2

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 24 -

    On en a parl au moment de voir les Timer1 et Timer2 ; on a deux modules CCP sur le PIC. CCP pour Capture, Compare, PWM . En association avec les deux timers, ils vont nous permettre de gnrer des signaux modulation de largeur dimpulsion (PWM) pour, par exemple, faire varier la vitesse dun moteur courant continu, rguler le courant (et donc la luminosit) dans une ampoule Ils vont galement nous permettre de comparer loccurrence dun signal en entre avec la valeur du compteur Timer1, ralisant ainsi un chronomtrage de lvnement en question (par exemple : indication de la frquence de rotation dun moteur). Ils vont encore nous permettre de gnrer des signaux carrs, et cela de manire quasi-indpendante du reste du microcontrleur qui pourra continuer vaquer ses occupations.

  • - 25 -

    Le convertisseur Analogique Digital 10bits :

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 26 -

    Le convertisseur A/D convertit le signal analogique prsent sur une de ses 8 entres en son quivalent numrique, cod sur 10 bits. Les pattes AN2 et AN3 peuvent tre utilises comme rfrences de tension ou comme entres analogiques standard, les rfrences de tension tant dans ce dernier cas prises sur les tensions dalimentations du PIC : VDD et VSS. (VDD pour le + et VSS pour le -). On peut donc numriser jusqu 8 signaux analogiques. Pas tous en mme temps, bien sr, tant donn quil ny a quun seul module de conversion pour 8 signaux dentre multiplexs. Mais si vos signaux nvoluent pas trop vite (frquence basse), vous pouvez numriser le signal sur la patte AN0, puis celui sur AN1 Les paramtres important dont il faudra tenir compte sont :

    La rsolution du convertisseur. Ici 10 bits, donc meilleur quun convertisseur 8 bits, mais moins prcis quun 12 bits

    Le temps de conversion. La rapidit dvolution des signaux prsents sur les entres (leur frquence

    pour des signaux priodiques). Le nombre de signaux numriser.

    En effet, pour un signal priodique, la frquence dchantillonnage doit tre au moins deux fois suprieure la frquence du signal ; mais a tout le monde le sait dj, non ?

  • - 27 -

    LUSART

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 28 -

    LUSART ou Universal Synchronous Asynchronous Receiver Transmitter est lun des deux modules de communication srie du PIC ou SCI en anglais (Serial Communication Interface). Comme son nom lindique, elle peut tablir une liaison synchrone ou asynchrone, recevoir et transmettre des donnes, selon la manire dont elle est configure. Cest son ct je peux tout faire qui lui vaut lattribut Universal . Concrtement, lUSART permet de communiquer avec le reste du monde : un ordinateur ou tout autre matriel quip dune interface srie RS232, des circuits intgrs convertisseurs Numrique/Analogique ou Analogique/Numrique, des EEPROMs srie LUSART peut tre configure selon 3 modes :

    Asynchrone (Full Duplex) Synchrone Matre (Half Duplex) Synchrone Esclave (Half Duplex)

  • - 29 -

    Le SSP, Synchronous Serial Port

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 30 -

    Le module SSP est la deuxime interface de communication srie du PIC. En fait, il sagit dun port Matre, donc lappellation exacte est plutt MSSP pour Master Synchronous Serial Port . Il est utile pour communiquer avec dautres modules ou microcontrleurs, des EEPROMs sries, des registres dcalage, des afficheurs, des convertisseurs A/N ou N/A Il peut fonctionner dans deux modes de communication :

    Le mode SPI (Serial Peripheral Interface) Le mode IC (Inter-Integrated Circuit)

    Lutilisation de lun de ces deux modules de communication, USART ou MSSP dpend donc essentiellement du protocole de communication ncessaire. Schmatiquement, lUSART est bien adapte pour communiquer avec le reste de lunivers via la clbre interface RS232 alors que le MSSP permet de communiquer aisment avec dautres composants lectroniques interface srie. Une dernire remarque par rapport aux interfaces de communication : certains PIC (mais pas le 16F877) intgrent une interface USB ou un module de communication Ethernet.

  • - 31 -

    La logique de RESET

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 32 -

    La logique de reset comprend plusieurs modules :

    Le POWER-UP TIMER : cest une temporisation au dmarrage. Lors dun dmarrage ou redmarrage suite un reset, cette temporisation permet la tension dalimentation VDD datteindre une valeur suffisante et stable. On vite ainsi au PIC de subir les invitables phnomnes transitoires la mise sous tension. Cette temporisation fonctionne avec son propre circuit RC interne.

    LOSCILLATOR START UP TIMER : une fois la temporisation du Power-Up Timer coule, cest au tour de lOscillator Start Up Timer de prendre le relais. Il sagit dune temporisation dont le but est de permettre au circuit de loscillateur de dmarrer proprement. En effet, de la mme manire que la tension dalimentation met un certain temps se stabiliser, loscillateur a besoin de temps pour dmarrer et se stabiliser

    Le POWER-ON RESET : la mise sous tension, lorsque VDD est dtect, ce module gnre une impulsion de reset, ce qui lance le Power-Up Timer et remet un certain nombre de registre du PIC dans un tat dtermin. Habituellement on utilise un circuit externe rsistance / condensateur pour gnrer ce pulse de reset. Mais sur le PIC, condition que lapparition de la tension dalimentation soit assez nergique vous pouvez vous passer de ce circuit RC. On ramne juste la tension dalimentation travers une

    rsistance approprie sur la patte MCLR (Memory CLeaR).

    Le BROWN-OUT RESET : ce module surveille la tension dalimentation. Si celle-ci descend en-dessous dune valeur minimum pour laquelle le fonctionnement correct du PIC ne peut plus tre assur, le module Brown-Out Reset redmarre (reset) le PIC.

    Le WATCHDOG TIMER : Cest le Chien de garde (watchdog en anglais) du PIC. Sil est utilis, ce timer doit tre priodiquement remis zro par le programme, car, sil dborde , il place le PIC en mode Reset. Ainsi, en cas de plantage de votre programme le PIC est redmarr automatiquement.

  • - 33 -

    LIn-Circuit Debugger

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

    Ce module permet de simplifier la phase de dbogage des programmes. Une fois activ, il donne accs des fonctionnalits avances de dbogage. Celles-ci sont exploites par le module ICD de MPLAB, lenvironnement de dveloppement intgr de Microchip. Vous pouvez alors suivre en live lvolution de votre programme entrain de sexcuter sur le PIC, poser des points darrt, lire le contenu des registres, etc.

  • - 34 -

    Low-Voltage Programming et ICSP (In-Circuit Serial Programming)

    Note 1 : High order bits are from the STATUS register

    RA0 / AN0

    RA1 / AN1

    RA2 / AN2 / Vref-

    RA3 / AN3 / Vref+

    RA4 / T0CKl

    RB0 / INT

    RB1

    RB2

    RB3 / PGM

    RB4

    RB5

    RB6 / PGC

    RB7 / PGD

    RC0 / T1OSO / T1CKL

    RC1 / T1OSI / CCP2

    RC2 / CCP1

    RC3 / SCK / SCL

    RC4 / SDI / SDA

    RC5 / SD0

    RC6 / TX / CK

    RC7 / RX / DT

    RD0 / PSP0

    RD1 / PSP1

    RD2 / PSP2

    RD3 / PSP3

    RD4 / PSP4

    RD5 / PSP5

    RD6 / PSP6

    RD7 / PSP7

    RA5 / AN4 / SS

    RE0 / AN5 / RD

    RE1 / AN6 / WR

    RE2 / AN7 / CS

    Timer0 Timer1 Timer2 10-bit A/D

    Data EEPROM CCP1,2Synchronous

    Serial PortUSART

    Parallel Slave Port

    PORTA

    PORTB

    PORTC

    PORTD

    PORTE

    FLASH

    ProgramMemory

    Program Counter

    8 Level Stack( 13-bit )

    RAMFile

    Registers

    Addr MUX

    FSR reg

    STATUS reg

    MUX

    ALU

    W reg

    Power-upTimer

    OscillatorStart-up Timer

    Power-onReset

    WatchdogTimer

    Brown-outReset

    In-CircuitDebugger

    Low-VoltageProgramming

    InstructionDecode &Control

    Timing Generation

    ProgramBus 9

    8

    3

    8

    813 DATA Bus

    Direct Addr IndirectAddr

    OSC1 / CLKINOSC2 / CLKOUT

    MCLR VDD, Vss

    RAM Addr (1)

    Instruction reg

    14

    8

    7

  • - 35 -

    A quoi peut bien servir ce module Low-Voltage Programming ? Tout dabord, voyons comment le PIC est programm habituellement. Contrairement des modles de microcontrleurs plus anciens qui taient programms en parallle (les octets taient transfrs dans la mmoire programme sur 8 lignes), les modles rcents de PIC se programment en srie. C'est--dire que les octets sont transmis bits aprs bits sur un nombre restreint de lignes. Le grand avantage cest quon peut, moyennant certaines prcautions, programmer le PIC alors quil est dj implant sur le circuit imprim de son application ! Pas besoin de le retirer de son support chaque fois (en risquant de tordre des pattes) pour le placer sur le programmateur. Cest ce quon appelle lICSP : In-Circuit Serial Programming, ou autrement dit, en franais, Programmation Srie En Circuit. On programme le PIC dj implant, en mode de transfert srie. Comment se passe la programmation ICSP ?

    - On alimente le PIC avec sa tension de programmation, gnralement 13V - On utilise pour transfrer le programme les lignes RB6 (qui devient

    lhorloge cadenant le transfert) et RB7 (pour transfrer les donnes en criture ou lecture).

    On donc besoin dune tension de programmation, plus leve que la tension dalimentation normale. Cest pour le cas standard, mais grce au module Low Voltage Programming , il y a moyen de faire la mme chose en ayant pas besoin de la tension de programmation. Il y a galement un autre moyen de programmer notre PIC : lutilisation dun Boot loader. Quest-ce donc ? Un boot loader (traduction littrale : chausse-pied ) est un petit bout de programme que lon implante dans la mmoire du PIC et qui va charger le programme que vous voulez implanter dans la mmoire du PIC. Ici, plus besoin de programmateur. Si votre PIC est quip dune interface srie, ou USB, ou autre, vous pouvez transfrer le programme via cette interface. Cest le boot loader, en coordination avec le logiciel ad hoc sur votre ordinateur, qui va se charger du transfert et de lcriture en mmoire programme. Le boot loader reste ensuite inactif dans la mmoire du PIC pendant que votre programme sexcute normalement. Au prochain dmarrage du PIC, si le boot loader dtecte une nouvelle tentative de transfert de programme sur linterface slectionne (srie, USB,) il le charge et remplace lactuel. Sinon il passe la main au programme actuel. Ce mcanisme est surtout trs pratique dans les phases de prototypage o de nombreux transferts son ncessaires, dautant plus que la vitesse de transmission des donnes est beaucoup plus rapide quavec un programmateur. Ici encore, la programmation se fait sur un mode srie, mais comme on ne passe pas par un programmateur on pas accs la tension de programmation. Lutilisation du module Low Voltage Programming prends ici tout son sens.

  • - 36 -

    Les Bits de Configuration

    Pour customiser notre PIC, il existe ce que lon appelle les bits de configuration. Ce sont des bits spciaux de la mmoire programme qui permettent de spcifier le mode de fonctionnement dun certain nombre de fonctionnalit du PIC. savoir :

    - Loscillateur : utilisation dun quartz ou dun circuit RC, plage de frquence - Utilisation ou nom du Watchdog

    - Utilisation de la patte MCLR ou non

    - Validation ou non du Power-Up Timer - Validation ou non du Brown-Out Reset - Protection de la mmoire programme et de la mmoire EEPROM

    Ces bits sont programms au moment du transfert du programme dans le PIC.

    Les Interruptions

    Un certain nombre dvnements sont susceptible de gnrer des interruptions : fin de conversion de signal analogique, criture en mmoire EEPROM termine, dbordement de Timer, USART, SSP, changement dtat dune entre de port. Si votre programme comprend une routine de gestion de cette interruption, le droulement normal sinterrompt et la routine de gestion de linterruption est excute. Le gros avantage de ce mcanisme, cest que le microcontrleur peut vaquer ses occupations sans tre oblig de scruter en permanence si telle ou telle action a eu lieu. Par exemple, si un clavier est raccord au PIC, pas besoin de surveiller en permanence si une touche a t active. Si cest le cas, le changement dtat sur le port gnrera une interruption. Le PIC sera ainsi mis au courant quun changement a eu lieu et excutera les actions adquates. Cest un peu comme lalarme sonore de votre micro-onde : celui-ci vous signale par un BiiiP que le temps de cuisson est coul, pas besoin de rester les yeux rivs sur la vitre avec un chronomtre en main.

  • - 37 -

    Le mode SLEEP

    Le mode Sleep est un mode de fonctionnement particulier du PIC dans lequel celui-ci rduit sa consommation lectrique au minimum. Il est presque entirement dsactiv, son oscillateur est teint. Le PIC est en mode veille ! Pour sortir de cette torpeur, il faut un des vnements suivant :

    - Reset du circuit, ou - Rveil par le Watch-Dog Timer (ci celui-ci est activ, il continue de

    fonctionner en mode SLEEP) - Interruption gnre par un module priphrique (Timer, convertisseur

    A/D, changement dtat de port, SSP.) Ce mode peut tre particulirement intressant pour une application fonctionnant sur pile ou batterie et qui ne requiert le fonctionnement du microprocesseur qu la survenue dvnements particuliers. On prolonge ainsi considrablement lautonomie.

  • - 38 -

    Brochage du PIC16F877

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    40

    39

    38

    37

    36

    35

    34

    33

    32

    31

    30

    29

    28

    27

    26

    25

    24

    23

    22

    21

    PIC

    16F

    87

    7

    RA0/AN0

    RA1/AN1

    RA2/AN2/VRef-

    RA3/AN3/VRef+

    RA4/T0CKI

    VDD

    VSS

    OSC1/CLKIN

    OSC2/CLKOUT

    RC0/T1OSO/T1CKI

    RC1/T1OSI/CCP2

    RC2/CCP1

    RC3/SCK/SCL

    RD0/PSP0

    RD1/PSP1

    MCLR/Vpp

    RA5/AN4/SS

    RE0/RD/AN5

    RE1/WR/AN6

    RE2/CS/AN7

    RB6/PGC

    RB5

    RB4

    RB3/PGM

    RB2

    RD7/PSP7

    RD6/PSP6

    RD5/PSP5

    RD4/PSP4

    RC7/RX/DT

    RC6/TX/CK

    RC5/SDO

    RC4/SDI/SDA

    RD3/PSP3

    RD2/PSP2

    RB7/PGD

    RB1

    RB0/INT

    VDD

    VSS

    Conclusion Ainsi sachve notre survol du PIC 16F877. Vous savez maintenant ce qui se cache dans la bote, et avec quels outils nous allons le programmer. Notre prochain objectif sera de le faire fonctionner. On pourra passer ensuite ltude un peu plus dtaille des diffrents priphriques.