microcontroleurs_yosra
microcontroleurs_yosra
microcontroleurs_yosra
AVANT-PROPOS
Ce cours est consacré à l’étude des microcontrôleurs. Il est destiné aux étudiants des
établissements de l’enseignement supérieur (ISETs), concernés par les études des systèmes
micro-programmés. Il peut être également utile aux praticiens, désirant améliorer leur niveau
théorique.
Le livre présente des chapitres qui sont composés pratiquement de la même façon :
Le présent ouvrage reflète l’expérience acquise par l’auteur aux cours de trois années de
travail pédagogique dans l’enseignement supérieur, ainsi que ses études dans les cycles
technicien et ingénieur en sciences de l’informatique industrielle & l’automatique à l’Institut
National des Sciences Appliquées et de Technologie de Tunis.
Le cours présenté dans ce recueil, a été élaboré par l’auteur lui-même et l’accessibilité des
explications a été testée au cours des travaux pendant deux semestres universitaires avec les
étudiants de l’Institut Supérieur des études Technologiques de Nabeul.
L’auteur adresse d’avance ses remerciements aux lecteurs qui voudront bien faire part de
leurs critiques et de leurs remarques constructives.
Y. RKHISSI KAMMOUN 1
Iset Nabeul Cours microcontrôleurs
PREAMBULE
Objectifs du cours
Comprendre l’architecture d'un système à microcontrôleur et être capable d’écrire un
programme en langage évolué pour une cible à microcontrôleur 16F877 et plus généralement
de transmettre une culture des systèmes micro-programmés.
Évaluations
- Test N°1 de 30 minutes, après avoir achevé les deuxième chapitre relatifs aux
structures du microcontrôleurs PIC 16877.
- Devoir surveillé de 1 heure, à la fin du toisième chapitre relatif à la programmation
du PIC 16F877 avec le compilateur CCS.
- Test N°2 de 30 minutes, après avoir achevé le chapitre relatif aux interruptions.
- Test N°3 de 30 minutes, après avoir achevé le chapitre relatif aux CAN.
- Test N°4 de 30 minutes, après avoir achevé le chapitre relatif aux Timers.
- Examen final écrit de 1 heure et demi sur tout le programme.
Objectifs Pédagogiques
Connaître l'architecture d'un systèmes micro-programmésà base de microprocesseur,
ses éléments constitutifs, et son fonctionnement et l’interaction entre les différentes
unités.
Y. RKHISSI KAMMOUN 2
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 3
Iset Nabeul Cours microcontrôleurs
SOMMAIRES
Y. RKHISSI KAMMOUN 4
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 5
Iset Nabeul Cours microcontrôleurs
CHAPITRE 1
SYSTEMES MICRO-PROGRAMMES A BASE DE
MICROPROCESSEUR
Y. RKHISSI KAMMOUN 6
Iset Nabeul Cours microcontrôleurs
intégré à très grande échelle d’intégration (VLSI) chargé d’organiser les tâches précisées par
le programme, de les décoder et d’assurer leur exécution. Il doit aussi prendre en compte les
informations extérieures au système et assurer leur traitement.
Ils présent trois avantages principaux : ils sont économiques et offre une souplesse d'emploi
inhérente à la programmation.
Y. RKHISSI KAMMOUN 7
Iset Nabeul Cours microcontrôleurs
Les accumulateurs : Ce sont des registres de travail qui servent à stocker une
opérande au début d'une opération arithmétique et le résultat à la fin de l'opération.
L’Unité Arithmétique et Logique: C'est un circuit complexe qui assure les fonctions
logiques (ET, OU, Comparaison, Décalage, etc...) ou arithmétique (Addition,
soustraction...)
Le registre d'état : Il est généralement composé de 8 bits à considérer
individuellement. Chacun de ces bits est un indicateur dont l'état dépend du résultat
de la dernière opération effectuée par l’UAL. On les appelle indicateur d’état ou flag
ou drapeaux (Retenue, débordement, zéro, ...).
Y. RKHISSI KAMMOUN 8
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 9
Iset Nabeul Cours microcontrôleurs
4. Les mémoires
Le processeur exécute les instructions machines présente dans la mémoire et traite les données
qu'elle contient : le fonctionnement du microprocesseur est entièrement conditionné par le
contenu de celles-ci.
La mémoire peut être vue comme un ensemble de cellules ou cases contenant chacune
une information : une instruction ou une donnée. Chaque case mémoire est repérée par
un numéro d’ordre unique : son adresse.
Une case mémoire peut être lue ou écrite par le microprocesseur (cas des mémoires vives) ou
bien seulement lue (cas des mémoires mortes).
Format d'une instruction
Y. RKHISSI KAMMOUN 10
Iset Nabeul Cours microcontrôleurs
Décodage (decode)
Exécution (execute)
Y. RKHISSI KAMMOUN 11
Iset Nabeul Cours microcontrôleurs
opératoire) et le range dans le registre d’instruction. Le code opératoire est décodé par des
circuits de décodage contenus dans le microprocesseur. Des signaux de commande pour
l’UAL sont produits en fonction de l’opération demandée qui est alors exécutée.
Pendant que l’instruction est décodée, le pointeur d’instruction est incrémenté de façon
à pointer vers l’instruction suivante. Puis, le processus de lecture et de décodage des
instructions recommence.
Y. RKHISSI KAMMOUN 12
Iset Nabeul Cours microcontrôleurs
Quoique cette architecture puisse être complexe mais elle est performante: Gain en terme de
vitesse d’exécution des programmes :
L’exécution d’une instruction ne fait plus appel qu’à un seul cycle machine puisque l’on peut
simultanément, grâce au deux bus, rechercher le code de l’instruction et la ou les données
qu’elle manipule
Y. RKHISSI KAMMOUN 13
Iset Nabeul Cours microcontrôleurs
Exercice 1 :
On considère le système de la figure 1.
1. Que représente ce schéma ?
2. Expliquer le rôle de chaque partie.
3. Que peut-on conclure quant à la taille du bus de données ?
4. Que peut-on conclure quant à la taille du bus d’adresses ?
Exercice 2 :
On considère le schéma synoptique ci-dessous :
Y. RKHISSI KAMMOUN 14
Iset Nabeul Cours microcontrôleurs
Exercice 3 :
1. Combien de lignes d’adresses sont nécessaires pouradresser : 8 Ko, 64 Ko, 12 Ko et 100
Ko?
2. Le nombre de lignes d’adresses dépend-il de la taille du mot du système ?
Y. RKHISSI KAMMOUN 15
Iset Nabeul Cours microcontrôleurs
CHAPITRE 2
MICROCONTROLEUR PIC 16F877
1. Du microprocesseur au microcontrôleur
Le microcontrôleur est un dérivé du microprocesseur. Sa structure est celle des systèmes à
base de microprocesseurs. Il est donc composé en plus de l’unité centrale de traitement, d’une
mémoire (mémoire vive RAM et mémoire morte ROM), une (ou plusieurs) interface de
communication avec l’extérieur matérialisé par les ports d'entrée/sortie.
En plus de cette configuration minimale, les microcontrôleurs sont dotés d'autres circuits
d’interface qui vont dépendre du microcontrôleur choisi à savoir les systèmes de comptage
(TIMER), les convertisseur analogique/numérique (CAN) intégré, gestion d’une liaison série
ou parallèle, un Watchdog (surveillance du programme), une sortie PWM (modulation
d’impulsion),…
Y. RKHISSI KAMMOUN 16
Iset Nabeul Cours microcontrôleurs
Les microcontrôleurs sont plutôt dédiés aux applications qui ne nécessitent pas une grande
quantité de calculs complexes, mais qui demandent beaucoup de manipulations
d’entrées/sorties. C’est le cas de contrôle de processus.
Les systèmes à microprocesseur sont plutôt réservés pour les applications demandant
beaucoup de traitement de l’information et assez peu de gestion d’entrées / sorties. Les
ordinateurs sont réalisés avec des systèmes à microprocesseur.
Y. RKHISSI KAMMOUN 17
Iset Nabeul Cours microcontrôleurs
On atteint donc de très grandes vitesses, et les instructions sont de plus très rapidement
assimilées.
L’horloge fournie au PIC est divisée par 4.C’est cette base de temps qui donne le temps d’un
cycle. Si on utilise par exemple un quartz de 4MHz, on obtient donc 1000000 de
cycles/seconde ; or, comme le PIC exécute pratiquement une instruction par cycle, hormis les
sauts, cela nous donne une puissance de l’ordre de 1MIPS (1 Million d’Instructions Par
Seconde).
Pour identifier un PIC, on utilise simplement son appellation du type : wwlxxyyy-zz
- WW: Représente la catégorie du composant (12, 14, 16, 17, 18),
- L: Tolérance plus importante de la plage de tension.
- XX: Type de mémoire de programme:
C: EPROM ou EEPROM.
CR: PROM.
F: FLASH.
- YYY: Identification.
- ZZ: Vitesse maximum tolérable.
Les PICs sont des composants STATIQUES, c’est à dire que la fréquence d’horloge peut être
abaissée jusqu’à l’arrêt complet sans perte de données et sans dysfonctionnement.
Ceci par opposition aux composants DYNAMIQUE, donc la fréquence d’horloge doit rester
dans des limites précises.
Les microcontrôleurs PIC sont présentés en boîtier DIL (Dual In Line).Un point ou une
encoche donne un repérage de la broche 1, ensuite il faut ce déplacer vers la droite pour avoir
les autres broches. Ont fait le tour du circuit dans le trigonométrique.
Y. RKHISSI KAMMOUN 18
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 19
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 20
Iset Nabeul Cours microcontrôleurs
Certaines pattes ont plusieurs fonctions :On dit que les fonctions sont multiplexée
3.2.1 L’alimentation
L’alimentation du circuit est assurée par les pattes VDD et VSS. Elles permettent à
l’ensemble des composants électroniques du PIC de fonctionner. Pour cela on relie VSS
(patte 5) à la masse (0 Volt ) et VDD (patte 14) à la borne positive de l’alimentation
qui doit délivrer une tension continue comprise entre 3 et 6 Volts.
Y. RKHISSI KAMMOUN 21
Iset Nabeul Cours microcontrôleurs
Un registre direction pour programmer les lignes soit en entrée, soit en sortie TRISA,
TRISB, TRISC, TRISD et TRISE.
Un registre de données pour lire ou modifier l’état des broches. PORTA, PORTB,
PORTC, PORTD et PORTE
Pour déterminer les modes des ports (I/O), il faut sélectionner leurs registres TRISX:
Le positionnement d’un bit à « 1 » place le pin en entrée.
Le positionnement de ce bit à « 0 » place le pin en sortie.
La plupart des broches des PORTs sont partagées avec des périphériques. En général si un
périphérique est utilisé, les broches correspondantes ne peuvent pas être utilisées comme
broches d’entrée/sortie.
Au reset, les lignes des ports A et E sont configurées en entrées analogiques, les autres lignes
sont configurées en entrées digitales.
Le courant absorbé ou fourni peut atteindre 25 mA.
Y. RKHISSI KAMMOUN 22
Iset Nabeul Cours microcontrôleurs
Le port B peut être programmé pour un tirage à 5V (pull up) de toutes ses lignes que l'on peut
mettre ou non en service en mode entrée uniquement. Elles sont automatiquement désactivées
quand le port est configuré en sortie.
En mode entrée, chaque broche du PORTB doit être maintenue à un niveau haut par
l'intermédiaire de résistances de 10 k pour ne pas déclencher d'interruptions imprévues.
Cette possibilité d'interruption sur un changement d'état associé à la fonction de tirage
configurable sur ces 4 broches, permet l'interfaçage facile avec un clavier. Cela rend possible
le réveil du PIC en mode SLEEP par un appui sur une touche du clavier.
Port C
Le port C est partagé avec liaisons, les timers 1 et 2 et les modules CCP.
Port D et E
En plus de leur utilisation comme PORTS E/S; les ports D et E, permettent au
microcontrôleur de travailler en mode PSP (Parallel Slave Port) c’est-à-dire, qu’il peut être
interfacé avec un autre microprocesseur. Dans ce cas le PORTD représente le bus de données
et le PORTE les signaux de contrôle(RD\, WR\ et CS\).
Le PORTE peut être aussi, configuré en mode analogique pour former avec le PORTA les 8
entrées du convertisseur analogique numérique. Par défaut, le PORTE est configuré comme
port analogique, et donc, comme pour le PORTA,
Y. RKHISSI KAMMOUN 23
Iset Nabeul Cours microcontrôleurs
CHAPITRE 3
PROGRAMMATION C DES PIC
AVEC LE COMPILATEUR CCS - C
Y. RKHISSI KAMMOUN 24
Iset Nabeul Cours microcontrôleurs
Dans l'environnement MPLAB, Le programme doit être écrit en assembleur, langage proche
de la machine et donc nécessitant un long apprentissage.
Le langage de programmation adopté pour programmer le PIC 16F877 est le langage évolué :
Le code source écrit en langage c doit donc être compilé en assembleur à l'aide d'un
compilateur C.
2. Le langage C
Le langage C dispose de beaucoup d'avantages. Il est :
PORTABLE : Les modifications d'un programme pour passer d’un système à un autre
sont minimes.
COMPLET : Un texte C peut contenir des séquences de bas niveau (proches du
matériel) en assembleur.
SOUPLE : Tout est possible en C mais une grande rigueur s’impose.
EFFICACE : On réfléchit (devant une feuille de papier) et on écrit (peu)
Y. RKHISSI KAMMOUN 25
Iset Nabeul Cours microcontrôleurs
4. Règles de bases
Toutes instructions ou actions se terminent par un point virgule ;
Une ligne de commentaires doit commencer par /*et se terminer par */ ou commencer par //.
Un bloc d'instructions commence par {et se termine par }.
Un programme en C utilise deux zones mémoires principales :
La zone des variables est un bloc de RAM où sont stockées des données manipulées
par le programme.
Y. RKHISSI KAMMOUN 26
Iset Nabeul Cours microcontrôleurs
La zone des fonctions est un bloc de ROM qui reçoit le code exécutable du
programme et les constantes.
Y. RKHISSI KAMMOUN 27
Iset Nabeul Cours microcontrôleurs
Le type : Il détermine la taille de la variable et les opérations pouvant être effectuées. On peut
rajouter le mot signed devant le type du variable, alors la variable devient signée.
Exemples : Int A,B,C,D ;
Char MESSAGE[10] ;
Signed int A ; // Entier de type signé, de -128 à +127
6. Les fonctions
Avec des paramètres d’entrée et un paramètre de sortie
Syntaxe :
Type de la variable de retour nom de fonction (types nom des paramètres)
{
Instruction 1 ;
.
Instruction n ;
Return (valeur) ; // Valeur à renvoyer
Y. RKHISSI KAMMOUN 28
Iset Nabeul Cours microcontrôleurs
}
Avec :
//Nom de la fonction :
//Description du rôle de la fonction :
//Paramètres d’entrée : Noms et types des paramètres d’entrée
//Paramètre de sortie : Nom et type du paramètre de sortie
Une fonction sans paramètres d’entrée et de sortie
Void nom de fonction (Void)
{
Instruction 1 ;
.
. Instruction n ;
}
Remarque : Il peut y avoir aussi des fonctions avec paramètres d’entrées et sans paramètre de
sortie et vice versa.
7. Les Opérateurs
Tab 3. 2: Les opérateurs d'affectation et arithmétiques
Type Symbole Exemple
Affectation = x = 3; y = a - b;
Addition + a = a + b; b = a+ 5;
Soustraction - a = a-b; b = a- 5;
Moins unitaire - a = -b;
Multiplication * a = b*6;
Division / x = a / b;
Reste de la division % r = a % b;
Y. RKHISSI KAMMOUN 29
Iset Nabeul Cours microcontrôleurs
Ces opérateurs permettent la comparaison de conditions composées telles que (x > y)&& (u >
v). Le résultat fourni est de type logique (0 ou 1).
Exemples : a et b deux entiers tel que : a = 1100 0111 0101 0011 (0xC753)
b = 0001 1001 1010 1110 (0x19AE)
a & b = 0000 0001 0000 0010 (0x0102)
a | b = 1101 1111 1111 1111 (0xDFFF)
a ^ b = 1101 1110 1111 1101 (0xDEFD)
~ a = 0011 1000 1010 1100 (0x38AC)
Y. RKHISSI KAMMOUN 30
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 31
Iset Nabeul Cours microcontrôleurs
- PUT, NOPUT : Activer/désactiver le Power Up Timer PUT( Timer spécial qui retarde
le démarrage de l'exécution du programme aprèsque le PIC a été réinitialisé. Ce délai
donne le temps de PIC oscillateur pour démarrer et se stabiliser).
- PROTECT, NOPROTECT : Activer/Désactiver la protection du code
Exemple : #fuses XT,NOWDT,NOPUT,NOPROTECT
#int_xxxx
Spécifie la source de l’interruption.
Syntaxe :
#int_ext : interruption externe.
Y. RKHISSI KAMMOUN 32
Iset Nabeul Cours microcontrôleurs
Syntaxe : output_X(valeur)
Exemple : output_b(0xf0); ); // mise à 1 de B7,B6,B5,B4
// mise à 0 de B3,B2,B1,B0
Y. RKHISSI KAMMOUN 33
Iset Nabeul Cours microcontrôleurs
Exemples :
#use delay (clock=4000000) // Quartz de 4Mhz
#use delay (clock=20000000) // Quartz de 20Mhz
Y. RKHISSI KAMMOUN 34
Iset Nabeul Cours microcontrôleurs
La fonction putc
Cette fonction permet d’envoyer un caractère formatée sur la liaison RS232.
Syntaxe : putc (char)
- Char est un caractère 8 bits
La fonction puts
Cette fonction permet d’envoyer une chaîne de caractères sur la liaison RS232, terminée par
le passage à la ligne (LF)
Syntaxe : variable=puts(chaine)
- chaîne est une chaîne de caractère constante terminé par le caractère null
Exemple : puts( " | Salut ! | " );
La fonction getc
Cette fonction permet de recevoir un caractère formatée sur la liaison RS232.
Syntaxe : variable=getc()
- Variable est un caractère 8 bits
Exemple :
void main () {
printf("Continuer (O,N)?");
do
{ reponse=getc(); }
while (reponse!='O' &&reponse!='N'); }
La fonction gets
Cette fonction permet de recevoir une chaîne de caractère sur la liaison RS232
Y. RKHISSI KAMMOUN 35
Iset Nabeul Cours microcontrôleurs
Syntaxe : variable=gets()
-Variable est une chaîne de caractère constante terminé par le caractère null
Y. RKHISSI KAMMOUN 36
Iset Nabeul Cours microcontrôleurs
Int RESULTAT;
RESULTAT = VAL >> NB;
Return (RESULTAT);}
//Appel de la fonction: Nom de la fonction (nom des paramètres) ;
//Exemple :
A = 16 ;
B = DECALAGE_DROITE (A, 2) ; //la valeur de A sera affectée à VAL
//la valeur 2 sera affectée à NB
//le résultat de la fonction sera affectée à B
Y. RKHISSI KAMMOUN 37
Iset Nabeul Cours microcontrôleurs
Exercice 1 :
Proposer la ligne d’instruction qui permet de :
1. Mettre à 1 le bit B0 du port B sans modifier les autres bits.
2. Mettre à 0 le bit A3 du port A sans modifier les autres bits.
3. Inverser tous les états du port B.
Exercice 2 :
Ecrire un programme qui permet de lire le port A et d’écrire le complément sur le port B.
L’état de RA4 est dupliqué sur les 3 bits du poids fort du port B (RB5-RB7).
Exercice 3 :
Soient les équations suivantes d’un système logique combinatoire :
S1 = A + B + C.B S2 = A.B + C.B + C
S 3 = A + B + C.B S4 = A + C.B
S5 = B.C.A
On propose le schéma de simulation suivant :
Figure 1
Ecrire un programme en C qui permet d’implanter le système combinatoire précédent.
Exercice 4 : Chenillard
Y. RKHISSI KAMMOUN 38
Iset Nabeul Cours microcontrôleurs
Figure 2
- Si RA0=0, les 8 diodes LED clignotent avec un délai d’une 1 secondes,
- Si RA0=1, on obtient le cycle répétitif suivant :
Diodes LED allumés Durée
D0D1 1s
D2D3 2s
D4D5 3s
D6D7 4s
Aucune diode 1s
Exercice 4 : UAL
Pour réaliser des opérations arithmétiques et Logiques, on s’adresse aux ports E/S du
microcontrôleur 16F877 tels que les ports PORTC et PORTD désignent les ports d’entrées
Y. RKHISSI KAMMOUN 39
Iset Nabeul Cours microcontrôleurs
binaires à 4bits A (a3a2a1a0) et B (b3b2b1b0), et le port PORTD représente les ports de la sortie
B (b4b3b2b1b0) affectée aux diodes LED permettant un affichage des résultats de sortie en
binaire (d4 étant la retenue).
Les bits PORTE.0, PORTE.1 et PORTE.2 représentent des entrées de sélection des opérations
à réaliser, comme le précise le tableau 1 :
Bits de sélection Opérations
PORTE.2 … PORTE.0
001 AND
010 OR
011 XOR
100 +
101 -
110 *
111 /
Tableau 1: Les opérations à réaliser
Etablir en premier lieu un programme en C permettant de réaliser les différentes opérations
désignées par le tableau 1 selon figure 3.
N.B : Penser à utiliser l’appel de fonctions spécifiques pour chaque opération.
Y. RKHISSI KAMMOUN 40
Iset Nabeul Cours microcontrôleurs
Figure 3 : UAL
RESULTAT
C1
U1 R1...R7
13 33
270R
15pF
OSC1/CLKIN RB0/INT
X1 14
OSC2/CLKOUT RB1
34
CRYSTAL 1 35
C2 MCLR/Vpp/THV RB2
36
RB3/PGM
2 37
RA0/AN0 RB4
3 38
VDD RA1/AN1 RB5
15pF 4 39
SW1 5
RA2/AN2/VREF-
RA3/AN3/VREF+
RB6/PGC
RB7/PGD
40 1
6
RA4/T0CKI
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI 0
SW -SPST
R9
8
9
RE0/AN5/RD
RC1/T1OSI/CCP2
RC2/CCP1
16
17
18
X
10
RE1/AN6/WR
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
23 0
10k 24
RC5/SDO
25
RC6/TX/CK
RC7/RX/DT
26 1
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
RD4/PSP4
27 1
28
RD5/PSP5
29
RD6/PSP6 0
PIC16F877
RD7/PSP7
30
Y
0
1
ENTREES
Figure 4 : Comparateur & compteur modulo 10
Y. RKHISSI KAMMOUN 41
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 42
Iset Nabeul Cours microcontrôleurs
CHAPITRE 4
LES INTERRUPTIONS
1. Principe
L'interruption est un mécanisme fondamental de tout processeur. Il permet de prendre en
compte des événements extérieurs au processeur et de leur associer un traitement spécifique..
Il faut noter que l'exécution d'une instruction n'est jamais interrompue ; c'est à la fin de
l'instruction en cours lors de l'arrivée de l'événement que le sous-programme d'interruption est
exécuté. A la fin de cette procédure, le microcontrôleur reprend le programme principal à
l'endroit ou il l'a laissé.
1. Le Mécanisme général d'une interruption est :
2. Le programme se déroule normalement
3. L'évènement survient
4. Le programme achève l'instruction en cours de traitement
5. Le programme saute à l'adresse de traitement de l'interruption
6. Le programme traite l'interruption
7. Le programme saute à l'instruction qui suit la dernière exécutée dans le programme
principal
Les interruptions peuvent être causées par des sources externes ou par des sources internes
- Sources externes:
broches parallèles (Exemples: clavier, alarme)
ports séries
- Sources internes
Timer
Convertisseur A-N
Reset
Y. RKHISSI KAMMOUN 43
Iset Nabeul Cours microcontrôleurs
- Timer 0
- Pin RB0
- Ch. RB4/RB7
- Convert. A/D
- Rx USART
- Tx USART
- Port série SSP
- Module CCP1
- Module CCP2
- Timer 1
- Timer 2
- EEPROM
- SSP mode I2C
- Port parallèle
2. 1 Programmer une interruption avec CCS
Source de l'interruption
La source de l'interruption est indiquée au début du sous-programme d'interruption par la
directive #int_XXXX (XXXX nom de l’interruption) .
#INIT_XXXX //Nom de l’interruption
Void nom de fonction (Void)
{
Instruction 1 ;
Instruction n ;
}
Exemple:
#int_ext : Cette directive identifie RB0 comme source de l'interruption : interruption externe
#int_rb : Changement d’état de RB4 à RB7.
#int_TIMER0 : débordement du timer0.
#int_EEPROM : fin d’écriture dans l’EEPROM.
Seules les broches définies en entrée peuvent déclencher une interruption. Ces directives ne
discriminent pas quelle entrée est la source, mais on peut utiliser bit_test()
Y. RKHISSI KAMMOUN 44
Iset Nabeul Cours microcontrôleurs
Validation de l'interruption
L'interruption ne peut être active que si elle est validée :
enable_interrupts(INT_EXT); // Valide l'interruption sur RB0
enable_interrupts(GLOBAL); // validation globale
VDD
C1 U2
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
15pF 1 35
MCLR/Vpp/THV RB2
X1 RB3/PGM
36
C2 CRYSTAL 2
RA0/AN0 RB4
37 R2
3 38 10k
RA1/AN1 RB5
4 39
RA2/AN2/VREF- RB6/PGC
5 40
15pF 6
RA3/AN3/VREF+ RB7/PGD D1
7
RA4/T0CKI
15
R1
RA5/AN4/SS RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2 220
8 17 LED-GREEN
RE0/AN5/RD RC2/CCP1
9 18
RE1/AN6/WR RC3/SCK/SCL
10 23
RE2/AN7/CS RC4/SDI/SDA
24
RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877
#include "16F877.H"
#use delay(clock=20000000)
#define LED PIN_C0 // Led temoin
Y. RKHISSI KAMMOUN 45
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 46
Iset Nabeul Cours microcontrôleurs
Y. RKHISSI KAMMOUN 47
Iset Nabeul Cours microcontrôleurs
delay_ms(200);
output_high(led);
delay_ms(200);
}
}
Y. RKHISSI KAMMOUN 48
Iset Nabeul Cours microcontrôleurs
CHAPITRE 5
LE CONVERTISSEUR ANALOGIQUE NUMERIQUE
1. Description
Ce module est constitué d'un Convertisseur Analogique Numérique CAN 10 bits dont l'entrée
analogique peut être connectée sur l'une des 8 entrées analogiques externes (RA0-RA5,RE0-
RE2). On dit qu'on a un CAN à 8 canaux. Les entrées analogiques doivent être configurées en
entrée à l'aide des registres TRISA et/ou TRISE.
Le PIC dispose d’un échantillonneur bloqueur intégré constitué d'un interrupteur S, d'une
capacité de maintien C=120 pF et d’un CAN 10 bits. Pendant la conversion, la tension Ve à
l'entrée du convertisseur A/N doit être maintenue constante.
Y. RKHISSI KAMMOUN 49
Iset Nabeul Cours microcontrôleurs
Temps d'acquisition
Temps de conversion
Le temps de conversion est égal à 12 TAD
Y. RKHISSI KAMMOUN 50
Iset Nabeul Cours microcontrôleurs
Exemple :
Vref+ = Vdd = 5V, Vref- = 0, Vin = 4 V
Q = 5V/1024 = 0,0048828125 V
N = 4V / 0,0048828125 = 819
3. Configuration du convertisseur
Avant de réaliser une conversion, il faut définir:
- L'horloge
- Le nombre d'entrées analogiques
- Le type de tension de référence (interne ou externe)
Choix de l'horloge
Syntaxe : setup_adc(XXX); // Utilisation de l'horloge interne(4 MHz)
XXX peut être :
- ADC_OFF : CAN désactivé
- ADC_CLOCK_INTERNAL : Utilisation de l'horloge interne
- ADC_CLOCK_DIV_2 : Utilisation de l'horloge interne divisée par 2
- ADC_CLOCK_DIV_8 : Utilisation de l'horloge interne divisée par 8
- ADC_CLOCK_DIV_32: Utilisation de l'horloge interne divisée par 32
Y. RKHISSI KAMMOUN 51
Iset Nabeul Cours microcontrôleurs
C1
LCD1
18PF LM041L
X1
CRYSTAL
C2
18PF
U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
+5V 2 36
RA0/AN0 RB3/PGM VDD
VDD
VSS
VEE
3 37
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
RA1/AN1 RB4
E
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT RV1
15
RC0/T1OSO/T1CKI
8 16
+88.8 RE0/AN5/RD RC1/T1OSI/CCP2
9 17
2
3
4
5
6
GND
R1 Volts
RE1/AN6/WR RC2/CCP1
10 18
58%
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
+88.8 25
50%
RC6/TX/CK
mA 26 1k
RC7/RX/DT
19
RD0/PSP0 1
1k 20
+88.8 RD1/PSP1 2
21
Volts
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4 3
28
RD5/PSP5 4
29
RD6/PSP6 5
30
RD7/PSP7 6
PIC16F877
VSS
#include <16F877.h>
#uses delay (clock=4000000)
#include <LCD.C> // appel du fichier contenant le driver du LCD
Y. RKHISSI KAMMOUN 52
Iset Nabeul Cours microcontrôleurs
void main()
{
float tension,quantum; //
}
}
Y. RKHISSI KAMMOUN 53
Iset Nabeul Cours microcontrôleurs
CHAPITRE 6
LES TIMERS
1. Présentation du Timer
Les Timers/compteurs sont des périphériques de gestion de temps. Ils permettent des réaliser
les fonctions suivantes :
- comptage des évènements
- synchronisation des signaux
- fixer le débit d’une liaison série synchrone ou asynchrone
- génération des événements périodiques (échantillonnage des signaux
analogiques, rafraichissement des afficheurs multiplexés …)
- génération des signaux périodiques (carré, MLI …)
- mesure de temps…
2. Fonctionnement du Timer
Les timers sont des compteurs formés généralement d’un pré-diviseur suivi d’un registre
compteur de 8 ou 16 bits. L’entrée d’horloge peut être interne (mode timer) ou externe (mode
compteur d’événements). Lorsque le registre compteur atteint sa valeur maximale et repasse à
0, un bit indicateur (flag) sera positionné et une interruption pourra être générée, informant
ainsi la CPU du débordement du timer. Il faut bien noter que le programmeur devra remettre à
zéro cet indicateur après chaque débordement.
Le microcontrôleur PIC16F877 dispose de trois timers appelés Timer0, Timer1 et Timer2
2.1 Timer 0
C’est un compteur 8 bits qui peut compter (de 0 à 255) :
- soit les impulsions de l’horloge via un prédiviseur : Mode Timer
- soit des impulsions externes, via la broche RA4 : Mode compteur
Mode Timer
Timer 0 est incrémenté à chaque cycle instruction ( Fosc/4), en considérant le prédiviseur
avec un rapport de 1.
Mode Compteur
Timer 0 est alors incrémenté à chaque front montant ou descendant sur la broche RA4.
Y. RKHISSI KAMMOUN 54
Iset Nabeul Cours microcontrôleurs
Prediviseur
Il est formé d’un pré-diviseur programmable (Programmable Prescaler) suivi d’un registre
compteur 8 bits (TMR0). Un prescaler ou prédiviseur permet de diviser la fréquence de
comptage.
Il est partagé entre le Watchdog et TMR0.
2.2 Timer 1
C’est un compteur 16 bits qui peut compter (de 0 à 65535) :
- soit les impulsions de l’horloge
- soit les impulsions externes, et en particulier les impulsions d’un quartz externe.
Mode Timer
Timer 1 est incrémenté à chaque cycle instruction ( Fosc/4), en considérant le prédiviseur
avec un rapport de 1, 2, 4, ou 8
Mode Compteur
Timer 1 s'incrémente à chaque front montant de l'horloge externe appliquée sur le RC0
L'horloge externe peut également être l'oscillateur interne, dont la fréquence est fixée par un
quartz externe branché entre la broche RC0 et la broche RC1.
Il peut être incrémenté en mode veille (Sleep), via l'horloge externe,
2.3 Timer 2
C’est un timer couplé au module dit CCP. Il est utilisé essentiellement pour la génération
d’impulsions à période ajustable (PWM).
Le timer 2 comporte un registre compteur 8 bits (TMR2) avec un prédivideur et un
postdiviseur. Ce timer admet uniquement une horloge interne (Fosc/4). Le prédiviseur peut
être paramétré par l’une de trois valeurs: 1, 4 ou 16 ; tant disque le postdiviseur permet des
divisions de 1 à 16 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ou 16.
Y. RKHISSI KAMMOUN 55
Iset Nabeul Cours microcontrôleurs
#include <16F877.h>
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
Y. RKHISSI KAMMOUN 56
Iset Nabeul Cours microcontrôleurs
void main() {
int_count = INTS_PAR_SECONDE;
setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // Démarrer le Timer 1
set_timer1(0);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while(TRUE) {
printf("Appuyer sur une touche pour commencer.\n\r");
getc();
int_count = INTS_PAR_SECONDE;
secondes = 0;
printf("Appuyer sur une touche pour arrêter.\n\r");
getc();
printf("%u Secondes.\n\r", secondes);
}
}
Y. RKHISSI KAMMOUN 57
Iset Nabeul Cours microcontrôleurs
Direction Générale des Etudes Technologiques, Institut Supérieur des Etudes Technologiques de
Nabeul
Examen
Microprocesseurs et Microcontrôleurs
ème
Filière : 2 Année Licence Appliquée en Génie Electrique – Année universitaire 2013-2014 –
Semestre 2
Classes : AII2
Durée : 1H30
Nombre de pages : 02
Documents : Non autorisés
Enseignants : Mme Yosra RKHISSI KAMMOUN et M. Nizar TOUJENI
Exercice 1 : (5 points)
A la présence d’une carte magnétique (p), une barrière automatique se lève jusqu’au contact
(b), elle reste levée pendant 10s ensuite elle s’abaisse pour retoucher le contact (a). Les
mouvements de la barrière sont possibles grâce à un moteur à 2 sens, commandé par deux
contacteurs. Ce cycle est décrit par le GRAFCET de point de vue PC suivant :
Figure 1
Un codeur optique à dix pas est installé sur l’arbre d’une machine tournante (M) afin de
détecter la position angulaire. Le code binaire de la position est fourni sur quatre bits (a3, a2,
Y. RKHISSI KAMMOUN 58
Iset Nabeul Cours microcontrôleurs
Figure 2
Le tableau suivant donne le code binaire de la position du disque incrémental :
Pas a3 a2 a1 a0
0 0 0 1 0
1 0 1 1 0
2 0 1 1 1
3 0 1 0 1
4 0 1 0 0
5 1 1 0 0
6 1 1 0 1
7 1 1 1 1
8 1 1 1 0
9 1 0 1 0
1. Dresser la table de vérité donnant les sorties (S3 S2 S1 S0) en fonction des sorties du
codeur optique (a3, a2, a1, a0).
2. Etablir un programme en C permettant de réaliser un codeur optique à dix pas à base d’un
PIC 16F877 en respectant la table des mnémoniques suivante :
Y. RKHISSI KAMMOUN 59
Iset Nabeul Cours microcontrôleurs
Figure 3
Y. RKHISSI KAMMOUN 60
Iset Nabeul Cours microcontrôleurs
BIBLIOGRAPHIE
[1] J-M Bernard, J Hugon, De la logique câblée aux microprocesseurs Tome 3: Méthodes de
conception de systèmes. Edité par Eyrolles (1984)
[2] R. Zakset A.Wolfe. Du composant au système – Introduction aux microprocesseurs.
Sybex, Paris, 1988.
[3] C. Tavernier, Les microcontrôleurs PIC Recueil d’applications. Dunod , Paris, 2005.
[4] C. Tavernier, Programmation en C des PIC. Dunod , Paris, 2005
[5] C. Tavernier, Les microcontrôleurs PIC Description et mise en œuvre. Dunod, Paris, 2000
[6] C. Tavernier, Les microcontrôleurs PIC 10, 12, 16 Description et mise en œuvre. Dunod ,
Paris, 2007
[7] B.Van Dam, 50 nouvelles applications des microcontrôleurs PIC. Elector, 2010
[8] P. Letenneur, Langage C (CCS Info pour les PICs), 2003
WEBORGRAPHIE
Y. RKHISSI KAMMOUN 61