Cours pics16 f877
Upcoming SlideShare
Loading in...5
×
 

Cours pics16 f877

on

  • 2,725 views

 

Statistics

Views

Total Views
2,725
Views on SlideShare
2,725
Embed Views
0

Actions

Likes
2
Downloads
105
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Cours pics16 f877 Cours pics16 f877 Presentation Transcript

  • Introduction aux microcontrôleurs Illustration par le PIC16F877 Le PIC16F877 Dr : A. ABBOU IGA 2013 1ABBOU
  • Un microcontrôleur est un C.I qui rassemble les éléments essentiels d'un ordinateur :  Processeur  Mémoires  Unités périphériques et interfaces d‘E/S DEFINITION 2ABBOU
  • Du -processeur au  -contrôleur Pour réaliser un système (micro computer) minimum, il faut ajouter au microprocesseur les éléments suivants : Mémoire de programme ROM. •Mémoire de données RAM. •Circuits d’Entrées/Sorties PIA, ACIA, TIMER. 3ABBOU
  • Les microcontrôleurs améliorent l'intégration et le coût (lié à la conception et à la réalisation) d'un système à base de microprocesseur Microcontrôleur = Microprocesseur + Ram + Rom + E/S  Un microcontrôleur est donc un composant autonome, Les microcontrôleurs peuvent fonctionner sans l’addition de circuits externes Du -processeur au  -contrôleur 4ABBOU
  • Circuit imprimé peu complexe Faible consommation Coût réduit Encombrement réduit  Programmation nécessitant un matériel adapté une vitesse de fonctionnement et taille mémoire plus faible par rapport aux microprocesseurs Caractéristiques d’un -Contrôleur 5ABBOU
  • Applications Informatique et télécommunication (souris, modems…) Contrôle de processus industriels (régulation, pilotage) Vidéo (Appareil photos et caméra numériques…), Multimédia (téléviseur, carte audio, carte vidéo,MP3,…)  Systèmes embarqués, comme les contrôleurs des moteurs automobiles (ABS, injection,GPS, airbag), les télécommandes, jouets, la téléphonie mobile,… 6ABBOU
  • Familles de microcontrôleurs la famille Atmel AT91 , Atmel AVR ; le C167 de Siemens; la famille Hitachi H8; l’Intel 8085 , Intel 8051 la famille Motorolla 68HC11, 68HC08 , 68HC12 ; la famille des PIC de Microchip ; la famille des ST6, ST7, ST10, STR7, STR9 de STMicroelectronics ; la famille ADuC d'Analog Devices ; la famille MSP430 de Texas Instruments ; la famille LPC21xx ARM7-TDMI de Philips ; 7ABBOU
  • Les PICs de Microchip La société Américaine Microchip Technologie a mis au point dans les années 90 un microcontrôleur CMOS : le PIC (Peripheral Interface Controller). Ses caractéristiques principales sont : - Architecture RISC : Reduced Instruction Set Computer Jeu d’instruction réduit Instruction et opérande codés sur un seul mot Toutes les instructions (hors saut) sur un cycle machine -Architecture Harvard : Le programme et les données sont stockées dans des mémoires physiquement séparées. 8ABBOU
  • Architecture Architecture de Von Neumann : Un seul Bus malgré la séparation de l’espace mémoire données et mémoire programme. Occupation mémoire d’une instruction variable. Architecture Harvard : Un bus pour chaque Mémoire (Données et programme) Occupation mémoire fixe pour toutes les instructions 9ABBOU
  • RISC & CISC Architecture • RISC – Reduced Instruction Set Computer – Toutes les instructions ont la même taille – Les modes d'adressage sont simples (immédiat, registre) - Jeu d’Instruction réduit CISC – Complex Instruction Set Computer – Instructions de taille et de temps d'exécution variable – Modes d'adressage complexes – Il faut plusieurs instructions CISC pour 1 instruction RISC - Jeu d’instruction étendu 10ABBOU
  • RISC CISC Pascal MOV CX,100 MOV DI,dst MOV SI,src REP MOVSB MOV CX,100 MOV DI,dst MOV SI,src boucle: MOV AL,[DI] MOV [SI],AL INC SI INC DI DEC CX JNZ boucle Var i : integer; src, dst : array[1..100] of byte; for i:=1 to 100 do dst[i]=src[i]; Architecture Exemple: on déplace 100 octets de l'adresse mémoire src vers l'adresse mémoire dst. A gauche on utilise une macro-instruction (RISC) REP MOVSB équivalent à la partie figurée en vert à droite. RISC & CISC 11ABBOU
  • Décomposition des tâches Optimisation pour l’architecture RISC Préparation de l’instruction suivante durant l’exécution de celle présente Structure en Pipe Line movlw 0xFF movwf Portb call sub1 movf Portc,w Séquencement 12ABBOU
  • Architecture interne  Mémoire flash : C'est une mémoire réinscriptible qui conserve ses données lorsque la PIC n'est pas alimentée. Elle est utilisée pour stocker le programme.  Mémoire RAM : C'est une mémoire volatile. Les variables utilisées au cours du programme sont stockées à cet endroit.  Unité de Calcul : C'est là où se déroulent toutes les opérations à une vitesse définie par la fréquence d'horloge.  Registre temporaire W : C'est ici qu'est stockée la valeur nécessaire pour une opération de l'unité de calcul.  Ports E/S ( Entrées/Sorties ) : Ce sont les unités qui font le lien entre ce qui se passe à l'intérieur du PIC et l'extérieur.  Modules annexes : Toutes les fonctions annexes (timers, comparateurs, convertisseurs analogiques/numériques ...) Microcontrôleurs 13ABBOU
  • Les différentes familles des PICs Base-line (Les instructions sont codées sur12 bits) - PIC 10 - PIC 12 - Certains PIC12F & PIC16F Mid-range (Les instructions sont codées sur 14 bits) - La plupart des PIC 16 - Certains PIC12F High-end (Les instructions sont codées sur 16 bits) - PIC 17 - PIC 18 14ABBOU
  • Référence des MCU 15ABBOU
  •  Le numéro 16 signifie qu'il fait partie de la famille "MID-RANGE". C'est la famille de PIC qui travaille sur des mots de 14 bits.  La lettre F indique que la mémoire programme de cette PIC est de type "Flash".  Les derniers chiffres permettent d'identifier précisément la PIC, ici c'est une PIC de type 877.  La référence 16F877 peut avoir un suffixe du type "-XX" dans lequel XX représente la fréquence d'horloge maximale que la PIC peut recevoir. PIC 16F877 Référence des MCU 16ABBOU
  • Caractéristiques générales de la famille 16F87x différents circuit de la famille 16F87X 17ABBOU
  • Éléments constitutifs du PIC 16F877 18ABBOU
  • Structure du PIC 16F877 19ABBOU
  • Le cœur du PIC : le microprocesseur 20ABBOU
  • La mémoire 21ABBOU
  • La Pile et le Compteur Programme 22ABBOU
  • Les Ports d’Entrées/Sorties généraux : PORTA, PORTB, PORTC, PORTD, PORTE 23ABBOU
  • Le Port Parallèle Esclave (PSP : Parallel Slave Port) 24ABBOU
  • Le circuit de génération d’horloge 25ABBOU
  • Le TIMER0 26ABBOU
  • Le TIMER1 27ABBOU
  • Le TIMER2 28ABBOU
  • Les modules CCP1 et CCP2 29ABBOU
  • Le convertisseur Analogique – Digital 10bits 30ABBOU
  • L’USART 31ABBOU
  • Le SSP, Synchronous Serial Port 32
  • Brochage du PIC 16F877 33
  • Organisation de la mémoire RAM 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 GPR (General Propose Registers) ou RAM utilisateur. Sur le 16F877, 3 blocs de 16 octets chacun ne sont pas implantés physiquement d’où une capacité de RAM utilisateur de 368 GPR 34ABBOU
  • Organisation de la mémoire RAM - Le plan mémoire des données et des registres internes est découpé en 4 zones ou bank de 128 octets - pour accéder à une zone il faut positionner les bits RP0 (bit 5) et RP1 (bit 6) du registre STATUS. RP1 : RP0 Zone Sélectionnée(Bank) 00 De 00h à 7Fh : BANK 0 01 De 80h à FFh : BANK 1 10 De 100h à 17Fh : BANK 2 11 De 180h à 1FFh : BANK 3 35ABBOU
  • Plan Mémoire des registres 36ABBOU
  • Organisation de la mémoire RAM 37ABBOU
  • Vous disposerez de 368 octets libres réparties de la manière suivante: - 80 octets en banque 0, adresses 0x20 à 0x6F - 80 octets en banque 1, adresses 0xA0 à 0XEF - 96 octets en banque 2, adresses 0x110 à 0x16F - 96 octets en banque 3, adresses 0x190 à 0x1EF -16 octets communs aux 4 banques, soit 0x70 à 0x7F = 0xF0 à 0xFF = 0x170 à 0x17F =0x1F0 à 0x1FF. Organisation de la mémoire RAM 38ABBOU
  • Accés à la RAM par adressage direct Accès à la RAM par Adressage direct 39ABBOU
  • Accés à la RAM par adressage indirect Accès à la RAM par Adressage indirect 40ABBOU
  • La mémoire Programme ou mémoire flash - Cette mémoire de 8 x 1024 mots de 14 bits sert à stocker le programme - Elle est non volatile (flash) et reprogrammable à souhait - Chaque position de 14 bits contient une instruction. - Le programme exécutable par le PIC est implanté dans la mémoire flash à l'aide d'un programmateur (hard+soft ) 41ABBOU
  • Organisation mémoire programme 42
  • Organisation mémoire programme -Le plan mémoire est linéaire les adresses vont de 0000h à 1FFFh (8k mots de 14 bits), par page de 2K mots . -Le vecteur de reset est figé en 0000h. -Les PICs n’ont qu’un seul vecteur d’interruption en 0004h. -La pile utilisée par les sous programmes n’est pas implantée en mémoire de donnée comme avec les microcontrôleurs classiques, mais dans la mémoire programme. -on ne peut pas imbriquer plus de 8 sous programmes (Ce qui est déjà beaucoup ! !). 43ABBOU
  • Les mémoires permanentes La mémoire EEPROM de données - Le PIC 16F876/877 dispose de 256 octets de mémoire EEPROM de donnée. - Son implantation physique commence à la position d’adresse absolue 2100h. - on utilise l’adressage relatif par rapport à la première position. - La première position aura l’adresse 0, 44ABBOU
  • Les instructions du 16F876/877 - Les instructions « orientées Registre» - Les instructions « orientées bits » - Les instructions opérant sur une constante - Les instructions de saut et appel de procédures Exercice 1) Dans quel bank se trouvent les cases mémoire d'adresse : 1A4h, B5h, 130h, 58h, 100, 200, 250, 300, 400 Exercice 2) Combien de cases mémoires libres (GPR) y a-t-il dans la zone mémoire qui commence à la position A0h et se termine à EAh. Exercice 3) Quelle est l'adresse de la dernière position d'une zone mémoire de 40 cases qui commence à la position 190h. Exercice 4) Combien de cases mémoires libres (GPR) y a-t-il dans le bank1. Même question pour le bank2. 45ABBOU
  • ABBOU 46 Décodage d’adresse des mémoires Exercice A: Pour un microprocesseur disposant de 16 lignes d'adresses et 8 lignes de données, établir le décodage permettant de situer 8 Ko de données aux adresses hautes de la mémoire. On dispose pour cela de boitiers de 4 Ko de mémoire. Rechercher l'adresse des boitiers mémoire, faire le mapping mémoire puis le schéma électrique. Exercice B: on désire réaliser le décodage d’adresse par EPROM d’un circuit mémoire M de 8Ko. En fait, pour réaliser M, on dispose uniquement de 4 boitiers mémoire de capacité 2Ko chacun implantés suivant le tableau suivant: Boitiers Adresse d’implantation Boitier 1 1000h - 17FFh Boitier 2 1800h - 1FFFh Boitier 3 C000h - C7FFh Boitier 4 CA00h - D0FFh a- Donner les avantages de décodage d’adresse par EPROM b- Réaliser le décodage d’adresse
  • Jeu d’instructions Opération sur les registres {W,F ? d} signifie que le résultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f 47ABBOU
  • Jeu d’instructions Suite 48ABBOU
  • Jeu d’instructions LEGENDE DES TABLEAUX D’INSTRUCTIONS d Détermine la destination : d=0 Registre Travail d=1 Registre Mémoire SFR ou RAM. F Adresse SFR ou RAM en hexa. fff ffff Adresse SFR ou RAM en binaire. K Valeur immédiate sur 8bits ou Adresse de destination sur 11 bits. bbb Valeur binaire, elle détermine le bit à modifier ou à tester {W,F ? d} signifie que le résultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f 49ABBOU
  • Les paramètres des instructions agissant sur registre Pour les instructions qui agissent sur registre, le paramètre F représente l’adresse du registre considéré. Le paramètre d (destination) joue un rôle important, si on prend d = 0 ou w, le résultat de l’opération sera placé dans l’accumulateur W, si on prend d = 1 ou f, le résultat de l’opération sera placé dans le registre précisé par F. Exemple: ADDWF 70h,1 ou ADDWF 70h,f Signifie : additionner le contenu de W avec le contenu de la case mémoire d’adresse 70h et placer le résultat dans la case mémoire 70h Exemple: XORWF 35h,0 ou XORWF 35h,w Signifie : faire un ou exclusif entre W et le contenu de la case mémoire d’adresse 35h et placer le résultat dans l’accumulateur W 50ABBOU
  • Les paramètres des instructions agissant sur bit Pour les instructions agissant sur un bit, le paramètre F indique le registre qui contient le bit à modifier et le paramètre b indique le numéro du bit à modifier; on compte à partir de zéro en commençant à droite Exemples: BSF STATUS,2 ; signifie : placer à 1 le bit 2 (3ème bit à partir de la droite) du registre STATUS BCF 45h,6 ; signifie : placer à 0 le bit 6 (7ème bit à partir de la droite) du registre de la case mémoire d’adresse 45h 51ABBOU
  • Les instructions MOVWF et MOVF Ce sont les instructions les plus utilisées, MOVWF permet de copier l’accumulateur W dans un registre (SFR ou GPR): Exemples: MOVWF STATUS ; signifie : Copier le contenu de W dans le registre STATUS MOVWF 55h ; signifie : Copier le contenu de W dans la case mémoire d’adresse 55h MOVF permet de copier le contenu d’un registre (SFR ou GPR) dans l’accumulateur W, le paramètre d doit être = 0 Exemples: MOVF STATUS,0 ; Copier le contenu du registre STATUS dans l’accumulateur W MOVF 35h,0 ; Copier le contenu de la case mémoire d’adresse 35h dans l’accumulateur W MOVF STATUS,1 ; Copier le contenu du registre STATUS dans lui même 52ABBOU
  • Les instructions btfss et btfsc Ces instructions permettent de tester un bit et de sauter ou non une ligne de programme en fonction de la valeur du bit, Exemples: btfsc F,b : bit test skip if clear : teste le bit b du registre F et saute l’instruction suivante si le bit testé est nul btfss F,b : bit test skip if set : teste le bit b du registre F et saute l’instruction suivante si le bit testé est égal à 1 53ABBOU
  • Les instructions incfsz et decfsz Ces instructions permette d’incrémenter ou de décrémenter un registre et de sauter si le résultat est nul Exemples: Incfsz F,1 : increment skip if Z : incrémente le registre F et sauter une ligne si le résultat = 0. Le paramètre 1 indique que le résultat de l’incrémentation doit aller dans F. deccfsz F,1 : decrement skip if Z : décrémente le registre F et sauter une ligne si le résultat = 0. Le paramètre 1 indique que le résultat de la décrémentation doit aller dans F. 54ABBOU
  • L’instruction goto Permet de transférer l’exécution à une autre position du programme repérée par une étiquette (label) Exemple: 55ABBOU
  • L’instruction call L’instruction call permet d’appeler une fonction. Une fonction est un sous programme écrit à la suite du programme principal. Sa première ligne doit comporter une étiquette et elle doit se terminer par return. Exemple: Déduire La différence entre call et goto? 56 ABBOU
  • Les indicateurs d’état (drapeaux) Les bits Z, DC et C situés dans le registre STATUS sont des indicateurs qui permettent de savoir comment une instruction s’est terminée. Toutes les instructions n’agissent pas sur les indicateurs, voir liste des instructions ci- dessous. Z : passe à 1 quand le résultat d’une instruction est nul C : passe à 1 quand l’opération a généré une retenue DC : passe à 1 quand le 4ème bits génère une retenue Ces bits peuvent être utilisé très astucieusement par les instructions btfsc et btfss qui permettent de tester un bit et de réaliser un saut conditionnel: 57
  • Les particularités de programmation du 16F87x La directive « _CONFIG » -cette directive détermine le fonctionnement du PIC. -La valeur est inscrite au moment de la programmation dans un registre spécial, situé en mémoire programme à l’adresse 0x2007 -ne peut plus être modifié en cours d’exécution du programme. - Ce registre de 14 bits (fusibles ou switch) de configuration est organisé comme suit : 58ABBOU
  • CP1/CP0 : bits 13/12 ; Déterminent quelle zone de la mémoire programme sera protégée contre la lecture externe (via ICSP) ou l'écriture par programme conformément à l'état du bit 9 (WRT). On peut choisir de protéger la totalité de la mémoire ou seulement une partie. Les différentes zones pouvant être protégées sont les suivantes : •1 1 : Aucune protection (_CP_OFF) •1 0 : Protection de la zone 0x1F00 à 0x1FFF (_CP_UPPER_256) •0 1 : Protection de la zone 0x1000 à 0x1FFF (_CP_HALF) •0 0 : Protection de l’intégralité de la mémoire (_CP_ALL) Les particularités de programmation du 16F87x 59ABBOU
  • DEBUG : bit 11 : Debuggage sur circuit. Permet de dédicacer RB7 et RB6 à la communication avec un debugger. 1 : RB6 et RB7 sont des I/O ordinaires (_DEBUG_OFF) 0 : RB6 et RB7 sont utilisés pour le debuggage sur circuit (_DEBUG_ON) WRT : bit 9 : Autorisation d’écriture en flash 1 : Le programme peut écrire dans les zones non protégées par les bits CP1/CP0 (_WRT_ENABLE_ON) 0 : Le programme ne peut pas écrire en mémoire flash (_WRT_ENABLE_OFF) LVP : bit 7 : Utilisation de la pin RB3/PGM comme broche de progra 5V 1 : La pin RB3 permet la program du circuit sous tension de 5V (_LVP_ON) 0 : La pin RB3 est utilisée comme I/O standard (_LVP_OFF) Les particularités de programmation du 16F87x 60ABBOU
  • CPD : bit 8 : Protection en lecture de la mémoire EEPROM de données. 1 : mémoire EEPROM non protégée (_CPD_OFF) 0 : mémoire EEPROM protégée contre la lecture externe via ICSP (_CPD_ON) BODEN : bit 6 : provoque le reset du PIC en cas de chute de tension (surveillance de la tension d’alimentation) 1 : En service (_BODEN_ON) 0 : hors service (_BODEN_OFF) PWRTE : bit 3 : Délai de démarrage à la mise en service. Attention, est automatiquement mis en service si le bit BODEN est positionné. 1 : délai hors service (sauf si BODEN = 1) (_PWRTE_OFF) 0 : délai en service (_PWRTE_ON) Les particularités de programmation du 16F87x 61ABBOU
  • WDTE : bit 2 : Validation du Watchdog timer 1 : WDT en service (_WDT_ON) 0 : WDT hors service (_WDT_OFF) FOSC1/FOSC0 : bits 1/0 : sélection du type d’oscillateur 11 : Oscillateur de type RC (_RC_OSC) (3K < R < 100k, C > 20 pF) 10 : Oscillateur haute vitesse (_HS_OSC) (4 Mhz à 20 Mhz) 01 : Oscillateur basse vitesse (_XT_OSC) (200 kHz à 4 Mhz) 00 : Oscillateur faible consommation (_LP_OSC) (32 k à 200 kHz) Voici 3 exemples d’utilisation : __CONFIG B'11111100111001' __CONFIG H'3F39‘ __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC Les particularités de programmation du 16F87x 62ABBOU
  • LIST : permet de définir un certain nombre de paramètres comme le processeur utilisé (p), la base par défaut pour les nombres (r) ainsi que d'autres paramètres. Exemple : LIST p=16F876, r=dec avec r=dec, les nombres sans spécification particulière seront considérés par l'assembleur comme des nombre décimaux, INCLUDE : permet d'insérer un fichier source. Par exemple le fichier p16f876.inc contient la définition d'un certain nombre de constante comme les noms des registres ainsi que les noms de certains bits; Exemple: INCLUDE "p16f876.inc" EQU : permet de définir une constante ou une variable : Exemple : XX EQU 0x20 Les particularités de programmation du 16F87x 63ABBOU
  • Les particularités de programmation du 16F87x ORG : définit la position dans la mémoire programme à partir de laquelle seront inscrites les instructions suivantes. Exemple : 64ABBOU
  • #DEFINE : fonctionne un peu comme la directive EQU tout en étant un peu plus générale, car elle permet d’affecter toute une chaîne à une abréviation Exemples: #DEFINE XX 0x20 ; dans ce cas c’est équivalent à XX EQU 0x20 #DEFINE LED PORTB,3 ; ici chaque fois que le compilateur rencontrera le mot LED, il le remplacera par PORTB,3 BCF LED ; éteindre la LED branchée sur la broche 3 de PORTB On peu ainsi affecter une abréviation à toute une instruction #DEFINE eteindre bcf PORTC,5 ;affecte l’abréviation eteindre à l’instruction bcf PORTC,5 #DEFINE allumer bsf PORTC,5 ;affecte l’abréviation allumer à l’instruction bsf PORTC,5 Les particularités de programmation du 16F87x Allumer ; allume la LED branchée sur la broche 5 de PORTC Eteindre ; éteindre la LED branchée sur la broche 5 de PORTC 65ABBOU
  • Exercice 5) Ecrire un programme qui incrémente indéfiniment la position mémoire (RAM) 60h. Exercice 6) : Accès à la RAM par l'adressage direct Donner le programme qui copie : 35 dans la position 20h, 'A' dans la position A0h b’11101’ dans la position 110h, 35h dans la position 190h Exercice 7) : Soustraction Donner le programme qui : -soustrait la constante 33 de l'accumulateur W (W-33) -Soustrait la constante 40h de la case mémoire d'adresse 70h ([70h]-40h [70h]) -qui soustrait le contenu de la case mémoire 70h de l'accumulateur W avec le résultat dans W ( W – [70h]  W ) - qui soustrait le contenu de la case mémoire 71h de l'accumulateur W avec le résultat dans la case mémoire ( W – [71h]  [71h] ) Exercice 8) : Accès à la RAM par l'adressage indirect Donner le programme qui copie l'alphabet majuscule dans la RAM à partir de la position 190h Exercice 9) : (comp1.asm) Comparer les contenus des cases mémoire 6Fh et EFh, s’il son égaux mettre à zéro tous les bits de la case 16Fh sinon mettre à 1 tous les bits de la case 1EFh 66ABBOU Exercices
  • Boucles de temporisation réalisation des temporisations à l'aide de simples boucles, sans recours aux 3 TIMER du PIC: A-Temporisation avec une boucle movlw 4 movwf 70h ici decfsz 70h,f goto ici - Les instructions movlw et movwf prennent 1 cycle chacune - L'instruction decfsz prend un cycle si elle ne saute pas et 2 cycles quand elle saute - L'instruction goto prend 2 cycles - chaque passage dans la boucle prend (1+2) cycle sauf le dernier qui prend 2 cycle Avec un quartz = fosc = 4 Mhz, 1 cycle = fosc/4 = 1 μs, ce qui donne une temporisation max de 769 μs 67ABBOU
  • B-Temporisation avec 2 boucles imbriquées La boucle intérieure (N1) se fait toujours 256 fois. La boucle extérieure se fait N2 fois. C’est N2 qui constituera le paramètre de la fonction, Il faut le placer dans W avant de l’appeler. tempo2 : ; il faut définir W dans le programme principal movwf AN2 t2 : decfsz AN1,f goto t2 decfsz AN2,f goto t2 return Boucles de temporisation 68ABBOU
  • Exercice 5) : Accès à la RAM par l'adressage direct Donner le programme qui copie : 35 dans la position 20h, 'A' dans la position A0h b’1010’ dans la position 110h, 35h dans la position 190h Exercice 6) : Soustraction Donner le programme qui : -soustrait la constante 33 de l'accumulateur W (W-33) -Soustrait la constante 40h de la case mémoire d'adresse 70h ([70h]-40h [70h]) -qui soustrait le contenu de la case mémoire 70h de l'accumulateur W avec le résultat dans W ( W – [70h]  W ) - qui soustrait le contenu de la case mémoire 71h de l'accumulateur W avec le résultat dans la case mémoire ( W – [71h]  [71h] ) Exercice 7) : Accès à la RAM par l'adressage indirect Donner le programme qui copie l'alphabet majuscule dans la RAM à partir de la position 190h Exercice 8) : (comp1.asm) Comparer les contenus des cases mémoire 6Fh et EFh, s’il son égaux mettre à zéro tous les bits de la case 16Fh sinon mettre à 1 tous les bits de la case 1EFh Exercices 69ABBOU
  • outils de développement L’outil de développement principal est l’environnement de développement intégré MPLAB fournit gratuitement par Microchip Procédure de travail: Les étapes nécessaires permettant de voir un programme s'exécuter sur un PIC sont : Ecrire un programme en langage assembleur dans un fichier texte et le sauvegarder avec l'extension .asm Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le résultat est un fichier exécutable avec l'extension .hex contenant une suite d'instruction compréhensible par le pic. Transplanter le fichier .hex dans la mémoire programme du PIC (mémoire flash) à l'aide d'un programmateur adéquat. On peut utiliser les programmateurs de Microchip ou tout autre programmateur acheté . Mettre le PIC dans son montage final, mettre sous tension. Microchip propose gratuitement l'outil de développement MPLAB qui regroupe l'éditeur de texte, le compilateur MPASM, un outil de simulation et le logiciel de programmation. Le programmateur lui-même, n'est malheureusement pas gratuit. 70ABBOU
  • outils de développement L’environnement de développement MPLAB MPLAB-IDE peut être téléchargé sur le site Web http://www.microchip.com Après l'installation, lancer MPLAB et faire les config ci-dessous : Configure  Select Device  PIC16F876 ou PIC16F877 ……………………………………….. …………………………………..…. ……………………………………….. Séance de « Prise en main de MPLAB » 71ABBOU
  • Les ports parallèles d'entrée sortie Chaque port est associé à un registre de direction TRISx - un bit à 1 --> I --> Input --> entrée - - un bit à 0 --> O --> Output --> sortie - Le courant absorbé ou fourni peut atteindre 25 mA La majorité des broches sont multiplexées avec d'autres fonctions Le 16F877 possède 5 ports différents : le port A (6 broches) le port B (8 broches) le port C (8 broches) le port D (8 broches) le port E (3 broches) ça fait 33 broches d’entrées-sorties (E/S) disponibles 72ABBOU
  • C’est un port de 6bits (RA0 à RA5). RA6 et RA7 ne sont pas accessibles. La ligne RA4 est partagée avec l'entrée TOCK1 du timer0, Les autre lignes sont partagées avec les fonctions analogiques (CAN ), Direction configurée dans TRISA (85h bank1), Données accessibles dans PORTA (05h bank0). Le port A 73ABBOU
  • Les registres utilisés par le port A En sortie, RA4 est une E/S à drain ouvert, pour l'utiliser comme sortie logique, il faut ajouter une résistance de pull-up externe. Il faut remarquer que la logique est inversée, si on envoie 0 sur RA4, l'interrupteur se ferme et la LED s'allume. Si on envoie 1, l'interrupteur s'ouvre et la LED s'éteint. Pour les utiliser les E/S en E/S numériques, il faut écrire '00000110' dans le registre ADCON1 74ABBOU
  • Le port B Le port B désigné par PORTB est un port bidirectionnel de 8 bits (RB0 à RB7). Toutes les broches sont compatibles TTL. La configuration de direction se fait à l'aide du registre TRISB, positionner un bit de TRISB à 1 configure la broche correspondante de PORTB en entré et inversement. Au départ toutes les broches sont configurées en entrée. En entrée, la ligne RB0 appelée aussi INT peut déclencher l’interruption externe INT. En entrée, une quelconque des lignes RB4 à RB7 peut déclencher l'interruption RBI. Direction configurée dans TRISB (86h bank1), Données accessibles dans PORTB(06h bank0). 75ABBOU
  • N'existe que pour les boîtiers 28 et 40 broches, Partagé avec les liaisons séries, les Timers 1,2 et les modules CCP, port bidirectionnel de 8 bits (RC0 à RC7). Toutes les broches sont compatibles TTL. Entrées à trigger de Schmitt, Direction configurée dans TRISC (87h bank1), Données accessibles dans PORTC (07h bank0). Le port C 76ABBOU
  • Le port D Le port D désigné par PORTD est un port bidirectionnel de 8 bits (RD0 à RD7). Toutes les broches sont compatibles TTL et ont la fonction trigger de Schmitt en entrée. Chaque broche et configurable en entrée ou en sortie à l’aide du registre TRISD. PORTD n’est pas implémenté sur tous les processeurs 16F87X, il est disponible sur le 16F877, le 16F874 et le 16F871 PORTD peut être utilisé dans un mode particulier appelé parallele slave port, pour cela il faut placer le bit PSPMODE (bit 4) de TRISE à 1. Dans ce cas les 3 bits de PORTE deviennent les entrées de control de ce port (RE, WE et CS) 77ABBOU
  • Le port E PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables en entrée ou en sortie à l’aide des bits 0, 1 ou 2 du registre TRISE. PORTE n’est pas implémenté sur tous les processeurs 16F87X, il est disponible sur le 16F877, le 16F874 et le 16F871 Les 3 bits de PORTE peuvent être utilisés soit comme E/S numérique soit comme entrées analogiques du CAN. La configuration se fait à l’aide du registre ADCON1. Si le bit PSPMODE de TRISE est placé à 1, Les trois bits de PORTE deviennent les entrées de control du PORTD qui (dans ce cas) fonctionne en mode parallele Slave mode A la mise sous tension (RESET), les 3 broches de PORTE sont configurées comme entrées analogiques. 78ABBOU
  • Exercice 9 : Clignoter une LED Donner le programme qui fait clignoter une LED branchée sur RA0 avec une temporisation voisine de 0.5s. Sachant que le PIC est doté d'un quartz de 4 MHz. la temporisation sera réalisée à l'aide de boucles imbriquées Exercice 10 : Clignoter une LED Le programme précédent sera modifié pour que la Led branchée sur RA0 sera commandée par deux bottons poussoirs(START et STOP) branchés sur RB0 et RB1 - Lorsqu’on appuie sur START le clignotement démarre - Lorsqu’on appuie sur STOP le clignotement s’arrête. EXERCICES 79ABBOU
  • Exercice 11 : BCD 7 segments – On branche un bouton poussoir sur la broche RA4 de sorte que celle-ci passe à 0 quand on appuie – On branche un afficheur 7 segments cathode commune sur le port C – Chaque fois qu’on appuie sur le bouton poussoir, le contenu de l’afficheur doit s’incrémenter Indication : Le décodage BCD-7 segment sera fait par le programme. EXERCICES 80ABBOU
  • - Le timer 0 - TMR0 - 8 bits - Le timer 1 - TMR1 - 16 bits - Le timer 2 - TMR2 - 8 bits TMR0 et TMR1 sont des timers compteur TMR2 est seulement un timer (pas d'entrée externe) TMR1 et TMR2 sont utilisés par la fonction CCP (Capture Compare Pwm) Les processeurs de la famille PIC16 Peuvent avoir trois timers: LES TIMERS 81ABBOU
  • Le Timer 0 - TMR0 TMR0 est un compteur 8 bits On peut lire ou écrire le registre TMR0 Il génère une interruption au passage de FFh à 00h (overflow) Il possède un prédiviseur 8 bits qu'il partage avec le Watchdog Il peut être piloté par une horloge externe appliqué à la broche RA4 (mode compteur) ou par l’horloge interne Fosc/4 (mode timer) On peut sélectionner le front actif de l'horloge externe 82ABBOU
  • Schéma fonctionnel du Timer 0 0 1 0 1 83ABBOU
  • Registres utilisés par le timer TMR0 84ABBOU
  • Le Timer 0 • C’est un compteur 8 bits ayant les caractéristiques suivantes : • Il est incrémenté en permanence soit par l’horloge interne Fosc/4 (mode timer) soit par une horloge externe appliquée à la broche RA4 du port A (mode compteur). • La sélection de mode de fonctionnement s’effectue par le bit 5 du registre OPTION : T0CS pour Tmr0 Clock Source select bit. – T0CS = 1 : Fonctionnement en mode compteur – T0CS = 0 : Fonctionnement en mode timer 85ABBOU
  • * Si on décide de travailler en mode compteur, on doit préciser lors de quelle transition de niveau le comptage est effectué. Ceci est précisé grâce au bit 4 du registre OPTION : T0SE pour Timer0 Source Edge select bit. T0SE = 1 : comptage si l’entrée RA4/TOKI passe de 1 à 0 T0SE = 0 : comptage si l’entrée RA4/TOKI passe de 0 à 1 * A son débordement (FFh  00h) le drapeau T0IF est positionné ce qui peut déclencher l'interruption si elle est validée (GIE=1 et T0IE=1 ). Lorsque T0IE est positionné dans le registre INTCON, chaque fois que le flag T0IF passe à 1, une interruption est générée, il faut repositionner T0IF à 0 après traitement de l'interruption 86 Le Timer 0 ABBOU
  • Le Timer 0: Le mode d’interruption Supposons que nous travaillons avec un quartz de 4MHz. Nous avons donc dans ce cas (4 000 000/4) = 1.000.000 de cycles par seconde. Chaque cycle d’horloge dure donc 1/1000000ème de seconde, soit 1µs. Nous avons donc une interruption toutes les 256µs. Si nous désirons réaliser une LED clignotante à une fréquence de 1Hz, nous aurons besoin d’une temporisation de 500ms, soit 2000 fois plus. Ce n’est donc pas pratique. 87ABBOU
  • Le Timer 0: Le prédiviseur • Quelque soit l'horloge choisie, on peut la passer dans un diviseur de fréquence programmable (prescaler) dont le rapport est fixés par les bits PS0, PS1 et PS2 du registre OPTION_REG. • L'affectation ou non du prédiviseur se fait à l'aide du bit PSA du registre OPTION_REG o PSA = 0 on utilise le prédiviseur o PSA = 1 pas de prédiviseur (affecté au chien de garde) 88ABBOU
  • Le Timer 0: Le prédiviseur Le prédiviseur est un diviseur d’événements situé AVANT l’entrée de comptage du timer0. 89 PS2 PS1 PS0 /TIMER0 Temps Timer0 Qz = 4Mhz Temps Timer0 Qz = 8Mhz 0 0 0 2 512 µs 256 µs 0 0 1 4 1024 µs 512 µs 0 1 0 8 2048 µs 1024 µs 0 1 1 16 4096 µs 2048 µs 1 0 0 32 8192 µs 4096 µs 1 0 1 64 16384 µs 8192 µs 1 1 0 128 32768 µs 16384 µs 1 1 1 256 65536 µs 32768 µs ABBOU
  • Le Timer 0:Programme mikroC void main () { INTCON.GIE = 1 ; OPTION_Reg = ? ; INTCON.T0IE = 1; … while (1) { … } } void interrupt ( ) { if (INTCON. T0IF == 1) { ….. ….. INTCON.T0IF = 0; } } 90ABBOU
  • Exercice : Clignoter LED / TMR0 Clignoter une LED branchée sur RB0, delay voisin de 0.5s à l'aide de TMR0 a) Par scrutation du drapeau T0IF (pas d'interruption) b) En utilisant l'interruption T0I APPLICATIONS 91ABBOU
  • • Une interruption est un signal demandant au processeur de suspendre temporairement l’exécution du programme courant afin d’effectuer des opérations particulières. • Intérêt: Ce mécanisme permet d’implémenter une réaction à une sollicitation – offrant un délai de réponse très bref, – programmée de façon indépendante du code en cours d’exécution. • Les interruptions peuvent être déclenchées soit par un composant extérieur au processeur: – changement de valeur logique à une entrée désignée • soit par le processeur lui-même: – échéance d’une temporisation, – interruption logicielle, – . . . 92 INTERRUPTIONS ABBOU
  • • 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 principale à 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. • Les interruptions sont classées en deux catégories: - les interruptions primaires - les interruptions périphériques. 93 INTERRUPTIONS ABBOU
  • INTERRUPTIONS PRIMAIRES 94ABBOU ... Quelques sources d’interruption
  • 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 En résumé, pour valider une interruption primaires, il faut positionner 3 bits, GIE, PEIE et le bit individuel de l’interruption. INTERRUPTIONS 95ABBOU
  • Elles sont gérées par les registres : INTERRUPTIONS 96ABBOU
  • Le registre OPTION permet de choisir le type de front pour l’interruption INT/RB0 - Le registre INTCON INTERRUPTIONS 97ABBOU
  • Déroulement d'une interruption Lorsque l'événement déclencheur d'une interruption intervient, alors : - son drapeau est positionné à 1 (levé). - Si l'interruption a été validée (bit de validation = 1), elle est alors déclenchée : le programme arrête ce qu'il est en train de faire et va exécuter la procédure d'interruption qui se trouve à l'adresse 4 en exécutant les étapes suivantes : 98ABBOU
  •  l'adresse contenue dans le PC (Program Counter) est sauvegardée dans la pile, puis remplacée par la valeur 0004  Le bit GIE est placé "0" pour inhiber toutes les interruptions (afin que le PIC ne soit pas dérangé pendant l'exécution de la procédure d'interruption).  A la fin de la procédure d'interruption  le bit GIE est remis à 1(autorisant ainsi un autre événement)  le contenu du PC est rechargé à partir de la pile Déroulement d'une interruption 99ABBOU
  • Déroulement d'une interruption 100ABBOU
  • Deux remarques importantes sont à faire : Le drapeau reste à l’état haut même après le traitement de l’interruption. Par conséquent, il faut toujours le remettre à "0" à la fin de la routine d'interruption sinon l'interruption sera déclenchée de nouveau Seul le PC est empilé automatiquement. Si cela est nécessaire, les registres W et STATUS doivent être sauvegardés en RAM puis restaurés à la fin de la routine pour que le microcontrôleur puisse reprendre le programme principal dans les mêmes conditions où il l'a laissé. Déroulement d'une interruption 101ABBOU
  • Fonction d’interruption 102 • Comme le PIC n’a qu’un seul programme de traitement d’interruption, il faut absolument commencer par rechercher la source de l’interruption, lorsque plusieurs sources sont possibles. • Ceci s’effectue en testant les drapeaux (bits d’état). Une interruption provoque une mise à 1 du drapeau correspondant. • A la fin de l’interruption, on remet le drapeau à 0. Cela permet de prendre en compte la prochaine interruption. • Exemple : void interrupt() { if (INTCON. INTF) { …. … INTCON. INTF = 0; } } ABBOU
  • Exercice (int.asm) Programme qui utilise l’interruption INT comme suit : Chaque fois que l’entrée RB0 passe de 1 à 0, la LED branchée sur RB1 clignote 4 fois au rythme de la ½ seconde Application 103ABBOU
  • CONVERTISSEUR ANALOGIQUE NUMERIQUE Le convertisseur analogique numérique est à approximations successives. Il possède une résolution de 10 bits. Il est composé de :  Un multiplexeur analogique 5 voies (PIC16F876) ou 8 voies PIC16F877).  Un échantillonneur bloqueur.  Un Convertisseur Analogique Numérique de 10 bits. 104ABBOU
  • Organisation interne 105ABBOU
  • La conversion se passe en 2 temps : - 1er temps le signal à convertir est appliqué sur l’entrée à convertir, ce signal doit être présent au moins pendant le temps Tacq (temps d’acquisition environ 12μS pour 5V). - 2ème temps la conversion, approximations successives. Une conversion commence toujours par la mise à 1 du bit GO/DONE du registre ADCON0. Lorsque la conversion est terminée se bit repasse à 0. Donc pour pouvoir lire le résultat dans les registres ADRESL et ADRESH il suffit d’attendre que le bit GO/DONE passe à 0. CONVERTISSEUR ANALOGIQUE NUMERIQUE 106ABBOU
  • La valeur résultante N de la conversion ADRSH:ADRESL est égale à : N = ((VIN - VREF-) / (VREF+ - VREF-)) * 1023) Si VREF+ = VDD = 5V et VREF- = VSS = 0V alors N (valeur numérisée) = 1023 * (VIN / 5 ) CONVERTISSEUR ANALOGIQUE NUMERIQUE 107ABBOU
  • Mais avant de réaliser une conversion il faut définir la configuration du convertisseur : - Le nombre d’entrées analogiques. - Le nombre d’entrées logiques. - Le type de tension de référence : - Interne VREF =VDD-VSS. -Externe, soit VREF= VREF+ - VSS ou VREF= VREF+ - VREF-. Cette configuration ce fait à travers le registre ADCON1 CONVERTISSEUR ANALOGIQUE NUMERIQUE 108ABBOU
  • Le registre ADCON1 Il permet de choisir une configuration parmi les 16 proposées Remarque : La configuration de ce registre ADCON1 ne dispense pas de configurer les registres de directions des PPORTA et PORTE respectivement TRISA et TRISE. CONVERTISSEUR ANALOGIQUE NUMERIQUE 109ABBOU
  • CONVERTISSEUR ANALOGIQUE NUMERIQUE 110ABBOU
  • De plus le bit ADFM permet de choisir entre deux types de justification pour le résultat. Si ADFM=1 alors le résultat sera justifié à droite dans les registre ADRESH et ADRESL Si ADFM=0 alors le résultat sera justifié à gauche CONVERTISSEUR ANALOGIQUE NUMERIQUE 111ABBOU
  • Le registre ADCON0 Ce registre permet de définir l’horloge de conversion (bit ADCS1 et ADCS0), le canal à convertir (CHS2, CHS1 et CHS0) et ADON bit de mise en fonctionnement CONVERTISSEUR ANALOGIQUE NUMERIQUE 112ABBOU
  • Le registre ADCON0 113ABBOU