Вы находитесь на странице: 1из 34

Les Microcontrleurs Programmation avec le C

ESTI 2011-2012

ESTI 2012-2013 Ferchichi Moez

Objectifs
Programmer en langage C les diffrents modules du pic16F877: Les ports dentres/sorties. Le module de Conversion analogique numrique DAC. Les Interruptions La transmission srie RS232. Les Timers : TMR Les modules de comparaison CCP Lcriture dans la mmoire EEPROM et dans la mmoire Flash.

ESTI 2012-2013 Ferchichi Moez

Les ports dentrs/sorties


Le pic 16F877 comporte 5 ports dentrs/sorties: A, B, C, D et E. PORTA: 6 bits

PORTB: 8 bits
PORTC: 8 bits PORTD: 8 bits PORTE : 3 bits

33 pins IO (E/S)
ESTI 2012-2013 Ferchichi Moez 3

Port dE/S PORTA


Le port A dsign par PORTA est un port de 6 bits (RA0 RA5). RA6 et RA7 ne sont pas accessibles. La configuration de direction se fait l'aide du registre TRISA: positionner un bit de TRISA 1, configure la broche correspondante du PORTA en entre et inversement.

Au dpart toutes les broches sont configures en entre.

ESTI 2012-2013 Ferchichi Moez

Port dE/S PORTA


La broche RA4 peut tre utilise soit comme E/S numrique normale, soit comme entre horloge pour le Timer TMR0 Les autres broches (RA0, RA1, RA2, RA3 et RA5) peuvent tre utilise soit comme E/S numriques soit comme entres analogiques. Au RESET, ces E/S sont configures en entres analogiques. Pour les utiliser en E/S numriques, il faut crire '00000110' dans le registre ADCON1 (sera explicit dans la partie CAN).

Quelque soit le mode (Analogique ou Numrique), il faut utiliser le registre TRISA pour configurer la direction des E/S : Bit i de TRISA = 0 TRISA.fi =0; bit (pin) i du PORTA configur en sortie Bit i de TRISA = 1 TRISA.fi=1; bit i du PORTA configur en entre
ESTI 2012-2013 Ferchichi Moez 5

Le port dE/S PORTB


Le port B dsign par PORTB est un port bidirectionnel de 8 bits (RB0 RB7). Toutes les broches sont compatibles TTL. La configuration de direction se fait l'aide du registre TRISB, positionner un bit de TRISB 1 (TRISB.fi=1) configure la broche correspondante de PORTB en entre et inversement. Au dpart (ou aprs un RESET) toutes les broches sont configures en entre.

En entre, la ligne RB0 appele aussi INT peut dclencher linterruption externe INT. En entre, une quelconque des lignes RB4 RB7 peut dclencher l'interruption RBI. Nous reviendrons l-dessus dans le paragraphe rserv aux interruptions.

ESTI 2012-2013 Ferchichi Moez

Le port d' E/S PORTC


Le port C dsign par PORTC est un port bidirectionnel de 8 bits (RC0 RC7). Toutes les broches sont compatibles TTL. La configuration de direction se fait l'aide du registre TRISC, positionner un bit de TRISC 1 (TRISC.fi=1) configure la broche correspondante du PORTC en entr et inversement. Au dpart (ou aprs un RESET) toutes les broches du port C peuvent tre utilises soit comme E/S normales soit comme broches d'accs diffrents modules comme le timer1, les modules de comparaison et de capture CCP1/2, le timer 2, le port I2C ou le port srie, ceci sera prcis au moment de l'tude de chacun de ces priphriques. Pour lutilisation dune broche du port C comme E/S normale, il faut sassurer quelle na pas t affecte un de ces modules. Par exemple, si TIMER1 est valid, il peut utiliser les broches RC0 et RC1 selon sa configuration.
ESTI 2012-2013 Ferchichi Moez 7

Le port dE/S PORTD


Le port D dsign par PORTD est un port bidirectionnel de 8 bits (RD0 RD7). Toutes les broches sont compatibles TTL . Chaque broche et configurable en entre ou en sortie laide du registre TRISD. Pour configurer une broche en entre, on positionne le bit correspondant dans TRISD 1 (TRISD.fi=1) et inversement.

PORTD nest pas implment sur le 16F876, il est disponible sur le 16F877. PORTD peut tre utilis dans un mode particulier appel parallel slave port, pour cela il faut placer le bit 4 (PSPMODE) de TRISE 1. Dans ce cas les 3 bits du PORTE deviennent les entres de control de ce port (RE, WE et CS).

ESTI 2012-2013 Ferchichi Moez

Le port d' E/S PORTE


PORTE contient seulement 3 bits RE0, RE1 et RE2. Les trois sont configurables en entre ou en sortie laide des bits 0, 1 et 2 du registre TRISE. PORTE nest pas implment sur le 16F876, il est disponible sur le 16F877. Les 3 bits du PORTE peuvent tre utiliss soit comme E/S numrique soit comme entres analogiques du CAN. La configuration se fait laide du registre ADCON1. Si le bit 4 de TRISE est plac 1, Les trois bits du PORTE deviennent les entres de control du PORTD qui (dans ce cas) fonctionne en mode parallel Slave mode. A la mise sous tension (ou aprs un RESET), les trois broches du PORTE sont configures en entre analogique.

ESTI 2012-2013 Ferchichi Moez

Exercices
Exercice 1LED: Clignoter des LEDs A) Sachant que le PIC est dot d'un quartz de 4 MHz, donner le programme en langage C qui fait clignoter les LEDs branches sur Le port B avec une temporisation voisine de 1s. B) Changer le programme pour faire clignoter la LED connecte sur RB0 avec une temporisation de 10s et garder la mme temporisation (1 s) pour les autres LEDs.
ESTI 2012-2013 Ferchichi Moez 10

Exercices
Exercice 2LED: Ecrire un programme en ASM qui fait clignoter une diode LED (des LEDs) connecte(s) au port RB0 du PIC16F877 une frquence de 2,5 Hz. Lhorloge du PIC est de 4 Mhz, ce qui implique quune instruction sexcute durant 1 microseconde. Exercice 3LED: Jeu de lumire :On utilise le PORTB pour faire un jeu de lumire. Ce jeu de lumire consiste mettre RB0 1 et le faire dcaler sur les autres pins. Chaque diode LED sallume pendant 200 ms. Ecrire un programme en Langage C et en Assembleur.

ESTI 2012-2013 Ferchichi Moez 11

Exercices
Exercice Afficheur 7Seg-BCD: Ecrire un programme en langage C qui permet dafficher les 16 symboles Hexadcimaux: 0..F sur un Afficheur 7seg-BCD. (lafficheur sera command par les Pins RD0..RD3).

Afficheur 7 Seg-BCD PIC16F877

ESTI 2012-2013 Ferchichi Moez

12

Exercices
Exercice Afficheur 7Seg: Ecrire un programme en langage C puis en langage Assembleur qui permet dafficher les 16 symboles Hexadcimaux: 0..F sur un Afficheur 7Seg Cathode Commune selon le schma suivant: Rq: Dans cet exercice nous avons besoin de dclarer un tableau en assembleur. Ceci peut se faire par deux mthodes : soit mettre le tableau dans la mmoire de donne EEPROM , soit dclarer le tableau dans la mmoire de programme. Nous utiliserons la deuxime mthode dans cet exercice. Ce tableau sera dclar sous la forme dune procdure dont la premire instruction permet de pointer sur lindex de la case du tableau afficher.
RC7 Segment pt RC6 Segment g RC5 Segment f RC4 Segment e RC3 Segment d RC2 Segment c RC1 Segment b RC0 Segment a

8
13

ESTI 2012-2013 Ferchichi Moez

Exercices
Exercice Afficheur 7Seg: Ecrire un programme en langage C qui permet dafficher les 16 symboles Hexadcimaux: 0..F sur un Afficheur 7Seg Cathode Commune tel que la valeur de dbut est lue sur les entres RA0..RA3 :
PIC16F877 8
RA0 . . RA3

Afficheur 7 Seg

ESTI 2012-2013 Ferchichi Moez

14

Le module de conversion A/N


Ce module est constitu d'un convertisseur Analogique Numrique 10 bits dont l'entre analogique peut tre connecte sur l'une des 8 (5 pour 16F876) entres analogiques externes. On dit qu'on a un CAN 8 canaux. Les entres analogiques doivent tre configures en entre l'aide des registres TRISA et/ou TRISE. Les tensions de rfrences permettant de fixer la dynamique du convertisseur. Elles peuvent tre choisies parmi Vdd, Vss, Vr+ ou Vr-

ESTI 2012-2013 Ferchichi Moez

15

Le module de conversion A/N


La conversion dmarre quand on place le bit GO/DONE 1. Ceci peut tre fait par le programme utilisateur ou automatiquement par le module CCP2 s'il est configur en mode comparaison avec vnement spcial.

A la fin de la conversion, le rsultat de conversion est recopi dans les registres ADRESH et ADRESL, le bit GO/DONE repasse automatiquement 0 et le drapeau ADIF (situ dans PIR1) passe 1 ce qui peut dclencher linterruption associe si elle est valide.
Le control du module se fait par les deux registres ADCON0 ou ADCON1.

ESTI 2012-2013 Ferchichi Moez

16

ADCON0
ADCS1:ADCS0 : Choix de l'horloge de conversion donc du temps de conversion 00 : Fosc/2 01 : Fosc/8 10 : Fosc/32 11 : Oscillateur RC ddi au CAN
CHS2:CHS0 : choix de l'entre analogique 000 = channel 0, (RA0) 001 = channel 1, (RA1) 010 = channel 2, (RA2) 011 = channel 3, (RA3) 100 = channel 4, (RA5) 101 = channel 5, (RE0) 110 = channel 6, (RE1) 111 = channel 7, (RE2) GO/DONE : Une conversion dmarre quand on place ce bit 1. A la fin de la conversion, il est remis automatiquement zro. Ce bit peut aussi tre positionn automatiquement par le module CCP2. ADON : Ce bit permet de mettre le module AN en service
ESTI 2012-2013 Ferchichi Moez 17

ADCON1
ADFM : justification droite ou gauche du rsultat 1 : justifi droite 000000XX XXXXXXXX 0 : justifi gauche XXXXXXXX XX000000 PCFG3:PCFG0 : configuration des E/S et des tensions de rfrences. Les 5 broches du PORTA et les 3 du PORTE peuvent tre configurs soit en E/S digitales, soit en entres analogiques. RA2 et RA3 peuvent aussi tre configures en entre de rfrence.

ESTI 2012-2013 Ferchichi Moez

18

Valeur numrique obtenue


Quelle est la relation entre la tension analogique convertie et le nombre N recueilli dans le registre ADRES ? Si on note : Q = pas de quantification = (Vref+ - Vref-)/1024 Va = tension analogique convertir N = valeur numrique obtenue

Avec Vref- = masse, on obtient N = int (Va / Q) exemple : Vref+ = Vdd = 5V, Vref- = 0, Vin = 4 V Q = 5V/1024 = 0,0048828125 V N = 4V / 0,0048828125 = 819
ESTI 2012-2013 Ferchichi Moez 19

Temps d'acquisition
Pendant la conversion, la tension Ve l'entre du convertisseur A/N doit tre maintenue constante. Le PIC dispose dun chantillonneur bloqueur intgr constitu d'un interrupteur S et d'une capacit de maintien de C=100pF

ESTI 2012-2013 Ferchichi Moez

20

Temps dacquisition
Pendant le temps de conversion, S est maintenu ouvert, la capacit bloque Ve une valeur constante. A la fin de la conversion, S se ferme, la tension Ve rejoint la tension analogique d'entre Va au bout d'un temps d'acquisition qui dpend de la constante de temps RC.

R tant la somme de la rsistance d'interconnexion (Ric), la rsistance du sampling switch S (Rss) et la rsistance de la source de tension Va (Rs).
La valeur de Rs ne doit pas dpasser 10 k. La valeur Ric est 1 k La valeur de Rss dpend de la tension d'alimentation, elle est de l'ordre de 7k pour Vdd=5V et de 5 k pour Vdd = 6V

ESTI 2012-2013 Ferchichi Moez

21

Temps dacquisition
Tc : temps de charge du condenseur : TC= (Ric+Rss+Rs).C.Ln(2047) CT : Coefficient de temprature = (Tp -25C) 0.05 s/C Tp = Temprature Processeur

Exemple: Avec Ric = 1k, Rss = 7k, Rs = 2k, Tp = 50 C : Tc = 10k x 100pF x Ln(2047) = 7,6 s CT = 25 x 0.05 s = 1,25 s TACQ = 2 + 7,6 + 1,25 s = 10, 85 s
ESTI 2012-2013 Ferchichi Moez 22

Le temps de conversion est gal (12 +2) TAD TAD est le temps de conversion d'un bit, il dpend de l'horloge systme et du prdiviseur (div) choisi. Les choix doivent tre ajust pour que que TAD ne dpasse pas 1,6 s

Temps de conversion

Une conversion dmarre au moment du positionnement du bit GO_DONE, l'interrupteur S est ouvert et la conversion est ralise en 12 TAD. A la fin, le bit GO_DONE est remis 0 et le drapeau ADIF est plac 1. Le module attend 2 TAD supplmentaires avant de fermer l'interrupteur S et commencer une nouvelle acquisition. Si on veut chantillonner un signal variable, La priode d'chantillonnage Te doit tre suprieur ou gale : TECHmin TACQ + TCON
ESTI 2012-2013 Ferchichi Moez 23

Exercice
Ecrire un programme qui permet de convertir la tension dun capteur de Pression qui varie entre 0.4 V et 4.3 V. Le rsultat de la conversion sera visualis sur les ports B et D. Simuler le fonctionnement avec ISIS, la sortie du PIC sera visualise avec des diodes LEDs.

ESTI 2012-2013 Ferchichi Moez

24

Communication sur le Port Srie


L'USART (Universal Synchronous Asynchronous Receiver Transmitter) est l'un des deux modules de communication srie dont dispose le PIC 16F876/877. L'USART peut tre configur comme systme de communication asynchrone full duplex ou comme systme synchrone half duplex.
La communication se fait sur les deux broches RC6/TX et RC7/RX qui doivent tre configurs toutes les deux en ENTREE par TRISC.
ESTI 2012-2013 Ferchichi Moez 25

Communication sur le Port Srie


Mode Asynchrone Si on place le bit SYNC du registre TXSTAT 0, l'USART fonctionne dans le mode asynchrone standard, 10 (ou 11) bits sont transmis ou reus dans l'ordre ci-dessous : 1 bit de START (toujours 0) 8 ou 9 bits de donne (LSB d'abord) 1 bits de STOP (toujours 1) La transmission se fait sur la broche RC6/TX et la rception sur la broche RC7/RX La vitesse de communication est dtermine par un gnrateur de baud rate ddi. L'accs au port en lecture ou criture se fait par les registres tampon RCREG et TXREG. La transmission et la rception se font par deux registres dcalage, un pour la transmission (TSR) et un pour la rception (RSR).
ESTI 2012-2013 Ferchichi Moez 26

Communication sur le Port Srie


L'accs au registres tampon peut se faire alors que les registre dcalage sont en train de transmettre/recevoir une donne. Le control du port se fait par les registres d'tat et de control TXSTA et RCSTA TXSTA: CSRC : non utilis en mode asynchrone TX9 et TX9D : Pour utiliser le mode 9 bits il faut positionner le bit TX9. Le 9me bit doit tre crit dans TX9D avant d'crire les 8 bits de donnes dans TXREG TXEN : permet de valider ou interdire la transmission SYNC : 0 mode asynchrone, 1 mode synchrone BRGH : slectionne le mode haut dbit du gnrateur de baud rate TRMT : Indicateur de lactivit du registre dcalage de transmission TSR 1 TSR libre, 0 TSR en activit

ESTI 2012-2013 Ferchichi Moez

27

Communication sur le Port Srie


Le drapeau RCIF et TXIF sont trs utiles pour grer la lecture/criture dans le port. RCIF est positionn quand le port a termin une rception et TXIF est positionn quand le buffeur de transmission TXREG est "vide". C: Le Help du C comporte une fonction simple pour commander le port srie asynchrone : usart
ESTI 2012-2013 Ferchichi Moez 28

Exercice
On se propose de dvelopper le programme dun PIC 16F877 permettant denvoyer sur le port srie une des quatre informations suivantes: Etat dun capteur1 logique plac sur RC0, Etat dun capteur2 logique plac sur RC1, La valeur dun capteur1 analogique plac sur RA0, La valeur dun capteur2 analogique plac sur RA1, Rq: les deux capteurs analogiques dlivrent des courants variant entre 4-20 mA. Fonctionnement: Tout dabord le choix de lacquisition est fait par la rception sur le port srie de lune des deux lettres suivantes: A: acquisition analogique D: acquisition numrique si le choix se fait sur A: On doit activer un MUX analogique (4067: MUX 16 entres) sur lequel sont connectes les deux capteurs analogiques: Puis une deuxime lecture sur le port srie permet de slectionner lacquisition du capt1 ou capt2 analogique; si le choix se fait sur D: une deuxime lecture sur le port srie permet de slectionner lacquisition du capt1 ou capt2 logique;
ESTI 2012-2013 Ferchichi Moez 29

Les Interruptions
Une interruption provoque larrt du programme principal pour aller excuter une procdure d'interruption. A la fin de cette procdure, le microcontrleur reprend le programme principal lendroit o il la laiss. A chaque interruption sont associs deux bits, un bit de validation et un drapeau.
Le bit de validation permet d'autoriser ou non l'interruption, alors que bit drapeau permet au programmeur de savoir de quelle interruption il s'agit. Sur le 16F876/877, l'es interruptions sont classes en deux catgories, les interruptions primaires et les interruptions priphriques. Elles sont gres par les registres suivants :

ESTI 2012-2013 Ferchichi Moez

30

Les Interruptions

Toutes les interruptions peuvent tre valides/interdites par le bit INTCON.GIE Toutes les interruptions priphriques peuvent tre valides/interdites par le bit INTCON.PEIE

Chaque interruption peut tre valide/interdite par son bit de validation individuel

ESTI 2012-2013 Ferchichi Moez

31

Les sources d'interruption

ESTI 2012-2013 Ferchichi Moez

32

Droulement d'une interruption:

Les Interruptions

Lorsque l'vnement dclencheur d'une interruption intervient, alors son drapeau est positionn 1 (lev). Si l'interruption a t valide (bits de validations = 1), elle est alors dclenche : le programme arrte ce qu'il est en train de faire et va excuter la procdure d'interruption qui se trouve l'adresse 4 en excutant les tapes suivantes : L'adresse contenue dans le PC (Program Counter) est sauvegarde dans la pile, puis remplace par la valeur 0004 (adresse de la routine d'interruption). Le bit GIE est plac "0" pour inhiber toutes les interruptions (afin que le PIC ne soit pas drang pendant l'excution de la procdure d'interruption). A la fin de la procdure d'interruption (instruction RETFIE) : 1. le bit GIE est remis 1 (autorisant ainsi un autre vnement) 2. le contenu du PC est recharg partir de la pile ce qui permet au programme de reprendre l o il s'est arrt.
ESTI 2012-2013 Ferchichi Moez 33

Les Interruptions
Remarques: Le drapeau reste ltat haut mme aprs le traitement de linterruption. Par consquent, il faut toujours le remettre "0" la fin de la routine d'interruption sinon l'interruption sera dclenche de nouveau juste aprs l'instruction RETFIE Seul le PC est empil automatiquement. Si cela est ncessaire, les registres W et STATUS doivent tre sauvegards en RAM puis restaurs la fin de la routine pour que le microcontrleur puisse reprendre le programme principal dans les mmes conditions o il l'a laiss. L'interruption INT (Entre RB0 du port B) Cette interruption est provoque par un changement d'tat sur l'entre RB0 du port B quand elle est programme en entre. En plus de son bit de validation INTE et son drapeau INTF, elle est gre aussi par le bits INTEDG (OPTION_REG) qui dtermine le front sur lequel l'interruption se dclenche, 1=montant, 0=descendant L'interruption RBI (RB4 A RB7 du port B) Cette interruption est provoque par un changement d'tat sur l'une des entres RB4 RB7 du port B, Le front n'a pas d'importance. Les bits associs sont RBIE (validation) et RBIF (drapeau) Les autres interruptions : Les autres interruptions seront abordes au moment de l'tude des modules qui les dclenchent.
ESTI 2012-2013 Ferchichi Moez 34