Le microcontrôleur PIC 16F876
Transcription
Le microcontrôleur PIC 16F876
STI2D -SIN Microcontrôleur 16F876 LE MICROCONTRÔLEUR PIC 16F876 I – INTRODUCTION Les microcontrôleurs PIC utilisent un jeu d'instructions réduit, d'où leur nom d’architecture : RISC (Reduced Instructions Set Computer). Les instructions sont codées sur un nombre réduit de bits, ce qui accélère l'exécution du programme (1 cycle machine par instruction sauf pour les sauts qui requirent 2 cycles). En revanche, le nombre limité d’instructions oblige à se restreindre à des instructions basiques, contrairement aux systèmes d'architecture CISC (Complete Instructions Set Computer) qui proposent plus d'instructions, donc codées sur plus de bits, mais réalisant des traitements plus complexes. Il existe trois familles de PIC : Base-Line : Mid-Line : High-End : les instructions sont codées sur 12 bits. les instructions sont codées sur 14 bits. les instructions sont codées sur 16 bits. Ils ne communiquent avec l'extérieur que par des ports d’entrées/sorties (ils ne possèdent pas de bus d'adresses, de bus de données et de bus de contrôle comme la plupart des microprocesseurs). Ces microcontrôleurs méritent bien une introduction. En effet, ils ont été conçus sur une architecture dite HARVARD (RISC) et non sur un modèle VON NEUMANN (CISC). 1 L’architecture VON NEUMANN employée par la plupart des microcontrôleurs actuels (INTEL80XX, motorola HC05, HC08 et HC12, ou ZILOG Z80) est basée sur un bus de données unique. Celui-ci véhicule les instructions programme) et les données. (du CPU 8 Mémoires programme et données 2 L’architecture HARVARD utilisée par les microcontrôleurs PIC est basée sur deux bus de données. Un bus est utilisé pour les données et un autre pour les instructions (du programme). Mémoire données Page 1 / 14 8 CPU 14 Mémoire programme STI2D -SIN Microcontrôleur 16F876 Avantages et inconvénients des deux architectures: Architecture VON NEUMANN (MOTOROLA, INTEL, ZILOG, ..) Jeu d’instructions riches. Accès à la mémoire facile. Avantages Inconvénients Architecture HARVARD (RISC) (MICROCHIP PIC) Jeu d’instructions pauvre, mais facile à mémoriser. Le codage des instructions est facile, chaque instruction est codée sur un mot et dure un cycle machine. Le code est plus compact. Le temps pour exécuter une Le jeu d’instructions est très instruction est variable. pauvre, par exemple pour effectuer Le codage des instructions se fait une comparaison il faut faire une sur plusieurs octets. soustraction. Les accès aux registres internes et la mémoire sont très délicats. Remarque : Le format des instructions du programme spécifié pour un PICs s’exprime en kilo Mots (14 bits pour la famille 16F87X) et non en kilo octets. Comme chaque instruction est codée par un mot de 14 bits, comparées aux microcontrôleurs classiques (1, 2 ou 3 octets par instruction), les PICs ont des codes instruction plus compacts et utilisent moins de mémoire. II - CARACTÉRISTIQUES DU 16F876-20 Que signifie 16F876-20 : 16 : le circuit appartient à la série Mid-Line. F : la mémoire programme est de type FLASH. 876 : type. 20 : Quartz à 20MHz au maximum. Caractéristiques de quelques PICs – Extrait du document constructeur: Page 2 / 14 STI2D -SIN Microcontrôleur 16F876 III - ARCHITECTURE INTERNE DU 16F876 Page 3 / 14 STI2D -SIN Microcontrôleur 16F876 1 - Unité Arithmétique et logique ALU Comme son nom l’indique, l’unité arithmétique et logique (ALU) effectue au sein du microcontrôleur PIC toutes les opérations arithmétiques et logiques dans un format de données 8 bits (addition, soustraction, comparaison logique, ET logique, etc…). Ces opérations sont effectuées entre le registre de travail W et une opérande provenant d’un registre de la RAM. Les trois bits de poids faible du registre STATUS sont affectés par le résultat de l’opération effectuée par l’ ALU . Registre STATUS: Z DC C D7 D6 D5 D4 D3 D2 D1 D0 Z (Zéro): ce bit est mis à l’état logique “1” si le résultat de l’opération effectuée est nul. DC (Digit Carry): ce bit de demiretenue est mis à l’état logique “1” si l’opération effectuée entraîne la mise à l’état logique “1” du bit n°4 du résultat. C (Carry): ce bit de retenue est mis à l’état logique “1” si l’opération effectuée entraîne un résultat dont le format est supérieur à 8 bits. 2 - Description des autres éléments une mémoire morte de type FLASH de 8 kMots (1Mot = 14 bits). une mémoire vive RAM de 368 octets. une mémoire EEPROM de 256 octets pour sauvegarder des paramètres. un chien de garde WDT (Watch Dog Timer), dispositif permettant une initialisation du PIC lorsque le programme s’exécute en dehors du temps imparti (erreur programme). une surveillance de la tension d’alimentation BOR (Reset si chute de tension VDD). 22 lignes d’entrées/sorties (chaque sortie peut supporter un courant maximum de 25mA). 3 Temporisateurs (TIMERs) qui permettent de compter des impulsions reçues sur le microcontrôleur PIC ou de compter les cycles d’horloge du microcontrôleur PIC (afin de programmer des temporisations). Page 4 / 14 STI2D -SIN Microcontrôleur 16F876 un module de débogage in-situ ICD ( In Circuit Debugger ). 2 modules CCP1-2 (Capture Compare PWM) fonctionnant dans l’un des trois modes suivants : Mode capture (CAPTURE) : ce mode permet en outre d’effectuer des mesures de temps. Mode comparaison (COMPARE) : ce mode permet en outre de générer des événements périodiques. Mode PWM (PULSE WIDTH MODULATION) : ce mode permet de générer des signaux dont le rapport cyclique est variable. un convertisseur analogique/numérique 10 bits avec 5 entrées analogiques multiplexées du port A. une interface de communication USART/SCI (Universal Synchronous & Asynchronous Receiver Transmitter). une interface de communication série synchrone SSP/SPI et I2C. un oscillateur interne qui permet une fréquence maximale d’oscillation f élevée de 20 MHz. La fréquence de fonctionnement réelle du microcontrôleur PIC est égale à la fréquence de l’oscillateur divisée par 4, soit 5 MHz. Une instruction standard dure donc une période d’horloge, soit 200 ns. ( nano = 10-9 ) Une seule tension d'alimentation comprise entre 4V et 5,5V. Page 5 / 14 STI2D -SIN Microcontrôleur 16F876 IV - DESCRIPTION DES DIFFÉRENTES BROCHES DU 16F876 Voir tableau page suivante. a - MCLR : cette broche sert à initialiser le microcontrôleur PIC: à la mise sous tension par un front montant (min 72 ms, max 72 ms +1024 x Tosc). Cette initialisation est appelée POR (POWER ON RESET). Cette broche peut être simplement reliée à l’alimentation VDD si on n’a pas besoin de RESET externe. par la mise à l’état bas de cette broche, reset externe (EXTERNAL RESET). Si on souhaite implanter un bouton de remise à zéro, on pourra câbler un simple réseau RC sur la broche MCLR. Remarque importante : On peut se passer de circuit RC à la seule condition que le temps de monté de la tension d’alimentation VDD soit suffisamment rapide (au minimum 50 mV/ms). Le microcontrôleur PIC possède d’autres sources de reset mais cette fois-ci internes (WDT et BOR vues précédemment). b - OSC1 et OSC2: ces broches permettent de faire fonctionner l’oscillateur interne du microcontrôleur PIC de trois façons différentes. Un quartz ou résonateur céramique permet d’obtenir une fréquence de fonctionnement très précise (voir document constructeur pour les valeurs des condensateurs C1, C2 et de la résistance RS). Page 6 / 14 STI2D -SIN Microcontrôleur 16F876 Un oscillateur externe permet une synchronisation avec un autre circuit. Un simple réseau RC peut suffire, l’oscillateur est peu précis mais économique. c - VDD et VSS: broches d’alimentation du circuit (la tension VDD peut être comprise entre 4V à 5,5V). Les ports du microcontrôleur 16F876 sont couplés à différents modules (Timers (ports A et C), convertisseur analogique numérique (port A), plusieurs types de liaisons séries (port C). C’est pour cette raison que le nom de ces broches comportent plusieurs désignations (ex: RA0/AN0, broches RA0 couplée au convertisseur A/N). d - RA0 à RA5: 6 broches du port A. Chaque ligne peut être configurée individuellement en entrée ou en sortie. e - RB0 à RB7: 8 broches du port B. Chaque ligne peut être configurée individuellement en entrée ou en sortie. Les broches RB6/PGC (ProGramming Clock) et RB7/PGD (ProGramming Data) permettent la connexion à un module ICD (In Circuit Debugger, mise au point de programme sur site). f - RC0 à RC7: 8 broches du port C. Chaque ligne peut être configurée individuellement en entrée ou en sortie. Page 7 / 14 STI2D -SIN Microcontrôleur 16F876 Extrait du document constructeur décrivant le rôle des broches Page 8 / 14 STI2D -SIN Microcontrôleur 16F876 V - MÉMOIRES ET REGISTRES Comme les microcontrôleurs PIC utilisent un bus pour les instructions et un bus pour les données, il faut considérer deux plans mémoire l’un pour les instructions et l’autre pour les données ainsi que les registres internes. 1 - Plan Mémoire pour les instructions (code programme) Le plan mémoire est linéaire. Les adresses vont de $0000 à $1FFF (8 k mots de 14 bits), par page de 2 K mots. On peut remarquer, le vecteur d’initialisation (de reset) est figé à l’adresse $0000. Les microcontrôleurs PIC n’ont qu’un seul vecteur d’interruption à l’adresse $0004. Lors d’une demande d’interruption, le sous programme associé doit déterminer quel périphérique a demandé cette interruption. Les piles utilisées par les sous programmes ne sont pas implantées en mémoire de données comme dans le cas d’un microcontrôleur classique, mais dans la mémoire programme. Elles sont utilisées lors d’appels de sous programmes, on ne peut pas imbriquer plus de 8 sous programmes (ce qui est déjà beaucoup). Page 9 / 14 STI2D -SIN Microcontrôleur 16F876 2 - Plan Mémoire des données et des registres internes Registres internes : SFR (Special Function Register) Le plan mémoire des données et des registres internes est découpé en 4 zones ou banks de 128 octets. Pour accéder à une zone, il faut positionner les bits RP0 (bit n°5) et RP1 (bit n°6) du registre STATUS. VI - JEU D’INSTRUCTIONS Le microcontrôleur PIC 16F876 possède 35 instructions de bases. Chaque instruction ne dure qu’un cycle machine (4/f Q) sauf les instructions de sauts telles que GOTO, CALL, … Page 10 / 14 STI2D -SIN Microcontrôleur 16F876 VII - MODES D’ADRESSAGES 1 - Adressage inhérent ou implicite Le mnémonique de l'instruction mentionne la donnée sur laquelle porte l'opération (contenu des registres). Aucune donnée n’est nécessaire. Exemples: CLRW NOP SLEEP ; Mise à zéro de W ; Aucune opération (temporisation) ; Mise en sommeil du PIC 2 - Adressage immédiat L'instruction porte sur une valeur constante indiquée immédiatement après le mnémonique. Syntaxe: MNÉMONIQUE Exemples: MOVLW ADDLW constante 255 0x20 ; Charger 0xFF dans W ; Additionner 32 avec W et mettre le résultat dans W 3 - Adressages direct et étendu Les microcontrôleurs PIC ne disposent pas vraiment de modes d’adressages DIRECT et ÉTENDU, l’adressage de la mémoire de données se fait dans la page sélectionnée par les bit n°5 (RP0) et n°6 (RP1) du registre STATUS: Registre STATUS: IRP RP1 RP0 TO PD D7 Syntaxe: MNÉMONIQUE D6 D5 D4 D3 Z DC C D2 D1 D0 f,d Si d = 0 Registre W comme destination (WORKING) Si d = 1 Registre f comme destination (un des registres SFR) Exemple: PORTB EQU 0x06 VARIABLE EQU 0x01 : page 0 S’assurer que nous sommes bien en BANK 0 BCF STATUS,5 BCF STATUS,6 ; RP0 = 0 et RP1 = 0 sélection de la BANK 0 MOVF MOVWF VARIABLE,0 ; Transférer le contenu de VARIABLE dans W PORTB ; Transférer le contenu de W dans le registre ; PORTB Si le port B est configuré en sortie, tous les bits de ce port sont à l’état logique “0” sauf le bit de plus faible poids. Page 11 / 14 STI2D -SIN Microcontrôleur 16F876 4 - Adressage relatif Ce mode d'adressage n’existe pas vraiment, mais des instructions permettent de réaliser des sauts de programme, ceux sont les instructions GOTO et CALL. Syntaxe: MNÉMONIQUE Adresse Exemples: Sauts dans la même page mémoire; CALL TEMPO ; Appeler le sous programme TEMPO GOTO FIN ; Branchement à l’étiquette FIN 5 - Adressage indirect ou indexé Les microcontrôleurs PIC disposent à travers les registres INDF (ou f0) et FSR (ou f4) d’un mode d’adressage indexé. La structure est un peu particulière, le registre FSR est le registre d’index et le registre INDF permet d’accéder à son contenu. Syntaxe: MNÉMONIQUE INDF,d Exemple: Récupérer le 4ème élément d’une table TAB_VAL : PORTB TAB_VAL[4] MOVLW ADDLW TAB_VAL 4 ; W Adresse de TAB_VAL ;WW+4 MOWF MOVF MOVWF FSR INDF,0 PORTB ; Adresse + 4 dans le registre d’index FSR ; Transfert du contenu de TABLE[4] dans W ; Transfert du contenu de W dans le registre PORTB Page 12 / 14 STI2D -SIN Microcontrôleur 16F876 6 - Manipulation de bits a - Forçage de bits Il s’agit de 2 instructions permettant de mettre à l’état logique “0” ou “1” un bit d'un octet de l'espace mémoire SFR. Elles sont le plus souvent utilisées pour positionner des bits des registres du microcontrôleur PIC. Syntaxe: ou Exemples: BSF f,b BCF f,b pour mettre à l’état logique “1” pour mettre à l’état logique “0” BCF PORTA,2 BSF STATUS,0 ; Mise à l’état logique “0” du bit n°2 du registre ; PORTA ; Mise à l’état logique “1”du bit n°0 du registre STA; TUS, c'est-à-dire la retenue (CARRY) b - Test de bits. Il s’agit de 2 instructions permettant de tester un bit d'un octet de l'espace mémoire SFR. Elles sont le plus souvent utilisées pour déterminer l’état des bits des registres du microcontrôleur PIC. En fonction du résultat du test : le programme se poursuit avec l'instruction suivante (résultat du test faux). le programme saute l’instruction qui suit le test. Syntaxe: ou Exemple: SINON FSI BTFSS BTFSC f,b f,b MOVF CMP,1 BTFSS GOTO MOVLW MOVWF GOTO DECF ……….. ………. STATUS,Z SINON 0xFF CMP FSI CMP,1 ; Transférer le contenu CMP dans CMP ; Cela permet de tester si le contenu de CMP ; est nul en positionnant le bit Z ; Tester le bit Z ? ; Z = “0” alors exécuter le code pour SINON ; Alors CMP 0xFF ; aller à FSI ; CMP CMP -1 (Décrémenter CMP) Page 13 / 14 STI2D -SIN Microcontrôleur 16F876 VIII - CONFIGURATION DES PORTS (REGISTRES PORTX ET TRISX) Tous les ports sont pilotés par deux registres : le registre TRISX. C’est le registre de direction. Il détermine si le port X ou certaines lignes de port fonctionnent en entrée ou en sortie. L’écriture d’un “1” logique correspond à une entrée (“1” comme Input) et l’écriture d’un “0” logique correspond à une sortie (“0” comme Output). le registre PORTX. Il détermine l’état des lignes configurées en sortie par TRISX. Remarques: lors de l’initialisation (RESET), toutes les lignes des ports sont configurées en entrées. les registres TRISX appartiennent à la BANQUE 1. Lors de l’initialisation du microcontrôleur PIC, il ne faut pas oublier de changer de page mémoire pour les configurer. Exemple : On souhaite obtenir la configuration suivante des ports A et B (S: sortie, E: entrée). Sens NC NC Port A NC NC RA5 RA4 RA3 RA2 RA1 RA0 Sens E Port B E S S E S S E S S S S E E RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 Les registres TRISX devront donc avoir le contenu suivant: TRISA = B’xx010001’ TRISB = B’11001001’ Programme en assembleur ; Accéder aux registres TRISX (Banque mémoire 1) BSF STATUS,RP0 ; RP0 = “1” BCF STATUS,RP1 ; RP1 = “0” ; Configurer les registres de direction MOVLW B’11010001’ MOVWF TRISA ; TRISA = B’xx010001’ MOVLW MOVWF B’11001001’ TRISB ; TRISB = B’11001001’ CLRF BSF PORTA PORTB,2 ; mettre à zéro toutes les sorties du port A ; mettre à “1” le bit n°2 du registre PORTB Bernard Lewandowicz 16/05/14 C_BL_Le_microcontroleur_PIC16F876.odt Page 14 / 14