You are on page 1of 39

Programmation des PIC en C

Microcontrôleur facile pour électronicien amateur
PARTIE 1

Noxyben
2007

-1-

WWW.MarocEtude.Com    -­‐-­‐-­‐à  PORTAIL  DE  LA  FORMATION  PROFESSIONNELLE    
                                                                                                                                                                           AU  MAROC  

Télécharger des livres gratuitement sur notre site, en accédant à la
rubrique : LIVRES
 
 

 
 
 
Vous trouverez aussi sur notre site :
- Modules, Cours, Exercices à télécharger gratuitement.
- Documents Techniques dédies à la formation professionnelle : Génie Electrique,
Génie Mécanique. Génie Informatique, Génie Industriel, Génie Climatique…

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

Introduction ................................................................................................................................ 3
Intérêt de la programmation en langage C ................................................................................. 4
Choix du compilateur ................................................................................................................. 5
Choix d’un PIC : le 16F877 ....................................................................................................... 6
Choix du programmateur ........................................................................................................... 7
Structure du PIC 16F877............................................................................................................ 8
Le cœur du PIC : le microprocesseur ..................................................................................... 9
La mémoire .......................................................................................................................... 11
La Pile et le Compteur Programme ...................................................................................... 13
Les Ports d’Entrées/Sorties généraux : PORTA, PORTB, PORTC, PORTD, PORTE....... 15
Le Port Parallèle Esclave (PSP : Parallel Slave Port) .......................................................... 17
Le circuit de génération d’horloge ....................................................................................... 18
Le TIMER0 .......................................................................................................................... 19
Le TIMER1 .......................................................................................................................... 20
Le TIMER2 .......................................................................................................................... 22
Les modules CCP1 et CCP2................................................................................................. 23
Le convertisseur Analogique – Digital 10bits :.................................................................... 25
L’USART ............................................................................................................................. 27
Le SSP, Synchronous Serial Port ......................................................................................... 29
La logique de RESET........................................................................................................... 31
L’In-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

-2-

brosse à dent électrique… L’offre en microcontrôleurs s’est développée d’autant : plus de périphériques intégrés. Et pour éviter la frustration du « je saurais utiliser un microcontrôleur PIC. c’est à mon avis une formidable opportunité de sauter dans le train de l’électronique numérique et d’apprivoiser ces étranges petites bêtes. compteurs. On accède alors au moindre bit enfoui dans n’importe quel registre du circuit. l’assembleur n’étant pas un langage très « naturel ». registres à décalage…). Et pourquoi pas un ampli à tubes piloté par microcontrôleur ? Les capacités étonnantes de ces circuits vous ouvrent un espace de créativité infini. De plus. C’est un investissement intéressant pour un professionnel qui cherche à produire un code optimisé sur la puce la moins chère possible. Vous pouvez commencer par exemple par lire la documentation de Microchip sur la gamme de PIC « mid-range ». mais pénible pour un amateur qui ne dispose que de relativement peu de temps pris sur ses loisirs. à la puce spécialisée dédiée par exemple. On en trouve maintenant partout : automobile. très rapidement. Heureusement. La voie royale pour tirer le maximum des performances de ces circuits est toujours la programmation en assembleur. rasoir. Ce serait vraiment dommage de se passer de leurs services… Une fois la décision prise « je vais me lancer dans les micros ! » se pose la question du comment. la difficulté serait plutôt de les trier. possédant chacun plusieurs gammes allant du circuit « généraliste ». plus de mémoire embarquée. à la régulation de vitesse d’un moteur de ventilateur. créer de véritables petits circuits. On trouve sur internet toutes les informations nécessaires.Introduction Dans un passé pas très lointain. véritable couteau suisse électronique. L’usage des microprocesseurs était plutôt réservé à un public averti d’ingénieurs sachant les interfacer avec différents circuits périphériques (eprom. avec la montée en puissance des microcontrôleurs. l’électronique pour les amateurs (éclairés) se résumait essentiellement aux circuits analogiques et éventuellement en logique câblée (portes logiques. Au fil du temps on a vu apparaître de nouveaux circuits regroupant dans une seule puce le microprocesseur et ses circuits périphériques : les microcontrôleurs. il existe des différences qui obligent à réapprendre tout ou partie du langage lorsque l’on change de microcontrôleur. Cela nécessite néanmoins un investissement en temps conséquent. mais avant je dois me taper un bouquin de 1000 pages » je vais tâcher d’utiliser une approche progressive permettant de. capacité de calcul accrue. voire d’un circuit à l’autre dans la même gamme. c’est une excellente idée. Il y a maintenant de nombreux fabricants de microcontrôleurs. ram…) et programmer en assembleur. mais ça va vous prendre du temps (plus de 800 pages !) Dans le but de vous simplifier la tâche. lave-vaisselle. Pour tous ceux qui se sont retrouvé largué sur le bord du chemin à cause de ces  de microcontrôleurs. on voit apparaître actuellement des compilateurs en langage C (voire même C++) qui permettent de gagner un temps considérable pour le développement et le débogage des programmes. je vais essayer dans le présent ouvrage de synthétiser quelque peu ces informations. d’un constructeur à l’autre. -3- .

on n’accède plus difficilement. Soit à décrire une action simple : ouvrir la fenêtre de la pièce dans laquelle vous êtes actuellement. Et. comparé à l’assembleur. on risque également de moins approfondir l’étude du microcontrôleur utilisé. en nettement moins de temps. Sélectionner bras gauche Soulever bras Avancer bras Prendre poignée fenêtre dans main gauche Tourner poignée de -90° Tirer poignée Etc. les inconvénients : Un compilateur C produit du code plus volumineux et moins performant que ce que sait faire un bon programmeur en assembleur. il y a de sacrés avantages : connaître la programmation en C permet de créer des programmes sur de multiples plateformes. qui permet d’écrire des programmes nettement plus intelligibles et donc plus faciles à relire et corriger ou modifier. cerise sur le gâteau. je vais donner un exemple. pas besoin de spécifier la page mémoire dans laquelle on veut écrire. De plus. Le compilateur prend en charge la gestion d’un certain nombre de mécanismes fastidieux : par exemple. En contrepartie. Et n’ayant plus besoin de plonger les mains dans le cambouis. à moins d’être un « pro » de l’assembleur. merci qui ? Merci le C ! -4- . Le C est un langage de « haut niveau ». Autrement dit. qui seront autant de bogues en moins à corriger. A vrai dire. voire pas du tout à certaines ressources de bas niveau. Le compilateur contrôle la cohérence du code au moment de la compilation et signale bon nombre d’erreurs. Alors. certains compilateurs permettent tout de même d’accéder à des ressources de bas niveau. voir même d’insérer dans le code des portions d’assembleur. Un dernier point : les compilateurs C sont souvent payants.… En C ce serait plutôt : - Ouvrir la fenêtre Et c’est le compilateur qui se chargerait de traduire la fonction « ouvrir la fenêtre » en instructions élémentaires compréhensibles par le microcontrôleur. 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 …. Pour bien fixer les idées sur la différence de niveau de langage entre assembleur et C.Intérêt de la programmation en langage C Tout d’abord. le portage d’un de vos programmes sur un nouveau microcontrôleur sera nettement simplifié. le compilateur s’en charge ! De plus. les connaissances utilisées sont en grande partie réutilisables. selon le compilateur employé. vous pourrez certainement créer avec un bon compilateur C un code plus propre et plus robuste. à commencer par les PC.

ce qui est un peu luxueux pour un amateur désirant s’initier à l’utilisation de ces petites bêtes. en cherchant bien sur internet on peut dénicher des compilateurs freeware en ligne de commande. ainsi qu’un compilateur Basic. les versions payantes (à des tarifs très raisonnables) permettent de créer des applications commerciales et d’avoir accès au code source des bibliothèques. avec toutefois quelques extensions destinées à tirer pleinement parti de toutes les spécificités des microcontrôleurs PIC. Mon choix s’est porté sur le compilateur BoostC de la société SourceBoost. ceux-ci sont payants et ne couvrent que le haut de la gamme des PIC. On peut faire l’essentiel de ce qu’il est possible de faire en assembleur. jusqu’à plusieurs centaines d’euros pour un environnement de développement intégré couvrant l’essentiel de la gamme des PIC. la solution la plus évidente consiste à voir ce que propose Microchip : Si on nous propose bien des compilateurs. avec les contraintes en moins. BoostC reste assez proche du matériel : on peut très facilement accéder à tous les bits d’un registre quelquonque. Ce qui sous-entend néanmoins de s’intéresser d’assez près à la structure du PIC et de des différents sous-ensembles. Malheureusement. Le langage est du C « ANSI ».Choix du compilateur Il y a sur le marché plusieurs compilateurs C. Et surtout. http://www. A noter que SourceBoost propose également un compilateur C++ pour PIC. pour les raisons suivantes : Il existe une version gratuite avec quelques limitations mineures (taille du code généré…) permettant de se faire la main et de créer des applications personnelles. Par exemple. livrés avec des bibliothèques simplifiant l’utilisation des périphériques du PIC.sourceboost. Le microcontrôleur étudié ici étant un PIC Microchip. D’autres éditeurs proposent également des compilateurs dont certains sont très complets.com -5- . BoostC est livré avec un environnement de développement intégré facilitant le développement d’applications. ici encore c’est assez cher. Heureusement il existe des alternatives moins onéreuses.

nombreux périphériques intégrés. sachant que ce qui aura été vu sera assez facilement transposable à d’autres PIC.Choix d’un PIC : le 16F877 Pour apprendre. mieux vaut les programmer en assembleur. la meilleurs solution est de se faire la main sur du concret. Les gammes supérieures (16 ou 32 bits) supportent sans problème la programmation en C. On va donc étudier un vrai microcontrôleur. Le 16F877 est un PIC de la série « Midrange » qui se prête particulièrement bien à la programmation en C. Tout ce qu’il faut pour créer des applications sympa en s’amusant ! -6- . Le 16F877 (F comme « Flash ») convient parfaitement : mémoire programme de taille suffisante (8K). mais comme se sont des circuits plus complexes (et plus chers). Les PIC de la série inférieure sont un peu justes en performance et en capacité mémoire pour accueillir un programme issu d’un compilateur C . commençons par quelque chose de plus simple et de plus didactique. fréquence de fonctionnement jusqu’à 20 MHz.

mais aussi de le déboguer en temps réel et tout ça avec le microcontrôleur en place dans son circuit d’application (voir les outils proposés par Microchip à ce sujet). un des « design » les plus rigoureux est certainement celui proposé par Microchip dans une de ses « Application Note » (à voir sur le site de Microchip). mais ça marche du premier coup ! (du moins si vous êtes rigoureux au moment du montage). Enfin. bien que souvent un peu plus onéreuse semble être un bon choix. Il permet en outre la programmation « in-circuit ». Des mises à jour étant disponibles sur le site de Velleman pour les circuits les plus récents. Ces programmateurs se raccordent sur un port série RS232 ou parallèle.velleman. Si vous vous engagez dans cette voie. Vous pouvez aussi acheter un programmateur tout fait. il faudra le transférer dans la mémoire programme du PIC. De nombreuses variantes existent.Choix du programmateur Une fois le programme créé. parallèle et. Il faut procéder au montage soi-même. Un jour ou l’autre il faudra bien passer par l’USB… http://www. en état de marche. Après m’être lancé dans un premier temps dans la réalisation d’un programmateur « home made » (décrit dans un livre fort onéreux) qui n’a jamais daigné fonctionner. USB ! Sachant que les ports série RS232 et parallèle tendent à disparaître au profit de l’USB. Pas sûr néanmoins que tous fonctionnent. Il en existe pour port série.be -7- . Le seul inconvénient : il s’agit ici d’un programmateur à raccorder sur port RS232. il suffit de faire une recherche sur le net pour s’en rendre compte. Il existe en outre des outils permettant à la fois de programmer le microcontrôleur. cette dernière option. Pour cela. il y a la solution du programmateur en kit. il existe plusieurs solutions : Vous pouvez construire votre propre programmateur. je me suis tourné vers cette dernière solution : Un programmateur en kit Velleman K8076 pour une quarantaine d’euros (c'est-à-dire moins cher que le prix des composants de celui que j’ai vainement tenté de réaliser moi-même). A vrai dire la majorité des circuits ont un air de famille. et est livré avec un logiciel de transfert compatible avec l’essentiel de la gamme des PIC. équipé d’un support ZIF (Zéro Insertion Force). donc impossible à raccorder sur un pc portable récent.

2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register Le schéma ci-dessus représente les différents modules du PIC 16F877. -8- . Ca a l’air un peu complexe au premier abord. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. une visite guidée nous permettra d’y voir plus clair.Structure du PIC 16F877 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Timing Generation OSC1 / CLKIN OSC2 / CLKOUT Oscillator Start-up Timer Power-on Reset MUX ALU 8 Watchdog Timer W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.

le registre d’instruction « Instruction reg ». ». il est essentiellement composé de l’ « ALU » (Unité Arithmétique et Logique) qui effectue les opérations sur les donnés. le registre de travail « W reg. le registre de statut « status reg ». le compteur programme « Program Counter » qui pointe les instructions à exécuter. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. le registre « FSR reg » utilisé pour l’adressage indirect (en assembleur…).2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register -9- . ainsi que les différents bus qui relient tous ces éléments entre eux. une unité de traitement logique qui effectue l’une après l’autre les opérations contenues dans un microprogramme stocké en mémoire (la mémoire FLASH). le multiplexeur « MUX ». On peut le voir sur le schéma (en jaune ci-dessous). le multiplexeur d’adresse « Addr mux ».Le cœur du PIC : le microprocesseur Un microcontrôleur. c’est avant tout un microprocesseur. la pile à 8 niveaux « 8 level Stack ». 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.

Mais en ce qui nous concerne. un microprocesseur « Harvard » sera plus rapide qu’un « Von Neumann ». Et avec 13 bits on peut coder environ 8000 adresses. on veut programmer en C. certaines instructions peuvent être codées sur plus de 8 bits. En conséquence. On se concentre d’avantage sur « ce que fait le programme » que sur « comment fonctionne le programme ». La plupart du temps. il faudrait plus d’un cycle d’horloge pour transmettre ces instructions. votre PIC exécute une instruction et charge la suivante simultanément en un seul cycle d’horloge.10 - . On va tout de même jeter un petit coup d’œil sur le schéma ci-dessus. Autrement dit. Si ce bus n’était large que de 8 bits. on à 8000 cases de mémoire programme pouvant contenir chacune 1 instruction complète. alors qu’avec un bus plus large. On s’aperçoit que les bus autour de l’ALU ont un format de 8 bits : le PIC 16F877 travaille sur des données de 8 bits. qui pointe sur l’instruction en cours. c’est donc bien un microcontrôleur 8 bits ! (logique…). à une largeur de 13 bits. déroutantes au premier abord. large de 14 bits ? C’est simple. De plus. Cette architecture avec bus de données et de programme séparés (architecture « Harvard ») permet donc d’optimiser le fonctionnement du PIC. un microcontrôleur 8 bits construit selon l’architecture concurrente « Von Neumann » (mémoire programme et données reliés au microprocesseur par un unique bus 8 bits) devra faire plusieurs cycles pour chercher les instructions en mémoire (en plusieurs fois si c’est une instruction longues) et les exécuter ensuite. histoire de comprendre quelques particularités du PIC. à fréquence d’horloge égales. indépendante du bus de données. ça passe en une fois. C’est là le principal avantage de la programmation en C : on prend du recul par rapport au fonctionnement intime du système. et c’est donc le compilateur qui se chargera de traduire notre code source en instructions de basniveau pour le microprocesseur contenu dans le PIC. est elle-même adressée avec un bus large : le « Program Counter ».On n’entrera pas ici dans les détails du fonctionnement d’un microprocesseur . indispensable même si on programme en assembleur. c’est très intéressant à connaître. la mémoire programme. Pourquoi donc ce cas le « Program Bus » est-il. . En comparaison. lui.

11 - . Les PIC existent également avec d’autres versions de mémoire programme (non-FLASH). Après compilation de votre code. certaines ne pouvant être programmée qu’une seule fois.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register La Mémoire Programme. une suite de codes hexadécimaux. mais PAS les variables de votre programme.La mémoire Sur le PIC. C’est dans celle-ci qu’est stocké le programme du PIC. il n’y a pas une mais trois mémoires : 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD. de type FLASH sur le 16F877. . sa vocation est de stocker le programme du PIC. donc implanter un nouveau programme dans le PIC. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. Capacité : 8K. Cette mémoire n’est pas reliée au bus de données (DATA Bus).hex ». Le gros avantage de la mémoire FLASH c’est que vous pouvez la réécrire. le compilateur génère un fichier « . Celui-ci est transféré ensuite dans la mémoire programme du PIC à l’aide du programmateur.

La Mémoire RAM. Elle contient également des cases mémoires à usage générique dans lesquelles pourront être stockées les variables de nos futurs programmes. qui fait partie de la zone d’adressage des données. Les mémoires de type EEPROM sont limitées en nombre de cycles d’effacement / écriture.12 - . La Mémoire EEPROM. cette limite pourrais être atteinte plus vite qu’on ne le croît. alors que la RAM est utilisée pour les variables du programme. L’EEPROM est plutôt une mémoire de stockage de données à long terme. Par contre. mais si on l’utilisait pour stocker des variables modifiées plusieurs milliers de fois par secondes. c’est tout bon ! . Elle comprend tous les registres spéciaux permettant de contrôler le cœur du PIC ainsi que ses périphériques. Sur le PIC 16F877. Ce nombre de cycle est tout de même de l’ordre du million pour le PIC. pour stocker toute les heures une mesure de température. on a 256 octets d’EEPROM disponible.

une petite remarque s’impose. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. mais puisqu’on vient de parler de la mémoire.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register .13 - . 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.La Pile et le Compteur Programme On les a déjà évoqués dans le paragraphe « le cœur du PIC : le microprocesseur ».

.Le « Program Counter » ou PC est le compteur qui pointe dans la mémoire programme la prochaine instruction à exécuter. étant donné que le PIC ne peut « dépiler » que 8 niveaux. 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 dépassée. Au détriment donc de l’occupation en mémoire. Qu’est ce que cela signifie ? Simplement qu’on peut avoir jusqu'à 8 niveaux d’imbrication d’appels de sous-programme ou fonctions. Ainsi. quitte à recopier localement une fonction pour éviter un saut à l’adresse mémoire où cette fonction est déjà présente. 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. Il est lié à la pile système (Pile = Stack en anglais) qui est sur le PIC 16F877 une pile 8 niveaux. Au-delà. c’est la cata : votre programme est buggé et va faire n’importe quoi. mieux vaut-il éviter de créer trop de niveaux d’imbrication d’appels de fonctions dans nos programmes. Le Compteur Programme n’arrivera pas à revenir à la racine des appels.14 - .

Les Ports d’Entrées/Sorties généraux : PORTA. PORTE 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD. PORTC.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register . Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. PORTB.15 - . PORTD.

les pattes du PORTA servent également au convertisseur Analogique/Numérique. Il faudra faire des choix au moment de la conception du schéma électronique ! On voit également que les ports B. etc. . commander des moteurs pas à pas. les pattes du PORTD au Port Parallèle Esclave.Le PIC 16F877 est généreusement doté de 5 ports. C et D ont 8 lignes d’entrée/sortie. Ainsi. alors que le port A n’en a que 6 et le port E que 3. et donc allumer des LED. grâce à un registre spécial dédié à chaque port. ce qui est plutôt confortable. lire les données envoyées par un clavier ou un bouton poussoir… On peut configurer les entrées/sorties de chaque port en entrée ou en sortie. on pourra donc librement les adresser pour y lire ou écrire des données. Un examen plus attentif du schéma ci-dessus nous montre cependant que les lignes d’entrées/sorties (les pattes du composant) correspondantes sont également utilisées par d’autres modules du PIC. De plus. Ils sont tous connectés au bus de donnée (DATA BUS).16 - . des afficheurs LCD. un des ports (le port B) possède des résistances de « pull-up » internes qui peuvent êtres validées ou non par logiciel.

Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. par exemple. puisque c’est le microprocesseur externe qui donne les ordres. C’est le microprocesseur externe qui est le chef d’orchestre : il valide notre PIC par la ligne CS (Chip Select). Le flux de données est contrôlé par les lignes RD.17 - . D’où l’appellation de port parallèle ESCLAVE. Esclave. qui physiquement utilisent les mêmes broches que le PORTD. WR et CS qui correspondent aux broches du PORTE.Le Port Parallèle Esclave (PSP : Parallel Slave Port) 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD. et indique au PIC s’il lit ou écrit grâce aux lignes RD (Read) et WR (Write). Les données transitent via les lignes PSP0 à PSP7. . notre PIC ne fait qu’exécuter.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register Le Port Parallèle Esclave est un port 8 bits permettant d’interfacer le PIC avec. un autre microprocesseur.

Le mode de fonctionnement est déterminé au moment de la programmation du PIC par des « bits de configuration » qui sont en fait des emplacements de mémoire non-volatile. les instructions du programme s’exécutent à une cadence de 5 MHz. ou oscillateur à quartz. plusieurs options possibles : circuit RC (résistance + condensateur).2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register Pour faire battre le cœur de notre PIC. on a besoin d’un circuit de génération d’horloge. Avec les PIC « Mid Range ».18 - . si votre quartz bat à 20 MHz.. Autrement dit. ou circuit résonateur céramique. Pour générer un « cycle d’instruction ».. il faut 4 cycles d’horloge. . Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.Le circuit de génération d’horloge 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.

Une fois le registre de comptage plein.Le TIMER0 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Timing Generation OSC1 / CLKIN OSC2 / CLKOUT Oscillator Start-up Timer Power-on Reset Watchdog Timer MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.19 - . On peut donc le pré charger avec une valeur. il peut générer une interruption. qui compte des impulsions soit internes. soit d’une source externe. Étant donné qu’une fois configuré il fonctionne quasi-indépendamment du microprocesseur. C’est un compteur 8 bits (0 à 255) simple. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. à partir de laquelle il comptera jusqu’à atteindre 255. On peut librement lire ou écrire dans le registre de comptage associé. le Timer0 s’appelait RTCC.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register Dans le passé. . on pourra s’en servir comme base de temps. On peut par ailleurs lui appliquer une pré-division programmable entre 1 et 256.

20 - . Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register .Le TIMER1 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Timing Generation OSC1 / CLKIN OSC2 / CLKOUT Oscillator Start-up Timer Power-on Reset Watchdog Timer MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.

21 - . on peut en quelque sorte « chronométrer » la survenue d’un événement. Exemple : si l’entrée du module CCP est reliée à un capteur qui délivre une impulsion à chaque tour de l’arbre d’un moteur. voir plus loin). Comme on connaît la fréquence de comptage. la valeur contenue dans le registre du Timer1 au moment de l’impulsion est le reflet de la vitesse de rotation. Voyons maintenant le mode « comparaison » : Le Timer1 compte en continu. mais avec un registre de comptage plus gros : 16 bits au lieu de 8. . et une interruption est générée chaque fois que la valeur du compteur est égale à celle qu’on aura pré chargée dans le registre de comparaison. De plus. générer un signal carré. il possède un mode de fonctionnement particulier : on peut l’utiliser en association avec un des modules CCP (modules de capture et de comparaison. Voyons rapidement le mode « capture » : lorsqu’un événement survient sur l’entrée du module CCP. par exemple. On peut s’en servir pour.Le Timer1 fonctionne sur le même principe que le Timer0. la valeur du Timer1 est lue. ce qui étend notablement ces capacités de comptage.

22 - . en français. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. Modulation de Largeur d’Impulsion (MLI).2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register Le Timer2 a un fonctionnement différent des Timer0 et Timer1. ou. On s’en sert pour générer des signaux carrés. des signaux PWM.Le TIMER2 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Timing Generation OSC1 / CLKIN OSC2 / CLKOUT Oscillator Start-up Timer Power-on Reset Watchdog Timer MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD. en association avec le module CCP. PWM étant l’acronyme de « Pulse Width Modulation » ou. . C’est un compteur 8 bits avec pré-diviseur et post-diviseur.

Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.23 - .Les modules CCP1 et CCP2 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register .

ils vont nous permettre de générer des signaux à modulation de largeur d’impulsion (PWM) pour. et cela de manière quasi-indépendante du reste du microcontrôleur qui pourra continuer à vaquer à ses occupations. En association avec les deux timers. par exemple. on a deux modules CCP sur le PIC. PWM ».24 - . . CCP pour « Capture. réguler le courant (et donc la luminosité) dans une ampoule… Ils vont également nous permettre de comparer l’occurrence d’un signal en entrée avec la valeur du compteur Timer1. Ils vont encore nous permettre de générer des signaux carrés. réalisant ainsi un chronométrage de l’événement en question (par exemple : indication de la fréquence de rotation d’un moteur). faire varier la vitesse d’un moteur à courant continu. Compare.On en a parlé au moment de voir les Timer1 et Timer2 .

Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.25 - .2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register .Le convertisseur Analogique – Digital 10bits : 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.

codé sur 10 bits. Ici 10 bits. • La rapidité d’évolution des signaux présents sur les entrées (leur fréquence pour des signaux périodiques).26 - . Les pattes AN2 et AN3 peuvent être utilisées comme références de tension ou comme entrées analogiques standard. mais moins précis qu’un 12 bits… • Le temps de conversion. • Le nombre de signaux à numériser. En effet. donc meilleur qu’un convertisseur 8 bits. On peut donc numériser jusqu’à 8 signaux analogiques. étant donné qu’il n’y a qu’un seul module de conversion pour 8 signaux d’entrée multiplexés. mais ça tout le monde le sait déjà. la fréquence d’échantillonnage doit être au moins deux fois supérieure à la fréquence du signal . Mais si vos signaux n’évoluent pas trop vite (fréquence basse). les références de tension étant dans ce dernier cas prises sur les tensions d’alimentations du PIC : VDD et VSS. pour un signal périodique. non ? . (VDD pour le + et VSS pour le -). Pas tous en même temps.Le convertisseur A/D convertit le signal analogique présent sur une de ses 8 entrées en son équivalent numérique. vous pouvez numériser le signal sur la patte AN0. puis celui sur AN1… Les paramètres important dont il faudra tenir compte sont : • La résolution du convertisseur. bien sûr.

2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register .L’USART 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.27 - . Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.

des EEPROMs série… L’USART peut être configurée selon 3 modes : • Asynchrone (Full Duplex) • Synchrone Maître (Half Duplex) • Synchrone Esclave (Half Duplex) . des circuits intégrés convertisseurs Numérique/Analogique ou Analogique/Numérique.28 - . recevoir et transmettre des données. elle peut établir une liaison synchrone ou asynchrone. Concrètement. C’est son côté « je peux tout faire » qui lui vaut l’attribut « Universal ».L’USART ou Universal Synchronous Asynchronous Receiver Transmitter est l’un des deux modules de communication série du PIC ou SCI en anglais (Serial Communication Interface). selon la manière dont elle est configurée. l’USART permet de communiquer avec le reste du monde : un ordinateur ou tout autre matériel équipé d’une interface série RS232. Comme son nom l’indique.

29 - .Le SSP. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register . Synchronous Serial Port 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.

En fait. Une dernière remarque par rapport aux interfaces de communication : certains PIC (mais pas le 16F877) intègrent une interface USB ou un module de communication Ethernet. l’USART est bien adaptée pour communiquer avec le reste de l’univers via la célèbre interface RS232 alors que le MSSP permet de communiquer aisément avec d’autres composants électroniques à interface série. . 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 I²C (Inter-Integrated Circuit) L’utilisation de l’un de ces deux modules de communication. USART ou MSSP dépend donc essentiellement du protocole de communication nécessaire. donc l’appellation exacte est plutôt MSSP pour « Master Synchronous Serial Port ». Schématiquement. des registres à décalage.30 - . Il est utile pour communiquer avec d’autres modules ou microcontrôleurs.Le module SSP est la deuxième interface de communication série du PIC. des EEPROMs séries. il s’agit d’un port Maître.

31 - .La logique de RESET 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register .

lorsque VDD est détecté. ce module génère une impulsion de reset. car. . ce timer doit être périodiquement remis à zéro par le programme. Cette temporisation fonctionne avec son propre circuit RC interne. On évite ainsi au PIC de subir les inévitables phénomènes transitoires à la mise sous tension. c’est au tour de l’Oscillator Start Up Timer de prendre le relais. s’il « déborde ». Lors d’un démarrage ou redémarrage suite à un reset. cette temporisation permet à la tension d’alimentation VDD d’atteindre une valeur suffisante et stable.32 - . Il s’agit d’une temporisation dont le but est de permettre au circuit de l’oscillateur de démarrer proprement. Le WATCHDOG TIMER : C’est le « Chien de garde » (watchdog en anglais) du PIC. En effet. Si celle-ci descend en-dessous d’une valeur minimum pour laquelle le fonctionnement correct du PIC ne peut plus être assuré. On ramène juste la tension d’alimentation à travers une résistance appropriée sur la patte « MCLR » (Memory CLeaR). L’OSCILLATOR START UP TIMER : une fois la temporisation du Power-Up Timer écoulée. l’oscillateur a besoin de temps pour démarrer et se stabiliser Le POWER-ON RESET : à la mise sous tension. à condition que l’apparition de la tension d’alimentation soit assez « énergique » vous pouvez vous passer de ce circuit RC. ce qui lance le Power-Up Timer et remet un certain nombre de registre du PIC dans un état déterminé. en cas de plantage de votre programme le PIC est redémarré automatiquement. S’il est utilisé. Habituellement on utilise un circuit externe à résistance / condensateur pour générer ce « pulse » de reset. Ainsi. il place le PIC en mode Reset.La logique de reset comprend plusieurs modules : • • • • • Le POWER-UP TIMER : c’est une temporisation au démarrage. Mais sur le PIC. Le BROWN-OUT RESET : ce module surveille la tension d’alimentation. de la même manière que la tension d’alimentation met un certain temps à se stabiliser. le module Brown-Out Reset redémarre (reset) le PIC.

L’In-Circuit Debugger 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD. etc. Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1. Une fois activé. il donne accès à des fonctionnalités avancées de débogage.33 - . l’environnement de développement intégré de Microchip. Celles-ci sont exploitées par le module ICD de MPLAB. .2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register Ce module permet de simplifier la phase de débogage des programmes. poser des points d’arrêt. lire le contenu des registres. Vous pouvez alors suivre « en live » l’évolution de votre programme entrain de s’exécuter sur le PIC.

2 Synchronous Serial Port USART Note 1 : High order bits are from the STATUS register . Vss RE0 / AN5 / RD RE1 / AN6 / WR RE2 / AN7 / CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.34 - .Low-Voltage Programming et ICSP (In-Circuit Serial Programming) 13 8 DATA Bus Program Counter PORTA FLASH Program Memory Program Bus RAM File Registers 8 Level Stack ( 13-bit ) 14 RAM Addr (1) Direct Addr 7 8 AN0 AN1 AN2 / VrefAN3 / Vref+ T0CKl AN4 / SS RB0 / RB1 RB2 RB3 / RB4 RB5 RB6 / RB7 / INT RC0 / RC1 / RC2 / RC3 / RC4 / RC5 / RC6 / RC7 / T1OSO / T1CKL T1OSI / CCP2 CCP1 SCK / SCL SDI / SDA SD0 TX / CK RX / DT RD0 / RD1 / RD2 / RD3 / RD4 / RD5 / RD6 / RD7 / PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 PORTB 9 Addr MUX Instruction reg RA0 / RA1 / RA2 / RA3 / RA4 / RA5 / Indirect Addr FSR reg STATUS reg PGM PGC PGD 8 PORTC 3 Power-up Timer Instruction Decode & Control Oscillator Start-up Timer Timing Generation Watchdog Timer OSC1 / CLKIN OSC2 / CLKOUT Power-on Reset MUX ALU 8 W reg PORTD Brown-out Reset In-Circuit Debugger Low-Voltage Programming Parallel Slave Port PORTE MCLR VDD.

généralement 13V . ou autrement dit. Le grand avantage c’est qu’on peut. plus besoin de programmateur. en français. Sinon il passe la main au programme actuel. d’autant plus que la vitesse de transmission des données est beaucoup plus rapide qu’avec un programmateur. ou autre. programmer le PIC alors qu’il est déjà 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. qui va se charger du transfert et de l’écriture en mémoire programme. vous pouvez transférer le programme via cette interface. On programme le PIC déjà implanté. moyennant certaines précautions. Ici encore.…) il le charge et remplace l’actuel. en mode de transfert série. si le boot loader détecte une nouvelle tentative de transfert de programme sur l’interface sélectionnée (série. plus élevée que la tension d’alimentation normale. les modèles récents de PIC se programment en série.35 - . Contrairement à des modèles de microcontrôleurs plus anciens qui étaient programmés en « parallèle » (les octets étaient transférés dans la mémoire programme sur 8 lignes). la programmation se fait sur un mode série. L’utilisation du module « Low Voltage Programming » prends ici tout son sens.On utilise pour transférer le programme les lignes RB6 (qui devient l’horloge cadençant le transfert) et RB7 (pour transférer les données en écriture ou lecture). C’est pour le cas standard. C’est le boot loader. mais comme on ne passe pas par un programmateur on à pas accès à la tension de programmation. il y a moyen de faire la même chose en ayant pas besoin de la tension de programmation.A quoi peut bien servir ce module « Low-Voltage Programming » ? Tout d’abord. On à donc besoin d’une tension de programmation. C’est ce qu’on appelle l’ICSP : In-Circuit Serial Programming.On alimente le PIC avec sa tension de programmation. Qu’est-ce donc ? Un boot loader (traduction littérale : « chausse-pied ») est un petit bout de programme que l’on implante dans la mémoire du PIC et qui va « charger » le programme que vous voulez implanter dans la mémoire du PIC. ou USB. . C'est-à-dire que les octets sont transmis bits après bits sur un nombre restreint de lignes. Programmation Série En Circuit. Au prochain démarrage du PIC. Comment se passe la programmation ICSP ? . Ici. Il y a également un autre moyen de programmer notre PIC : l’utilisation d’un Boot loader. Le boot loader reste ensuite inactif dans la mémoire du PIC pendant que votre programme s’exécute normalement. Si votre PIC est équipé d’une interface série. USB. en coordination avec le logiciel ad’ hoc sur votre ordinateur. mais grâce au module « Low Voltage Programming ». voyons comment le PIC est programmé habituellement. Ce mécanisme est surtout très pratique dans les phases de prototypage où de nombreux transferts son nécessaires.

le changement d’état sur le port générera une interruption. le déroulement normal s’interrompt et la routine de gestion de l’interruption est exécutée. débordement de Timer. Par exemple. écriture en mémoire EEPROM terminée. plage de fréquence .L’oscillateur : utilisation d’un quartz ou d’un circuit RC. USART. pas besoin de rester les yeux rivés sur la vitre avec un chronomètre en main. il existe ce que l’on appelle les bits de configuration. SSP. Le gros avantage de ce mécanisme. Le PIC sera ainsi mis au courant qu’un changement a eu lieu et exécutera les actions adéquates.Utilisation ou nom du Watchdog . si un clavier est raccordé au PIC.Validation ou non du Brown-Out Reset . .Utilisation de la patte MCLR ou non . pas besoin de surveiller en permanence si une touche a été activée. Les Interruptions Un certain nombre d’événements sont susceptible de générer des interruptions : fin de conversion de signal analogique. À savoir : . C’est un peu comme l’alarme sonore de votre micro-onde : celui-ci vous signale par un BiiiP que le temps de cuisson est écoulé. Ce sont des bits spéciaux de la mémoire programme qui permettent de spécifier le mode de fonctionnement d’un certain nombre de fonctionnalité du PIC. changement d’état d’une entrée de port…. Si c’est le cas.36 - .Les Bits de Configuration Pour « customiser » notre PIC.Protection de la mémoire programme et de la mémoire EEPROM Ces bits sont programmés au moment du transfert du programme dans le PIC.Validation ou non du Power-Up Timer . Si votre programme comprend une routine de gestion de cette interruption. c’est que le microcontrôleur peut vaquer à ses occupations sans être obligé de scruter en permanence si telle ou telle action a eu lieu.

il continue de fonctionner en mode SLEEP) . Il est presque entièrement désactivé.Le mode SLEEP Le mode Sleep est un mode de fonctionnement particulier du PIC dans lequel celui-ci réduit sa consommation électrique au minimum. Le PIC est en mode « veille » ! Pour sortir de cette torpeur.37 - .Reset du circuit.Réveil par le Watch-Dog Timer (ci celui-ci est activé. changement d’état de port. . ou . son oscillateur est éteint.Interruption générée par un module périphérique (Timer. il faut un des événements suivant : . convertisseur A/D. On prolonge ainsi considérablement l’autonomie.) Ce mode peut être particulièrement intéressant pour une application fonctionnant sur pile ou batterie et qui ne requiert le fonctionnement du microprocesseur qu’à la survenue d’événements particuliers. SSP….

38 - .Brochage du PIC16F877 1 40 2 39 3 38 4 37 5 36 6 35 7 34 8 9 10 11 12 13 PIC 16F877 MCLR/Vpp RA0/AN0 RA1/AN1 RA2/AN2/VRefRA3/AN3/VRef+ RA4/T0CKI RA5/AN4/SS RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 VDD VSS OSC1/CLKIN OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 33 32 31 30 29 28 14 27 15 26 16 25 17 24 18 23 19 22 20 21 RB7/PGD RB6/PGC RB5 RB4 RB3/PGM RB2 RB1 RB0/INT VDD VSS RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA RD3/PSP3 RD2/PSP2 Conclusion Ainsi s’achève notre survol du PIC 16F877. On pourra passer ensuite à l’étude un peu plus détaillée des différents périphériques. Vous savez maintenant ce qui se cache dans la boîte. et avec quels outils nous allons le programmer. . Notre prochain objectif sera de le faire fonctionner.