cours « initiation aux microcontroleurs pic de microchips

publicité
COURS « INITIATION AUX
MICROCONTROLEURS PIC DE
MICROCHIPS »
Bus d'Adresse
BUT DU COURS « INITIATION AUX
MICROCONTROLEURS PIC DE
MICROCHIPS »
Le but de ce cours est d’aborder le développement de
programmes en assembleur et la mise en œuvre matérielle pour
les microcontrôleurs Microchip (PIC) de moyenne gamme (MIDRANGE).
Processseur
Décodeur
Mémoire
Programme
(EPROM)
Instruction
Mémoire
Données
(RAM)
Ports
Entrée/Sortie
Donnée
Donnée
Commande
Statut
Bus de données
RAPPELS SUR LES COMMANDES
NUMERIQUES
Processeur
Le processeur lit et exécute les instructions du programme.
Les instructions sont des opérations de logique, d'arithmétique,
de test ou de transfert.
Les données sont reçues par les ports d’entrée ou stockées dans
la mémoire de données.
AUTOMATISME
Mémoire Programme
Un équipement est dit automatique quand il est capable de
prendre des décisions ponctuelles sans intervention humaine.
Le programme est mémorisé sous forme d'instructions
élémentaires dans une mémoire de programme non volatile.
Ces instructions sont accessibles par l’intermédiaire de leur
adresse de stockage.
Un automatisme comporte toujours deux parties :
– Une PARTIE OPERATIVE (P.O.) dont les actionneurs
(moteurs, vérins,...) agissent dans un processus,
– Une PARTIE COMMANDE (P.C.) qui coordonne les
différentes actions de la partie opérative.
Mémoire Données
Les données sont mémorisées temporairement sous forme de
mots dans la mémoire de données. Ces données sont accessibles
par l’intermédiaire de leur adresse de stockage.
Port d’Entrée/Sortie
Cette fonction échange les informations de commande et de
statut avec la partie opérative. Ces échanges sont arrangés par
l’intermédiaire d’une adresse de sélection
Dans un automatisme numérique, la partie commande est une
commande numérique.
Le Statut est constitué des informations d'entrée de la commande
numérique.
La Commande constitue l’information de sortie de la commande
numérique.
Le calculateur élabore les commandes, en fonction du statut,
suivant une séquence d'opérations numériques.
La séquence des opérations numériques est décrite dans un
programme d'instructions.
COMMANDES NUMERIQUES
ORGANISATION FONCTIONNELLE
Le schéma synoptique suivant représente une organisation
classique de commande numérique de type VON-NEUMAN.
Bus de Données
Ce bus transfert les informations, instructions ou données, entre
des fonctions internes de la commande numérique.
Bus d’Adresse et Décodeur
L’adresse est un numéro d'ordre, émis par le processeur, qui
permet d’accéder à tous les périphériques.
Le décodeur d’adresse décode une partie du bus d’adresse pour
activer la fonction périphérique concernée.
ORGANISATION SEQUENTIELLE
L’organigramme suivant représente l'organisation séquentielle de
base des commandes numériques.
MICROPROCESSEURS RISC ET CISC
Reset
Les microprocesseurs CISC (Complex Instruction Set
Computing) sont dotés d’un jeu étendu d’instructions complexes.
Ces instructions sont relativement lentes. Les microprocesseurs
CISC privilégient la puissance de traitement au détriment de la
rapidité.
Initialiser
Les microprocesseurs RISC (Reduced Instruction Set
Computing) sont munis d’un jeu réduit d’instructions simples.
Ces instructions sont adaptées et sont très rapides.
Lire Statut
MICROCONTROLEURS
Calculer Commande
Sortir Commande
Temporiser
Les Microcontrôleurs sont des circuits intégrés qui contiennent,
dans un circuit unique, toutes les fonctions d’une commande
numérique classique.
C'est-à-dire :
- le microprocesseur ;
- les mémoires de programme et de données ;
- les ports d’entrée et de sortie parallèle ou série ;
- les bus de données et d’adresse ;
- d’autres périphériques (compteur/timer, convertisseurs
analogique/numérique, etc).
Le RESET fait débuter le fonctionnement de la commande par
une phase d'initialisation.
SEQUENCE DU PROCESSEUR
La commande effectue la lecture du statut actuel.
Le grafcet suivant reproduit le cycle de fonctionnement d’un
processeur :
D’après les informations contenues dans le statut, la commande
numérique élabore un ordre qu’elle transfert en sortie.
RESET
Début Programme
Enfin la commande peut effectuer une période de temporisation
avant de recommencer le cycle par une nouvelle lecture du statut.
1
MICROPROCESSEURS
1
Lecture Instruction
ARCHITECTURE CLASSIQUE VON-NEUMANN
Transfert ?
Architecture Von-Neumann
Transfert Données
1
CPU
Mémoire
Programme
et
Mémoire
Donnée
L’architecture Von-Neumann utilise un seul bus pour transmettre
les instructions (programme) et les données.
Cette architecture ne permet pas de lire les instructions pendant
la lecture ou l’écriture d’une donnée.
ARCHITECTURE HARVARD
Architecture Harvard
Mémoire
Programme
CPU
Mémoire
Donnée
L’architecture utilise deux bus séparés. Un bus pour les
instructions (programme) et un autre bus pour les données.
Avec cette architecture ont peut lire les instructions pendant la
lecture ou l’écriture des données (pipeline). L’architecture
Harvard est plus rapide.
Test ?
Saut Programme
1
Calcul ?
Exécution calcul
1
Suite Programme
Le RESET fait débuter le processeur par la première instruction
du programme. Le processeur lit cette instruction en
sélectionnant son adresse dans la mémoire de programme.
Les instructions sont des opérations de calcul, de test ou de
transfert :
– En cas de transfert, le processeur effectue un cycle de
lecture ou un cycle d'écriture ;
– En cas de test, le processeur fait un choix entre deux
branches de programme ;
– En cas d'opération de calcul, le processeur exécute
l'opération.
Le processeur détermine l'adresse de la prochaine instruction et
continue la séquence par la lecture de la prochaine instruction.
LANGAGE DE PROGRAMMATION
-
Edition de programme
-
Le programmeur édite, enregistre et teste le programme sur un
ordinateur équipé pour le développement du logiciel et la
programmation du microcontrôleur ou d’une mémoire non
volatile.
Les programmes peuvent être écrits à trois niveaux différents :
– Langage évolué (Pascal, Basic, Langage C, etc),
– Assembleur (mnémonique et opérande),
– Langage machine (binaire ou hexadécimal).
-
des périphériques de comptage et temporisation
sophistiqués ;
des convertisseurs analogique/numérique internes ;
des capacités mémoires étendues pour le code et les
données ;
des périphériques de communication évolués
(I2C™/SPI™/ USB/CAN ports et USARTs) ;
une technologie de programmation in situ (sur carte) ;
des mémoires Flash, EEPROM, OTP et ROM.
Les Microcontrôleurs PIC sont répartis en trois gammes en
fonction de la largeur des mots d’instructions.
- Base-Line : instruction sur 12 bits,
- Mid-Range : instruction sur 14 bits,
- High-End : instruction sur 16 bits.
LES MICROCONTROLEURS MIDRANGE DE MICROCHIPS (PIC16CXXX)
ARCHITECTURE COMPLETE.
Le programme binaire est transféré dans une mémoire non
volatile.
Cette mémoire et sont logiciel sont implantés sur la carte de
commande ou dans un microcontrôleur.
QUI EST MICROCHIPS
Microchip Technology Incorporated fabrique, entre autres, les
produits suivants :
- les microcontrôleurs picmicro®,
- des microcontrôleurs radio rfPIC,
- des microcontrôleurs dsp dspic®,
- des circuits analogiques et des interfaces,
- des circuits d’authentification keelok®,
- des eeproms séries…
L’entreprise Microchip Technology Incorporated a été fondée en
1989. Sont siège est installé à Chandler en Arizona (USA).
Elle emploie 3400 personnes.
Microchips est le premier fournisseur mondial de
microcontrôleurs 8 bits.
Les microcontrôleurs de Microchips sont commercialisés sous la
marque PIC®.
Depuis leur lancement, en 1990, plus de 3 milliards de PIC
auraient été livrés.
Il y aurait plus de 212 types de microcontrôleurs différents.
L’architecture des PICs est de type Harvard à noyau RISC.
Cette architecture reste compatible à travers une famille de 8 à 84
broches. Ce qui permet une migration aisée avec très peu de
changement dans les programmes.
Les caractéristiques avancées sont :
PIC16C712 (REMPLACE LE PIC 16C71)
Mémoire programme
EEPROM data
Ram
Port I/O
Boîtier
CAN
1 Générateur PWM
Compteur/Timer
1024*14
256 octets
8 (Port B) + 5 (Port A)
18 broches
4 entrées sur 8 bits
10 bits
1 x 16 bits + 2 x 8 bits + WDT
Fréquence max
ICSP (programmation in situ)
BOR (reset à l’affaiblissement
de tension)
CCP (comparaison et capture
PWM)
20 MHz
oui
oui
oui
1024*14
64
68 octets
8 (Port B) + 5 (Port A)
18 broches
1 x 8 bits + WDT
20 MHz
Oui
Non
Non
PIC16F877A (REMPLACE LE PIC 16F877)
Mémoire programme Flash
EEPROM data
Ram
Port I/O
Boîtier
CAN
Comparateurs
1 Générateur PWM
Compteur/Timer
Fréquence max
Port série
ICSP (programmation in situ)
BOR (reset à l’affaiblissement
de tension)
CCP (comparaison et capture
PWM)
8192*14
256
368 octets
3 x 8 (Port B,C,D) + 6 (Port
A) + 3 (port E)
40 broches
8 entrées sur 10 bits
2
2 x 10 bits
1 x 16 bits + 1 x 8 bits + WDT
20 MHz
USART, I²C, SPI
Oui
Oui
2
CHAMPS MEMOIRE
MEMOIRE DE PROGRAMME
1FFFh
2ko (page 3)
1800h
17FFh
2ko (page 2)
1000h
0FFFh
2ko (page 1)
08000h
07FFh
2ko (page 0)
0000h
Memory
rganization
Bank 0
Bank 1
Bank 2
Bank 3
128 o
128 o
128 o
128 o
Bank 0
Bank 1
Bank 2
Bank 3
Zone libre
Zone libre
Zone libre
Zone libre
SFR
SFR
SFR
SFR
7Fh
00h
PIC16F84A (REMPLACE LE PIC 16F84)
Mémoire programme Flash
EEPROM data
Ram
Port I/O
Boîtier
CAN
1 Générateur PWM
Compteur/Timer
Fréquence max
ICSP (programmation in situ)
BOR (reset à l’affaiblissement
de tension)
CCP (comparaison et capture
PWM)
MEMOIRE DE DONNEES
RAM INTERNE
7Fh
20h
1Fh
00h
REGISTRES SPECIAUX (SFR)
Add
00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch
0Dh
0Eh
0Fh
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch
1Dh
1Eh
1Fh
Bank 0
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
PORTC
PORTD
PORTE
PCLATCH
INTCON
PIR1
PIR2
TMR1L
TMR1H
T1CON
TMR2
T2CON
SSPBUF
SSPCON
CCPR1L
CCPR1H
CCP1CON
RCSTA
TXREG
RCREG
CCPR2L
CCPR2H
CCP2CON
ADRES
ADCON0
Bank 1
INDF
OPTION_REG
PCL
STATUS
FSR
TRISA
TRISB
TRISC
TRISD
PORTE
PCLATCH
INTCON
PIE1
PIE2
PCON
OSCCAL
Bank 2
INDF
TMR0
PCL
STATUS
FSR
Bank 3
INDF
OPTION_REG
PCL
STATUS
FSR
PORTB
PORTF
PORTG
TRISB
TRISF
TRISG
PCLATCH
INTCON
PCLATCH
INTCON
3
/PD
1 0
DC C
PR2
SSPADD
SSPATAT
TXSTA
SPBRG
ADCON1
REGISTRE D’ETAT (STATUS)
Bit
7
IRP
Symbole
C
6
5
RP1 RP0
4
/TO
Fonction
Retenue
2
Z
DC
Z
/PD
/TO
RP0
RP1
IRP
Retenue décimale (pour les opérations BCD).
Zéro
Power Down
Time Out (WDT)
Bit 0 de sélection de banque de registre.
Bit 1 de sélection de banque de registre.
Sélection de banque de registre en accès indirect
OPERATIONS
Opérations arithmétiques
ADDWF f,d
ADDLW k
SUBWF f,d
RP1
0
0
1
1
RP0
0
1
0
1
Banque de Registre
Banque 0
Banque 1
Banque 2
Banque 3
Adresse
000h—07Fh
080h—0FFh
100h—17Fh
180h—1FFh
RESET ET VECTEUR D’INTERRUPTION
Le tableau suivant donne les adresses ou le microcontrôleur doit
trouver le programme principal et le sous-programme
d’interruption.
Source
RESET
INTERUPT
Vecteur
0000H
0004H
SUBLW k
; si d=0 alors W = f + #1
; si d=1 alors f = f + #1
DECF f,d
; si d=0 alors W = f - #1
; si d=1 alors f = f - #1
Opérations logiques
ANDWF f,d
; si d=0 alors W = W & f
; si d=1 alors f = W & f
ANDLW k
; W = W & #k
COMF f,d
; si d=0 alors W = /f
; si d=1 alors f = /f
IORWF f,d
; si d=0 alors W = W + f
; si d=1 alors f = W + f
; W = W + #k
IORLW k
XORWF f,d
XORLW k
JEU D’INSTRUCTIONS
TRANSFERTS
MOVF f,d
;si d=0 alors W = f
;si d=1 alors f = f (permet de tester un registre)
MOVWF f
MOVLW k
CLRF
CLRFW
CLRWDT
;f=W
; W = #k
;f=0
;W=0
; WDT = 0
; si d=0 alors W = f - W
; si d=1 alors f = f - W
; W = #k – W
INCF f,d
PORT D’ENTREE/SORTIE PARALLELE
Pour la plupart des ports, la direction des informations (entrée ou
sortie) est contrôlée par le registre de direction TRIS.
TRISx contrôle la direction du PORTx.
Un bit à 1 pour TRISx, correspond à une entrée pour le PORTx.
Un bit à 0 pour TRISx, correspond à une sortie pour le PORTx.
La lecture d’un PORT, prend en compte le niveau logique de la
broche et non celui du registre du PORT.
; si d=0 alors W = W + f
; si d=1 alors f = W + f
; W = W + #k
RLF
f,d
RRF
f,d
; si d=0 alors W = W ⊕ f
; si d=1 alors f = W ⊕ f
; si d=1 alors W = W ⊕ #k
; si d=0 alors W = < f
; si d=1 alors f = < f
; si d=0 alors W = f >
; si d=1 alors f = f >
BCF f,b
BSF f,b
; bit f.b = 0
; bit f.b = 1
SWAPF f,d
; échange les demi octets
SAUTS
CALL a
GOTO a
BTFSC f ,b
BTFSS f,b
RETFIE
RETURN
RETLW k
DECFSZ f,d
INCFSZ f,d
; appelle le sous programme à l’adresse #a
; saut à l’adresse #a
; si f.b = 0 alors sauter1 ligne
; si f.b = 1 alors sauter1 ligne
; retour d’interruption
; retour de sous-programme
; W = #k et RETURN
; DECF et si Zéro alors sauter1 ligne
; INCF et si Zéro alors sauter1 ligne
NOP
; aucune opération
SLEEP ; mode veille
Téléchargement