Professional Documents
Culture Documents
Chapitre 1 Architecture Pic 16f877
Chapitre 1 Architecture Pic 16f877
1. Introduction
Dans un passé pas très lointain, l’électronique pour les amateurs (éclairés) se
résumait essentiellement aux circuits analogiques et éventuellement en logique
câblée (portes logiques, compteurs, registres à décalage…). 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, ram…) et programmer
en assembleur.
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.
On en trouve maintenant partout : automobile, lave-vaisselle, rasoir, brosse à
dent électrique…
L’offre en microcontrôleurs s’est développée d’autant : plus de périphériques
intégrés, capacité de calcul accrue, plus de mémoire embarquée. Il y a
maintenant de nombreux fabricants de microcontrôleurs, possédant chacun
plusieurs gammes allant du circuit « généraliste », véritable couteau suisse
électronique, à la puce spécialisée dédiée par exemple, à la régulation de vitesse
d’un moteur de ventilateur.
La voie royale pour tirer le maximum des performances de ces circuits est
toujours la programmation en assembleur. On accède alors au moindre bit enfoui
dans n’importe quel registre du circuit. Cela nécessite néanmoins un
investissement en temps conséquent, l’assembleur n’étant pas un langage très «
naturel ». De plus, d’un constructeur à l’autre, voire d’un circuit à l’autre dans la
même gamme, il existe des différences qui obligent à réapprendre tout ou partie
du langage lorsque l’on change de microcontrôleur. C’est un investissement
intéressant pour un professionnel qui cherche à produire un code optimisé sur la
puce la moins chère possible, mais pénible pour un amateur qui ne dispose que
de relativement peu de temps pris sur ses loisirs.
Heureusement, avec la montée en puissance des 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.
En assembleur ça donnerait :
- soulever pied droit
- avancer pied droit
- poser pied droit
- soulever pied gauche
- avancer pied gauche
En C ce serait plutôt :
- Ouvrir la fenêtre
« status reg », le registre « FSR reg » utilisé pour l’adressage indirect (en
assembleur…), le multiplexeur d’adresse « Addr mux », le compteur programme
« Program Counter » qui pointe les instructions à exécuter, la pile à 8 niveaux «
8 level Stack », le registre d’instruction « Instruction reg », ainsi que les
différents bus qui relient tous ces éléments entre eux.
4.2. La mémoire
Sur le PIC, il n’y a pas une mais trois mémoires :
4.4.La Mémoire RAM : qui fait partie de la zone d’adressage des données. Elle
comprend tous les registres spéciaux permettant de contrôler le cœur du PIC
ainsi que ses périphériques. Elle contient également des cases mémoires à usage
générique dans lesquelles pourront être stockées les variables de nos futurs
programmes.
L’espace mémoire RAM adressable est de 512 positions de 1 octet chacune :
* 96 positions sont réservées au SFR (Special Function Registers) qui sont les
registres de configuration du PIC.
* Les 416 positions restantes constituent les registres GPR (General Propose
Registers) ou RAM utilisateur. Sur le 16F876 et 16F877, 3 blocs de 16 octets
chacun ne sont pas implantés physiquement d’où une capacité de RAM
utilisateur de 368 GPR.
• Le PORT C (8 bits) I/O pure et/ou TIMER 1 et/ou SPI / I2C et/ou
USART.
• Le PORT D (8 bits) I/O pure et/ou port parallèle 8 bits associé au
PORT E.
• Le PORT E (3 bits) I/O pure et/ou pilotage du PORT E RE0/RD,
RE1/WR et RE2/CS.
Remarque :
Toutes les lignes de PORTs peuvent fournir un courant de 25mA par ligne de
PORT. Une limite de 40mA par PORT doit être respectée pour des questions
de dissipation.
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 », plusieurs options possibles : circuit RC
(résistance + condensateur), ou circuit résonateur céramique, ou oscillateur à
quartz... Le mode de fonctionnement est déterminé au moment de la
programmation du PIC par des « bits de configuration » qui sont en fait des
4.9.Les Timers
4.9.1.Le Timer TMR0
* Le contenu du timer TMR0 est accessible par le registre qui porte le même
nom. Il peut être lu ou écrit à n'importe quel moment. Après une écriture, le
timer ne comte pas pendant deux cycles machine
* Au débordement de TMR0 (FF → 00), le drapeau INTCON.T0IF est
placé à 1. Ceci peut déclencher l'interruption T0I si celle-ci est validée
* TMR1 peut fonctionner dans 3 modes différents :
- Timer Synchrone (horloge interne)
Hmaied Sarhene Page 10
Cours PIC16F877 2019/2020
En résumé, Si on note :
DIV1 : rapport du prédiviseur
DIV2 : Rapport du postdiviseur
P : Valeur placée dans le registre PR2
Tsy : période de l'horloge système,
la périodicité du drapeau TMR2IF est donnée par : TF2 = DIV1 x (P+1) x DIV2 x Tsy
Ces modules ne fonctionnent pas si TMR1 est configuré en mode Compteur non
synchronisé
Dans ce mode le contenu de TMR1 est copié dans CCPR1 chaque fois qu'un
événement intervient sur la broche RC2. Le choix de l'événement déclencheur se
fait en programmant le prescaler à l’aide des bits 0 à 3 du registre de contrôle
CCP1CON. On a le choix parmi les événements suivants :
* A chaque front descendant
* A chaque front montant (prescaler 1:1)
*A chaque 4ème front montant (prescaler 1:4)
* A chaque 16ème front montant (prescaler 1:16)
* mode 1000 :
Au moment de l'égalité, le drapeau CCP1IF est le bit RC2 passent à 1. C'est à
l'utilisateur de les remettre à 0 pour une prochaine utilisation. RC2 doit être
configuré en sortie.
* mode 1001 :
Au moment de l'égalité, le drapeau CCP1IF passe à 1 et le bit RC2 passe à 0.
C'est à l'utilisateur de les remettre à leur état d’origine pour une prochaine
utilisation. RC2 doit être configuré en sortie.
* mode 1010 :
A l'égalité le drapeau CCP1IF passe à 1. La broche RC2 n'est pas utilisée.
* mode 1011 :
A l'égalité, le drapeau CCP1IF passe à 1 et le timer TMR1 est remis à 0
5. Les interruptions
Une interruption provoque l’arrêt du programme principal pour aller exécuter
une procédure d'interruption. A la fin de cette procédure, le microcontrôleur
reprend le programme principal à l’endroit où il l’a laissé. A chaque interruption
sont associés deux bits, un bit de validation et un drapeau. Le premier permet
d'autoriser ou non l'interruption, le second permet au programmeur de savoir de
quelle interruption il s'agit.
Sur le 16F876/877, l'es interruptions sont classées en deux catégories, les
interruptions primaires et les interruptions périphériques. Elles sont gérées par
les registres :
* Toutes les interruptions peuvent être validées/interdites par le bit
INTCON.GIE
* Toutes les interruptions périphériques peuvent être validées/interdites par le bit
INTCON.PEIE
* Chaque interruption peut être validée/interdite par son bit de validation
individuel
6.1 Présentation :
La liaison USART du PIC peut fonctionner soit en mode synchrone ou
asynchrone, seul le mode asynchrone sera étudié.
La liaison série SCI est une interface série asynchrone de type START / STOP.
Elle permet d'effectuer des communications avec d'autres systèmes ou objets
techniques sur de longues distances (quelques mètres à quelques kilomètres).
6.2 Transmission
6.2.1. Présentation
6.2.2. Fonctionnement :
Pour que cette fonction soit opérationnelle, il faut que la broche RC6 du
PORTC soit configurée en sortie, positionner à 1 le bit SPEN du registre
RCSTA et le bit TXEN du registre TXSTA.
Dans le cas où l’on utilise une transmission sur 9 bits (Bit de parité par
exemple), il faut autoriser la transmission sur 9 bits via le bit TX9 du registre
TXSTA, la valeur du neuvième bit doit être mise dans le bit TX9D du registre
TXSTA.
Avant de transmettre une information, il faut s’assurer que le registre de
transmission soit libre à travers le bit TXIF (1 libre et 0 occupée). Le bit TMRT
du registre TXSTA indique si la transmission est complètement terminée (1
terminée et 0 occupée).
6.3. La réception
6.3.1. Présentation
6.3.2. Fonctionnement :
Si le PIC termine la réception d'un octet avant que l'octet précédent qui se trouve
dans SSPBUF n'ait été lu, on a un Overflow qui sera signalé par le drapeau
SSPOV. Le transfert n'a pas lieu, l’octet arrivé est perdu.
Mode slave : L'horloge est générée par le circuit (master) avec lequel on
communique. Notre Pic démarre une émission/réception au moment ou il
commence à recevoir l'horloge venant du maître