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