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).
RAPPELS SUR LES COMMANDES NUMERIQUES
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
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 Bus de Données
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.
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 I NTCON
3 /PD
1 DC
PR2 SSPADD SSPATAT
TXSTA SPBRG
ADCON1
REGISTRE D’ETAT (STATUS) Bit
7 IRP
Symbole C
6 RP1
5 RP0
4 /TO
Fonction
Retenue
2 Z
0 C
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.
SUBLW k
Vecteur 0000H 0004H
; 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
ANDLW k
; 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 = W & f ; si d=1 alors f = W & f ; W = W & #k
COMF f,d PORT D’ENTREE / SORTIE PARALLELE
Pour la plupart des ports, la direction des i nformations (entrée ou sortie) est contrôlée par le r egistre 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 s ortie 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 = f - W ; si d=1 alors f = f - W ; W = #k – W
INCF f,d
ANDWF f,d Source RESET INTERUPT
; 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