Sunteți pe pagina 1din 34

Les Microcontrleurs

Programmation avec le
C
ESTI 2011-2012

ESTI 2012-2013 Ferchichi Moez 1


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 2


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 4


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.f =0; bit (pin) i du PORTA configur en
sortie
Bit i de TRISA = 1 TRISA.f=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.f=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 6


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.f=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.f=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 8
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 9


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
RC7sous la forme
Segment pt dune procdure dont la premire
instructionRC6 Segment
permet de pointer
g sur lindex de la case du tableau
afficher. RC5 Segment f
RC4 Segment e
RC3 Segment d
RC2 Segment c
RC1 Segment b
RC0 Segment a
8

ESTI 2012-2013 Ferchichi Moez 13


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 : Afficheur 7 Seg
PIC16F877

8
RA
0
.
.
RA
3

14
ESTI 2012-2013 Ferchichi Moez
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 : justifcation droite ou gauche du rsultat


1 : justifi droite 000000XX XXXXXXXX
0 : justifi gauche XXXXXXXX XX000000
PCFG3:PCFG0 : confguration 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
Temps de conversion
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

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 : T ECHmin 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


Les Interruptions
Droulement d'une interruption:

Lorsque l'vnement dclencheur d'une interruption intervient, alors son


drapeau est positionn 1 (lev).

Si l'interruption a t valide (bits de validations = 1), elle est 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
ESTI il s'est Ferchichi
2012-2013 arrt.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

S-ar putea să vă placă și