microcontroleurs

Upload: lahyouh

Post on 02-Mar-2016

136 views

Category:

Documents


2 download

DESCRIPTION

Microcontrôleur PIC16F887

TRANSCRIPT

  • Microcontrleur PIC16F887 A.OUMNAD 1

    LES MICROCONTROLEURS Par la pratique

    Etude dtaille du

    PIC 16F887

    Abdelmajid OUMNAD

  • Microcontrleur PIC16F887 A.OUMNAD 2

    INTRODUCTION Un microcontrleur est un composant lectronique Autonome dot :

    dune unit de traitement capable de dcoder et d'excuter des instructions,

    de la mmoire RAM,

    de la mmoire permanente,

    des interfaces dE/S parallle et srie (RS232, I2C, SPI )

    des interfaces dE/S analogique

    Des Timer pour grer le temps

    Dautres modules plus au moins sophistiqus selon la taille du microcontrleur

    Un microcontrleur est gnralement moins puissant quun microprocesseur en terme de rapidit ou de taille mmoire, il se contente le plus souvent dun bus 8 ou 16 bits. Ceci en fait un composant trs bon march parfaitement Adapt pour piloter les applications embarques dans de nombreux domaines dapplication. Je pense quon ne se tromperait pas beaucoup si on affirme quaujourdhui il ya un microcontrleur ( grand) dans chaque quipement lectronique :

    Informatique (souris, modem )

    Vido (Appareil photos numrique, camra numrique )

    Contrle des processus industriels (rgulation, pilotage)

    Appareil de mesure (affichage, calcul statistique, mmorisation)

    Automobile (ABS, injection, GPS, airbag)

    Multimdia (tlviseur, carte audio, carte vido, MP3, magntoscope)

    Tlphones (fax, portable, modem)

    Electromnager (lave-vaisselle, lave-linge, four micro-onde)

    Un microcontrleur peut tre programm une fois pour toutes pour effectuer une ou des tches prcises au sein d'un appareil lectronique. Les microcontrleurs rcents peuvent tre reprogramms et ceci grce leur mmoire permanente de type FLASH (do le terme flasher un quipement)

    Plusieurs Constructeurs se partagent le march des microcontrleurs, citons INTEL, MOTOROLA, ATMEL, ZILOG, PHILIPS et MICROCHIP avec ses PIC trs populaires auxquels nous allons nous intresser dans cet ouvrage.

  • Microcontrleur PIC16F887 A.OUMNAD 3

    Les microcontrleurs, quelque soit leurs constructeurs, ont des architecture trs similaires et sont constitus de modules fondamentaux assurant les mmes fonctions : UAL, Ports dE/S, interfaces de communications srie, Interfaces dE/S analogiques, Timers et horloge temps rels On peut dire que seul le langage de programmation (Assembleurs) constitue la diffrence majeure en deux microcontrleur (similaires) venant de deux constructeurs diffrents.

    Nous avons choisit dans ce document d'tudier les microcontrleurs PIC mid-range fabriqus par Microchip. Ce sont des microcontrleurs architecture RISC (Reduce Instructions Set Computer), ou encore composant { jeu dinstructions rduit. L'avantage est que plus on rduit le nombre dinstructions, plus leur dcodage sera rapide ce qui augmente la vitesse de fonctionnement du microcontrleur.

    La famille des PIC est subdivise en 3 grandes familles :

    La famille Base-Line, qui utilise des mots dinstructions de 12 bits, elle constitue l'entre de gamme des microcontrleurs fabriqus par Microchip

    la famille Mid-Range, qui utilise des mots de 14 bits. C'est la famille des microcontrleurs moyenne puissance

    la famille High-End, qui utilise des mots de 16 bits. C'est la famille haut de gamme.

    Au lieu de nous lancer dans l'tude gnrale sur les microcontrleurs, qui de notre avis, apporte peu d'aide aux lecteurs cibls par cet ouvrage, nous avons opt pour une tude dtaille du microcontrleur 16F887 qui est le remplaant dsign du trs populaire 16F877. C'est un lment trs reprsentatif de la famille mid-range puisqu'il est dot de la plupart des modules qui quipent les circuits de cette famille.

    Cet ouvrage est organis d'une faon telle que le lecteur peur passer rapidement la pratique. Tous les aspects ncessaires l'criture, la compilation et l'implantation d'un programme sur le PIC sont regroup dans les cinq premiers chapitres, volontairement courts pour viter au lecteur de s'garer. Ensuite l'ouvrage peut servir comme document de rfrence, le lecteur n'est pas oblig d'tudier le reste des chapitres dans l'ordre prsent.

  • Microcontrleur PIC16F887 A.OUMNAD 4

    Table des matires

    INTRODUCTION ................................................................................................................................................... 2

    Chapitre I ............................................................................................................................................................... 7

    LES ELEMENTS DE BASE DU PIC16F887 ........................................................................................................ 7

    I.1 Elments essentiels du PIC 16F887 ................................................................................................................... 7

    I.2 Brochage du 16F887............................................................................................................................................... 8

    I.3 L'Horloge .................................................................................................................................................................... 9 I.3.1 Oscillateur quartz ...................................................................................................................................... 9 I.3.2 Oscillateur RC. ..............................................................................................................................................10 I.3.3 Horloge externe. ..........................................................................................................................................10 I.3.4 Oscillateur interne. .....................................................................................................................................10

    I.4 Les Registres de configuration CONFIG1 et CONFIG2 ...............................................................................11 I.4.1 Exemple de Configuration gnrique ...................................................................................................14

    I.5 L'unit de traitement centrale (CPU) .............................................................................................................14

    I.6 Organisation de la mmoire RAM ....................................................................................................................15 I.6.1 Accs la RAM par adressage DIRECT .................................................................................................15

    I.7 Accs la RAM par ladressage INDIRECT ....................................................................................................17

    I.8 Quelques registres de configuration et leurs bits ......................................................................................19

    Chapitre II............................................................................................................................................................ 20

    LE JEUX D'INSTRUCTIONS DU PIC16F887 ................................................................................................... 20

    II.1 Les instructions orientes Registre ...............................................................................................................20

    II.2 Les instructions orientes bits .........................................................................................................................20

    II.3 Les instructions oprant sur une valeur .......................................................................................................21

    II.4 Les instructions de saut et appel de procdures ........................................................................................21

    II.5 Le jeu d'instructions .............................................................................................................................................21 II.5.1 Les instructions movwf et movf ..............................................................................................................22 II.5.2 Les instructions btfss et btfsc .................................................................................................................22 II.5.3 Les instructions incfsz et decfsz .............................................................................................................22 II.5.4 Linstruction goto ........................................................................................................................................23 II.5.5 Linstruction call ..........................................................................................................................................23

    II.6 Les indicateur dtat (drapeaux) .....................................................................................................................24 II.6.1 Les indicateurs, la soustraction et la comparaison..........................................................................24

    II.7 Les directives de l'assembleur MPASM ..........................................................................................................24 II.7.1 La directive LIST ..........................................................................................................................................25 II.7.2 La directive INCLUDE.................................................................................................................................25 II.7.3 La directive EQU ..........................................................................................................................................25 II.7.4 Les directives CBLOCK/ENDC .................................................................................................................25 II.7.5 La directive ORG ..........................................................................................................................................25 II.7.6 La directive #DEFINE ................................................................................................................................26 II.7.7 Les directives LOW et HIGH .....................................................................................................................26 II.7.8 La directive DE .............................................................................................................................................26 II.7.9 La directive DT .............................................................................................................................................27 II.7.10 La directive END : ........................................................................................................................................27 II.7.11 La directive __CONFIG ................................................................................................................................27

    II.8 Les oprateurs arithmtique et logique de l'assembleur ........................................................................27

    II.9 Les macros ...............................................................................................................................................................28

  • Microcontrleur PIC16F887 A.OUMNAD 5

    Chapitre III .......................................................................................................................................................... 29

    LES OUTILS DE DEVELOPPEMENT ................................................................................................................ 29

    III.1 Procdure de travail .............................................................................................................................................29 III.1.1 Programmeur simple .................................................................................................................................29 III.1.2 PIC en mode excution .........................................................................................................................30

    III.2 Lenvironnement de dveloppement MPLAB ..........................................................................................30

    III.3 Programme type : adressage direct ................................................................................................................32 III.3.1 Des macros pour slectionner les banks .............................................................................................34

    III.4 Boucles de temporisation ...................................................................................................................................35 III.4.1 Temporisation avec une boucle .............................................................................................................35 III.4.2 Temporisation avec 2 boucles imbriques .........................................................................................36 III.4.1 Temporisation avec 3 boucles imbriques .........................................................................................36

    Chapitre IV .......................................................................................................................................................... 38

    LES PORTS dENTRE SORTIES ...................................................................................................................... 38

    IV.1 Le port d' E/S PORTA ...........................................................................................................................................38

    IV.2 Le port d'E/S PORTB ............................................................................................................................................39

    IV.3 Le port d' E/S PORTC ............................................................................................................................................39

    IV.4 Le port d' E/S PORTD ...........................................................................................................................................39

    IV.5 Le port d'E/S PORTE ............................................................................................................................................40

    IV.6 Situation au dmarrage .......................................................................................................................................40

    IV.7 Programmes types ................................................................................................................................................40 IV.7.1 Faire clignoter une LED.............................................................................................................................40 IV.7.2 Commande d'un relai .................................................................................................................................42

    IV.8 Commande d'un afficheur sept segments .....................................................................................................44

    IV.9 Commande d'un afficheur LCD .........................................................................................................................46 IV.9.1 Initialisation de l'afficheur en mode 8 bits .........................................................................................47 IV.9.2 Initialisation de l'afficheur en mode 4 bits .........................................................................................47 IV.9.3 Exemple de branchement.........................................................................................................................49

    Chapitre V ............................................................................................................................................................ 50

    LES MMOIRES PERMANENTES ..................................................................................................................... 50

    V.1 La mmoire EEPROM de donnes ....................................................................................................................50

    V.2 Procdure de lecture dans la EEPROM...........................................................................................................51

    V.3 Procdure d'criture dans la EEPROM ...........................................................................................................51

    V.4 La mmoire EEPROM Programme ou mmoire flash ...............................................................................52

    V.5 Procdure de lecture dans la mmoire programme .................................................................................52

    V.6 Procdure d'criture dan la mmoire programme ....................................................................................53

    V.7 Mcanisme d'criture dan la mmoire programme ..................................................................................53

    Chapitre VI .......................................................................................................................................................... 55

    LES INTERRUPTIONS ........................................................................................................................................ 55

    VI.1 Droulement d'une interruption .....................................................................................................................55

    VI.2 Les sources d'interruption .................................................................................................................................56

    VI.3 L'interruption INT (Entre RB0 de PORTB) .................................................................................................56

  • Microcontrleur PIC16F887 A.OUMNAD 6

    VI.4 L'interruption IOCB ..............................................................................................................................................56

    VI.5 Les autres interruptions .....................................................................................................................................57

    Chapitre VII ......................................................................................................................................................... 58

    LES TIMERS ......................................................................................................................................................... 58

    VII.1 Le Timer TMR0 .......................................................................................................................................................58 VII.1.1 Programmes types: Clignoter LED, scrutation du drapeau T0IF ................................................59 VII.1.2 Programme type: Clignoter LED, interruption de TMR0 ...............................................................60

    VII.2 Le Timer TMR2 .......................................................................................................................................................61 VII.2.1 Cycle de comptage ......................................................................................................................................61 VII.2.2 Le registre T2CON: ......................................................................................................................................62 VII.2.3 Programme type : Clignoter une LED, Interruption de TMR2 ......................................................62 VII.2.4 Programme type : Signal asymtrique .................................................................................................64

    Chapitre VIII ....................................................................................................................................................... 65

    LE MODULE DE CONVERSION ANALOGIQUE NUMRIQUE...................................................................... 65

    VIII.1 Les registres ADCON0 et ADCON1..........................................................................................................66

    VIII.2 Droulement dune Conversion .............................................................................................................67

    VIII.3 Temps de conversion .................................................................................................................................67

    VIII.4 Temps d'acquisition ...................................................................................................................................68

    VIII.5 Frquence d'chantillonnage ..................................................................................................................68

    VIII.6 Valeur numrique obtenue ......................................................................................................................69

    VIII.7 Programmation en bref.............................................................................................................................69

    VIII.8 Programmes types ......................................................................................................................................69 VIII.8.1 Prendre une seule mesure .......................................................................................................................69 VIII.8.2 Relever 40 chantillons ............................................................................................................................70 VIII.8.3 Relever 40 chantillons, fe=8000 Hz ....................................................................................................71

    Chapitre IX .......................................................................................................................................................... 73

    L'USART................................................................................................................................................................ 73

    IX.1 Mode Asynchrone .................................................................................................................................................73 IX.1.1 Mode 8 bits ....................................................................................................................................................73 IX.1.2 Mode 9 bits ....................................................................................................................................................74

    IX.2 Le port en transmission ......................................................................................................................................74 IX.2.1 Le registre de contrle TXSTA ................................................................................................................74

    IX.3 Le port en rception .............................................................................................................................................75 IX.3.1 Lecture du 9me bit ......................................................................................................................................76 IX.3.2 Le registre de contrle RCSTA ................................................................................................................76 IX.3.3 Mode dtection d'adresse ........................................................................................................................77

    IX.4 La vitesse de communication ............................................................................................................................78 IX.4.1 Le registre BAUDCTL ..................................................................................................................................79

    IX.5 La transmission en bref (sans interruption)................................................................................................79

    IX.6 La rception en bref (sans interruption) ......................................................................................................80

    IX.7 Registres utiliss par l'USART ...........................................................................................................................80

  • Microcontrleur PIC16F887 A.OUMNAD 7

    Chapitre I

    LES ELEMENTS DE BASE DU PIC16F887

    I.1 Elments essentiels du PIC 16F887

    Parmi les lments essentiels du PIC16F887, on peut citer:

    Mmoire programme de type EEPROM flash de 8K mots de 14 bits,

    Mmoire EEPROM de 256 octets,

    RAM donne de 368 octets,

    5 ports d'entre sortie (8bits), PORTA, PORTB, PORTC, PORTD, PORTE(4 bits),

    Convertisseur Analogiques numriques 10 bits 14 canaux,

    USART, Port srie universel, mode asynchrone (RS232) et mode synchrone,

    MSSP, Port srie synchrone supportant I2C,

    Trois TIMERS TMR0, TMR1 et TMR2,

    Deux modules de comparaison et Capture CCP1 et CCP2,

    Un chien de garde,

    13 sources d'interruption,

    Gnrateur d'horloge, { quartz (jusqu { 20 MHz) ou Oscillateur RC,

    Protection de code,

    Fonctionnement en mode sleep pour rduction de la consommation,

    Programmation in-situ ICSP (In Circuit Serial Programming) 12V ou 5V,

    Possibilit aux applications utilisateur daccder { la mmoire programme,

    Tension de fonctionnement de 2 5V,

    Jeux de 35 instructions

  • Microcontrleur PIC16F887 A.OUMNAD 8

    Fig. I.1 : Les lments constitutifs du PIC 16F887

    I.2 Brochage du 16F887

    I-1 : brochage du 16F887 (source : document Microchip DS41291F)

    Mmoire

    programme de type Flash

    8 x 1024

    mots de 14 bits

    EEPROM 256 octets

    14 bits : config

    timer 2 TMR2

    Chien de garde

    WDT

    Horloge systme

    PORTB

    W

    ALU

    PORTC

    timer 1 TMR1

    timer 0 TMR0

    MSSP (I2C/SPI)

    CCP1 Capture/Comparaison

    CCP2 Capture/Comparaison

    Unit

    De contrle

    USART (RS232)

    PORTE PORTD

    96 registres systme SFR

    368 registres utilisateur

    GPR

    DAC

    10 bits

    PORTA

  • Microcontrleur PIC16F887 A.OUMNAD 9

    I.3 L'Horloge

    Figure I-2 : possibilits dhorloge sur un PIC16F887 (source : document Microchip DS41291F)

    Le PIC16F887 dispose dun gnrateur interne qui dlivre une horloge de frquence Fosc. Cette horloge est utilise par pratiquement tous les modules. L'horloge utilise par l'unit de traitement pour cadencer l'excution du programme est obtenu par division par quatre. On l'appelle horloge instruction car le PIC excute une instruction par priode de cette horloge. Sa priode sera appele Tcy en rfrence au cycle machine.

    Le gnrateur d'horloge est constitu de deux oscillateurs. Un oscillateur externe et un double oscillateur interne. Le premier oscillateur est dit externe car le quartz ou le rseau RC permettant de fixer la frquence sont externes.

    Le choix de l'oscillateur est de la frquence Fosc se fait l'aide de deux registres:

    o Le registre de configuration permanent CONFIG1 de type EEPROM qui est flach au moment de l'implantation du programme sur le PIC,

    o Le registre OSCCON qui est situ dans la RAM et qui peut tre chang tout moment lors de l'excution du programme.

    I.3.1 Oscillateur quartz

    Figure I-3 : Oscillateur quartz

    La frquence Fosc peut aller jusqu{ 20 MHz. Le quartz (externe) doit tre reli aux entres OSC1 et OSC2. Le rseau de filtrage Rs, C1 et C2 n'est pas obligatoire pour les basses frquences.

  • Microcontrleur PIC16F887 A.OUMNAD 10

    Le registre CONFIG1 doit tre configur par la directive __CONFIG dans lun des modes suivants :

    o LP : FOSC= 000. Pour les quartz de frquence infrieure 200 kHz. Ce mode est bien adapt pour le quartz d'horlogerie 32.768 kHz qui permet d'obtenir une horloge d'une seconde par division de frquence.

    o XT : FOSC= 001. Pour les quartz de frquence infrieure 8 MHz

    o HS : FOSC= 010 : Pour les quartz de 8 MHz 20 MHz. Dans ce cas, il est conseill dutiliser C1 et C2 avec des valeurs de 10pF 30pF .

    o

    I.3.2 Oscillateur RC.

    Figure I-4 : oscillateur RC

    La frquence de l'oscillation est fixe par Vdd, Rext et Cext. Elle peut varier lgrement d'un circuit l'autre.

    Le registre CONFIG1 doit tre configur dans lun des modes suivants :

    o RC : FOSC= 111. Le rseau RC est connect sur la broche OSC1. L'horloge instruction Fosc/4 est accessible sur la broche OSC2. Lhorloge systme de frquence Fosc/4 est disponible sur la sortie OSC2. On peut ainsi mesurer sa frquence et ajuster les valeurs de Rext et Cext.

    o RCIO : FOSC= 110. Dans ce cas, l'horloge fosc/4 n'est pas accessible. La broche OSC2 fonctionne comme E/S normale RA6 accessible par le bit 6 du port PORTA

    o

    I.3.3 Horloge externe.

    Figure I-5: Horloge externe

    Lhorloge externe est applique sur lentre OSC1. La broche OSC2 fonctionne en E/S normale RA6. Le registre CONFIG1 doit tre configur dans le mode EC : FOSC= 011

    I.3.4 Oscillateur interne.

    Dans ce mode, on na pas besoin de composant externes. Lhorloge est issue de lun des deux oscillateurs internes HFINTOSC et LFINTOSC.

  • Microcontrleur PIC16F887 A.OUMNAD 11

    Le registre CONFIG1 doit tre configur dans lun des deux modes :

    INTOSC : FOSC := 101: l'horloge Fosc/4 est disponible sur la broche OSC2 qui fonctionne en CLKOUT alors que la broche OSC1 fonctionne en E/S normale RA7

    INTOSCIO : FOSC= 100: Les deux broches OSC1 et OSC2 fonctionnent en E/S normales

    Il faut configurer le registre OSCCON (bank1) pour choisir la frquence dsire entre 31kHz et 8MHz

    I.3.4.1 Le registre OSCCON

    U(0) R/W(1) R/W(1) R/W(0) R(1) R(0) R(0) R/W(1)

    OSCCON - IRCF2 IRCF1 IRCF0 OSTS HTS LTS SCS

    IRCF: slection de frquence

    111 8 MHz

    110 4 MHz (default)

    101 2 MHz

    100 1 MHz

    011 500 kHz

    010 250 kHz

    001 125 kHz

    000 31 kHz (LFINTOSC) OSTS: indicateur sur l'tat de l'horloge en mode Internal External Switchover (voir registre CONFIG1)

    1 le systme fonctionne avec l'horloge dfinie par les bits FOSC du registre CONFIG1

    0 le systme fonctionne avec l'horloge interne (HFINTOSC ou LFINTOSC) HTS: Indicateur sur l'tat de l'oscillateur interne HFINTOSC (aprs le dmarrage)

    1 HFINTOSC s'est stabilis

    0 HFINTOSC ne s'est pas encore stabilis LTS: Indicateur sur l'tat de l'oscillateur interne LFINTOSC (aprs le dmarrage)

    1 LFINTOSC s'est stabilis

    0 LFINTOSC ne s'est pas encore stabilis SCS: Choix de l'horloge systme (ce bit est important)

    1 Le systme utilise l'horloge issue des oscillateurs interne

    0 Le systme utilise l'horloge issue de l'oscillateurs externe (RC, XT , HS )

    I.4 Les Registres de configuration CONFIG1 et CONFIG2

    Pour le PIC16F887, les switchs de configuration sont regroups dans deux registres CONFIG1 et CONFIG2 situs dans la EEPROM de configuration aux positions 2007h et2008h. Attention, ces registres ne sont pas des SFR que lon peut modifier durant lexcution du programme. Ce sont des registres permanents flashs au mme moment que le programme. Les bits de ces registres sont aussi appels fusibles ou switchs de configuration.

  • Microcontrleur PIC16F887 A.OUMNAD 12

    Ces deux registres doivent tre configurs l'aide de la directive __CONFIG. Les logiciels de flachage du PIC permettent aussi de les positionner.

    CONFIG1 : 2007

    DEBUG LVP FCMEN IESO BOREN1 BOREN0 CPD CP MCLRE PWRTE WDTE FOSC2 FOSC1 FOSC0

    DEBUG: In-Circuit Debugger Mode bit

    Si on active ce mode, on peut brancher un quipement (dbuggeur) sur les broches RB6 et RB7 et interagir avec le PIC alors quil est dj{ plac dans son environnement rel. On peut ainsi, par exemple suivre un programme la trace, consulter les valeurs des registres pour trouver les erreurs.

    1 In-Circuit Debugger dsactiv

    0 In-Circuit Debugger active

    LVP: Low Voltage Programming Enable bit Lors du flashage du PIC, il faut le placer en mode programmation en forant la broche MCLR soit 12V (mode HVP) soit 5V (mode LVP)

    0 Low Voltage programming dsactiv (mode HVP)

    1 Low Voltage programming activ

    FCMEN: Fail-Safe Clock Monitor Enable bit Le fail safe clock monitor permet au PIC de continuer fonctionner en cas dfaillance des lments externes de lhorloge en basculant automatiquement sur lhorloge interne

    0 Fail-Safe Clock Monitor dsactiv

    1 Fail-Safe Clock Monitor est activ

    IESO: Internal External Switchover bit Les oscillateurs quartz sont connus pour mettre du temps dmarrer. Si on active le mode Internal External Switchover, Le PIC commence { excuter le programme { laide de lhorloge interne en attendant que lhorloge externe se stabilise pour basculer dessus automatiquement

    0 Internal/External Switchover dsactiv

    1 Internal/External Switchover activ

    BOREN: Brown-out Reset Selection bits Si ce mode est activ, le PIC se rinitialise automatiquement chaque fois que Vdd chute en dessous de La valeur VBOR fixe par le bit BOR4V du registre CONFIG2

    11 BOR activ

    10 BOR activ en fonctionnement normal, dsactiv en mode sleep

    01 BOR contrl durant lexcution du programme { laide du bit SBOREN du registre PCON

    00 BOR dsactiv

    CPD: Data Code Protection bit Protection en lecture de la EEPROM de donnes

    1 dsactiv

    0 activ

    CP: Code Protection bit

    Protection en lecture de la mmoire programme

  • Microcontrleur PIC16F887 A.OUMNAD 13

    1 dsactiv

    0 activ

    MCLRE: RE3/MCLR pin select bit

    Choix de la fonction de la broche RE3/MCLR

    1 RE3/MCLR fonctionne en MCLR = entre RESET ( Initialisation)

    0 RE3/MCLR fonctionne comme entre numrique. Elle ne peut pas fonctionner en sortie

    PWRTE: Power-up Timer Enable bit Si on active cette option, au dmarrage, le PIC attend 64 ms avant de dmarrer le programme.

    1 PWRT dsactiv

    0 PWRT activ

    WDTE: Watchdog Timer Enable bit

    1 Chien de garde WDT activ

    0 le chien de garde WDT est dsactiv mail il peut tre activ durant lexcution du programme { laide du bit SWDTEN du registre WDTCON

    FOSC: Oscillator Selection bits (voir paragraphe sur lhorloge)

    111 RC oscillator: RA6=CLKOUT, RA7=pour connecter R et C

    110 RCIO oscillator: RA6=E/S normale, RA7=pour connecter R et C

    101 INTOSC oscillator: RA6=CLKOUT, RA7=E/S normale

    100 INTOSCIO oscillator: RA6=E/S normale, RA7=E/S normale

    011 EC (External Clock): RA6=E/S normale, RA7= entre horloge

    010 HS oscillator: High-speed crystal/resonator, Quartz reli sur RA6 et RA7

    001 XT oscillator: Crystal/resonator, Quartz reli sur RA6 et RA7

    000 LP oscillator: Low-power crystal, Quartz reli sur RA6 et RA7

    CONFIG2 : 2008 - - - WRT1 WRT0 BOR4V - - - - - - - -

    WRT: Flash Program Memory Self Write Enable bits,

    Pour protger la mmoire programme contre des critures intempestives (par le programme)

    00 zone 0000h 0FFFh protge, le reste contrl par le bit WREN du registre EECON1

    00 zone 0000h 07FFh protge, le reste contrl par le bit WREN du registre EECON1

    00 zone 0000h 00FFh protge, le reste contrl par le bit WREN du registre EECON1

    11 protection dsactive. La totalit de la mmoire dpend du bit WREN du registre EECON1 BOR4V: Brown-out Reset Selection bit,

    Permet de dfinir la valeur de VBOR, valeur de Vdd en dessous de laquelle le PIC se rinitialise automatiquement (dans le cas ou le BOREN est activ)

    0 VBOR = 2.1V

    1 VBOR = 4V

  • Microcontrleur PIC16F887 A.OUMNAD 14

    Les bits non utiliss nont pas dimportance. On peut les placer { 0 ou 1.

    I.4.1 Exemple de Configuration gnrique

    CONFIG1 : DEBUG : OFF(1) LVP : OFF(0) FCMEN :OFF(0) IESO : OFF(0) BOREN : ON(11) DCP : OFF(1) CP : OFF(1), MCLRE : ON(1) PWRTE : ON(0) WDTE : OFF(0), FOSC : INTOSCIO(100) 10 0011 1110 0100 = 0x23E4 CONFIG2 : WRT:OFF(11), BOR4V : 4V(0) 11 1111 1111 1111 = 0x3FFF __CONFIG 0x2007 , 0x23E4 __CONFIG 0x2008 , 0x3EFF

    I.5 L'unit de traitement centrale (CPU)

    Le PIC16F887 dispose d'une unit de traitement 8 bits d'architecture RISC (Reduced Instruction Set Computer). Elle reconnait un jeu de 35 instructions simples. Les instructions complexes comme la multiplication et la division ne sont pas implantes. La diffrence avec les processeurs d'architecture CISC (Complex Instruction Set Computer), qui peuvent dcoder jusqu' 200 instructions dont certaines peuvent tre trs sophistiques, est que toutes les instructions sont codes sur un nombre fixe et rduit de bits. Ceci en facilite le dcodage et l'excution. En effet, toutes les instruction sont codes sur 14 bits et sont excutes en un cycle Tcy de l'horloge instruction Fosc/4.

    La mmoire programme et la mmoire de donnes sont distinctes ce qui facilite la gestion des bus. La mmoire programme est une mmoire de type EEPROM flash de capacit 8 1024 mots de 14 bits. Chaque position contient le code d'une instruction. Cette mmoire garde son contenu quand le PIC est teint et peut tre reprogramme souhait. Elle joue un peu le rle d'un disque dur.

    La mmoire de donnes est une RAM appele fichier des registres. Elle est constitue de 96 registres de configuration appels SFR (Special Function Registers) et de 368 registre usage gnral GPR (General Propose Registers) qui jouent le rle de RAM proprement dit. Tous les registres SFR ou GPR sont des registres 8 bits. Toutes les oprations excutes dessus sont des oprations 8 bits.

    Le processeur dispose d'un seul accumulateur nomm W (Working register). C'est un registre de travail 8 bits intgr avec lUnit Arithmtique et Logique. Il ne peut donc pas tre adress de la mme faon que les registres SFR ou GPR puisqu'il n'est pas situ dans la RAM. Toutes les oprations deux oprandes passent par lui. On peut avoir : - Une opration entre W et une valeur (prcise dans l'instruction) avec rsultat dans W - Une opration entre W et un registre (RAM). Le rsultat peut tre rcupr soit dans W soit dans le

    registre.

    Le processeur dispose d'une pile de 8 positions non accessible par programme. Elle est utilise pour sauvegarder le compteur programme lors de l'appel de sous-programmes et au branchement aux interruptions. Le programmeur fera donc attention ne pas avoir plus de 8 appels de fonctions imbrique.

  • Microcontrleur PIC16F887 A.OUMNAD 15

    Figure I-6 : structure trs simplifie de l'unit de traitement

    I.6 Organisation de la mmoire RAM

    Lespace mmoire RAM adressable est de 512 positions de 1 octet chacune :

    96 positions sont rserves au SFR (Special Function Registers) qui sont les registres de configuration du PIC.

    Les 416 positions restantes constituent les registres GPR (General Propose Registers) ou RAM utilisateur. Sur le 16F887, 3 blocs de 16 octets chacun ne sont pas implants physiquement do une capacit de RAM utilisateur de 368 GPR.

    Pour accder la RAM, on dispose de deux modes dadressage :

    I.6.1 Accs la RAM par adressage DIRECT

    Avec ce mode dadressage, on prcise dans linstruction la valeur de ladresse { laquelle on veut accder. Par exemple, pour additionner le contenu de l'accumulateur W avec le contenu de la case mmoire d'adresse 50h avec rsultat dans Won utilise l'instruction ADDWF 50h,0

    ADDWF est l'instruction qui ajoute W au contenu d'une case mmoire. 50h est l'adresse de notre case mmoire. 0 est un bit qui prcise que le rsultat doit tre rang dans W, si on avait pris 1, le rsultat aurait t rang dans la case mmoire 50h.

    Cette instruction sera code sur 14 bits, comme le montre la figure ci-dessous :

    Figure I-7: code machine d'une instruction avec adressage direct

    CO est le code opration de l'instruction ADDWF. Il est cod sur 6 bits car on a 35 instructions diffrentes,

    d prcise la destination du rsultat. Comme il n'y a que deux possibilits W ou F, un seul bit suffit,

    adresse est l'adresse la case mmoire. On est oblig de la coder sur 7 bits pour complter les 14 bits de l'instruction

    Problme, 7 bits permettent dadresser seulement 128 positions. Pour pouvoir adresser les 512 positions accessibles, il faut 9 bits dadresse. Pour avoir ces 9 bits, le PIC complte les 7 bits venant de linstruction par deux bits situs dans le registre de configuration STATUS. Ces bits sont appels RP0

    CO d adresse

    6 1 7

    Mmoire

    programme Flash

    8 x 1024 x 14 bits

    Horloge systme

    W

    UAL

    Unit de control et de

    dcodage

    96 SFR

    368 GPR

    CPU

    RAM

  • Microcontrleur PIC16F887 A.OUMNAD 16

    et RP1 et doivent tre positionns correctement avant toute instruction qui accde la RAM par ladressage direct.

    Figure I-8 : constitution de l'adresse pour l'adressage physique

    Mme si on prcise une adresse suprieure 127 (+ de 7 bits) dans une instruction, elle est tronque 7 bits puis complte par les bits RP0 et RP1 pour former une adresse 9 bis. Par exemple, pour copier laccumulateur W dans la case mmoire dadresse 1EFh, il faut dabord placer les bits RP0 et RP1 1 , ensuite on utilise soit linstruction MOVWF 6Fh soit linstruction MOVWF 1EFh, qui donne le mme rsultat. En effet, que lon crive 6Fh = 0110 1111 ou 1EFh = 0001 1110 1111, le PIC ne prend que 7 bits soit : 1101111 = 6Fh et complte avec les bits RP1 RP0 pour obtenir 11 1101111 = 1EFh. Pour positionner les bits RP0 et RP1 on utilise les instructions bcf et bsf.

    La RAM apparat alors organise en 4 pages appeles banks de 128 octets chacun. L'adresse instruction permet d'adresser l'intrieur d'un bank alors que les bits RP0 et RP1 du registre STATUS permettent de slectionner un bank. La Figure I-9 montre lorganisation de la RAM avec les zones alloue au SFR et aux GPR. Les zones hachures ne sont pas implantes physiquement. Si on essaye dy accder, on est aiguill automatiquement vers la zone [70h,7Fh] appele zone commune.

    Oublier de slectionner le bank est une cause frquente de disfonctionnement de programmes. Si par exemple RP1 RP0 = 01 (bank1 est le bank courant). Si on veut faire une opration sur la case 20h et on oublie de changer de bank. Le processeur prend 7 bits de l'adresse 20h=0010 0000 et complte avec 01 ce qui donne 01 0100000= A0h. Nous croyons travailler sur la case 20h alors que le processeur travaille sur la case A0h.

    De la mme faon, si le bank courant est 11=bank3 et on fait une opration sur le registre PORTA, le processeur travaille sur le registre SRCON.

    Les 16 cases de la zone commune sont intressantes car pour y accder, on n'est pas oblig de prciser le bank.

    7 bits venant de l'instruction

    9 bits

    RP0 RP1

  • Microcontrleur PIC16F887 A.OUMNAD 17

    Bank 0 (00) Bank 1 (01) Bank 2 (10) Bank 3 (11) 00h INDF 80h INDF 100h INDF 180h INDF 01h TMR0 81h OPTION_REG 101h TMR0 181h OPTION_REG

    02h PCL 82h PCL 102h PCL 182h PCL 03h STATUS 83h STATUS 103h STATUS 183h STATUS 04h FSR 84h FSR 104h FSR 184h FSR 05h PORTA 85h TRISA 105h WDTCON 185h SRCON 06h PORTB 86h TRISB 106h PORTB 186h TRISB 07h PORTC 87h TRISC 107h CM1CON0 187h BAUDCTL

    08h PORTD 88h TRISD 108h CM2CON0 188h ANSEL 09h PORTE 89h TRISE 109h CM2CON1 189h ANSELH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah PCLATH 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh INTCON 0Ch PIR1 8Ch PIE1 10Ch EEDATA 18Ch EECON1 0Dh PIR2 8Dh PIE2 10Dh EEADR 18Dh EECON2 0Eh TMR1L 8Eh PCON 10Eh EEDATH 18Eh

    0Fh TMR1H 8Fh OSCCON 10Fh EEADRH 18Fh 10h T1CON 90h OSCTUNE 110h

    120h 16Fh

    190h

    1A0h

    1EFh

    11h TMR2 91h SSPCON2

    12h T2CON 92h PR2 13h SSPBUF 93h SSPADD 14h SSPCON 94h SSPSTAT

    15h CCPR1L 95h WPUB 16h CCPR1H 96h IOCB 17h CCP1CON 97h VRCON 18h RCSTA 98h TXSTA 19h TXREG 99h SPBRG 1Ah RCREG 9Ah SPBTGH

    1Bh CCPR2L 9Bh PWM1CON 1Ch CCPR2H 9Ch ECCPAS 1Dh CCP2CON 9Dh PSTRCON 1Eh ADRESH 9Eh ADRESL 1Fh ADCON0 9Fh ADCON1

    20h 6Fh

    A0h EFh

    70h 7Fh

    Zone commune

    F0h FFh

    170h

    17Fh

    1F0h

    1FFh

    Figure I-9 : organisation de la RAM du 16F876/877

    I.7 Accs la RAM par ladressage INDIRECT

    Pour accder une position de la RAM en utilisant ladressage indirect, on passe toujours par une position fictive appele INDF (Indirect File).

    Exemple : linstruction CLRF INDF signifie : mettre { zro la case mmoire dadresse INDF.

    Mais quelle est ladresse de cette position appele INDF ? La rponse est :

    INDF est la case mmoire pointe par le pointeur IRP/FSR.

    IRP est un bit qui se trouve dans le registre STATUS et FSR est un registre accessible dans tous les bancs. On peut se demander pourquoi on ajoute le bit IRP. En effet, le registre de pointage FSR est un

  • Microcontrleur PIC16F887 A.OUMNAD 18

    registre 8 bits, il peut donc adresser au maximum 256 positions mmoire (de 00h FFh), cest seulement la moiti de la RAM. Il nous manque un bit pour avoir les 9 bits ncessaires. On utilise le bit IRP qui se trouve dans le registre STATUS.

    Exemple : Si on place 74h dans le registre FSR et on positionne le bit IRP 1, alors, linstruction CLRF INDF signifie : remettre { zro la case mmoire dadresse 174h.

    Figure I-10 : organisation de la RAM pour l'adressage indirect

    En rsum, chaque fois que le PIC rencontre le mot INDF dans un programme, il sait quil sagit de la case mmoire dont ladresse (9 bits) se trouve dans le pointeur FSR complt par le bit IRP du registre STATUS

    INDF est la case mmoire pointe par le pointeur:

    IRP = 0 000h 0FFh page 0

    IRP = 1 100h 1FFh page 1

    FSR

    pointeur 9 bits

    IRP

    SFR (32)

    SFR (32)

    GPR (80)

    GPR (96)

    SFR (16)

    GPR (96)

    SFR (16)

    GPR (96)

    0 00

    0 1F

    0 20

    0 7F

    0 80

    0 9F

    0 A0

    0 EF

    1 00

    1 0F

    1 10

    1 6F

    1 80

    1 8F

    1 90

    1 EF

    IRP

    page 0 page 1

    FSR

    0 FF 1 FF

  • Microcontrleur PIC16F887 A.OUMNAD 19

    I.8 Quelques registres de configuration et leurs bits Bank RESET

    STATUS all IRP RP1 RP0 TO PD Z DC C 0001 1xxx

    OPTION_REG 1/3 RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111

    INTCON all GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x

    PIE1 1 - ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000

    PIR1 0 - ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000

    PIE2 1 OSIE C2IE C1IE EEIE BCLIE ULPWUIE - CCP2IE -r-0 0--0

    PIR2 0 OSIF C2IF C1IF EEIF BCLIF ULPWUIF - CCP2IF -r-0 0--0

    PCON 1 - - ULPWUE SBOREN POR BOR --01 --qq

    OSCCON 1 IRCF2 IRCF1 IRCF0 OSTS HTS LTS SCS -110 q000

    OSCTUNE 1 - - - TUN4 TUN3 TUN2 TUN1 TUN0 -110 q000

    EECON1 3 EEPGD WRERR WREN WR RD x--- x000

    TXSTA 1 CSRC TX9 TXEN SYNC BRGH TRMT TX9D 0000 -010

    RCSTA 0 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x

    CCP1CON 0 P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000

    CCP2CON 0 DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000

    T1CON 0 T1GINV TMR1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000

    T2CON 0 TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000

    SSPCON 0 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000

    SSPCON2 1 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000

    SSPSTAT 1 SMP CKE D/A P S R/W UA BF 0000 0000

    CM1CON0 2 C1ON C1OUT C1OE C1POL - C1R C1CH1 C1CH0 0000 -000

    CM2CON0 2 C2ON C2OUT C2OE C2POL - C2R C2CH1 C2CH0 0000 -000

    CM2CON1 2 MC1OUT MC2OUT C1RSEL C2RSEL - - T1GSS C2SYNC 0000 --10

    SRCON 3 SR1 SR0 C1SEN C2REN PULSS PULSR - FVREN 0000 00-0

    PWM1CON 1 PRSEN PDC6 PDC5 PDC4 PDC3 PDC2 PDC1 PDC0 0000 0000

    ECCPAS 1 ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1 PSSBD0 0000 0000

    PSTRCON 1 - - - STRSYNC STRD STRC STRB STRA ---0 0001

    VRCON 1 VREN VROE VRR VRSS VR3 VR2 VR1 VR0 0000 0000

    TXSTA 1 CSRC TX9 TXEN SYNC BRGH TRMT TX9D 0000 -010

    RCSTA 0 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x

    BAUDCTL 3 ABDOVF RCIDL - SCKP BRG16 - WUE ABDEN 01-0 0-00

    ADCON0 0 ADCS1 ADCS0 CHS3 CHS2 CHS1 CHS0 GO/DONE ADON 0000 00-0

    ADCON1 1 ADFM VCFG1 VCFG0 - - - - 0-00 ----

    WDTCON 2 - - - WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN ---0 1000

    TRISx 1 1111 1111

    Tableau I-1 : dtail des registres SFR et leurs tats au dmarrage

    Exercice 1) Dans quel bank se trouvent les cases mmoire d'adresse : 1A4h, B5h, 130h, 58h, 100, 200, 250, 300, 400 Exercice 2) Combien de cases mmoires libres (GPR) y a-t-il dans la zone mmoire qui commence la position A0h et se termine EAh. Exercice 3) Quelle est l'adresse de la dernire position d'une zone mmoire de 40 cases qui commence la position 190h. Exercice 4) Combien de cases mmoires libres (GPR) y a-t-il dans les bancs bank0, bank1, bank2 et bank3

  • Microcontrleur PIC16F887 A.OUMNAD 20

    Chapitre II

    LE JEUX D'INSTRUCTIONS DU PIC16F887

    Tous les PIC Mid-Range ont un jeu de 35 instructions,

    Chaque instruction est code sur un mot de 14 bits qui contient le code opration (OC) ainsi que l'oprande,

    Toutes les instructions sont excutes en un cycle d'horloge, part les instructions de saut qui sont excutes en 2 cycles dhorloge. Sachant que lhorloge systme est gale { Fosc/4, si on utilise un quartz de 20MHz, on obtient une horloge Fosc/4 = 5000000 cycles/seconde, cela nous donne une puissance de lordre de 5MIPS (5 Million d Instructions Par Seconde

    II.1 Les instructions orientes Registre

    Ce sont des instructions qui manipulent un octet se trouvant dans la RAM. a peut tre un registre de configuration SFR ou une case mmoire quelconque (Registre GPR) Ces instruction se prsentent sous la forme : ADDWF F,d

    ADDWF est le nom de l'instruction. Le F dans le nom de l'instruction signifie que celle-ci agit sur une case mmoire (registre). Chez Microchip, la RAM est appele register File (Fichier des registres), d'o l'utilisation de la lettre F pour tout ce qui est registre.

    o F est l'adresse du registre (SFR ou GPR). a peut tre une adresse directe ou le mot INDF pour indiquer l'adressage indirect.

    o d est la destination du rsultat. Si d=0 ou d=w, le rsultat est rang dans l'accumulateur W. Si d=1 ou d=f, le rsultat est rang dans le registre F. Dans le tableau ci-dessous, on utilise l'abrviation {W,F ? d} pour dire que le rsultat va dans W ou dans F selon la valeur de d.

    ADDWF 70h,1 ou ADDWF 70h,f Additionner le contenu de W avec le contenu du GPR 70h et placer le rsultat dans le GPR 70h

    XORWF 35h,0 ou XORWF 35h,w Faire un ou exclusif entre W et le contenu du GPR 35h et placer le rsultat dans W

    II.2 Les instructions orientes bits

    Ce sont des instructions destines { manipuler directement un bit dun registre que se soit un registre de configuration SFR ou une case mmoire quelconque (registre GPR). Tous les bits de la RAM peuvent tre manipuls individuellement.

    Ces instruction se prsentent sous la forme : BCF F,b

    o F est le registre qui contient le bit

    o b est le numro du bit dans le registre. On compte partir de la droite en commenant par 0

    BSF STATUS,2 ; signifie : mettre 1 le bit 2 (3me bit partir de la droite) du registre STATUS

  • Microcontrleur PIC16F887 A.OUMNAD 21

    II.3 Les instructions oprant sur une valeur

    Ce sont les instructions entre laccumulateur W est une valeur K prcise dans l'instruction. Le rsultat va dans W. Toutes ces instructions contiennent la lettre L dans leur nom. Ceci vient du fait que chez Microchip, ce type d'adressage est appel adressage Literal.

    II.4 Les instructions de saut et appel de procdures

    Ce sont les instructions qui permettent de sauter une autre position dans le programme et de continuer lexcution { partir de cette position. La position est dsigne par une tiquette qui peut tre n'importe quelle chane alphanumrique qui commence par caractre. L'tiquette peut tre termine par le caractre (:) mais ce n'est pas obligatoire. Elle peut tre seule sur une ligne ou au dbut d'une ligne contenant une instruction.

    II.5 Le jeu d'instructions

    {W,F ? d} signifie que le rsultat est rang soit dans W si d=0 ou w, soit dans F si d= 1 ou f

    INSTRUCTIONS OPERANT SUR REGISTRE indicateurs Cycles ADDWF F,d W+F {W,F ? d} C,DC,Z 1 ANDWF F,d W and F {W,F ? d} Z 1 CLRF F Clear F Z 1 COMF F,d Complmente F {W,F ? d} Z 1 DECF F,d dcrmente F {W,F ? d} Z 1 DECFSZ F,d dcrmente F {W,F ? d} skip if 0 1(2) INCF F,d incrmente F {W,F ? d} Z 1 INCFSZ F,d incrmente F {W,F ? d} skip if 0 1(2) IORWF F,d W or F {W,F ? d} Z 1 MOVF F,d F {W,F ? d} Z 1 MOVWF F W F 1 RLF F,d rotation gauche de F a travers C {W,F ? d} C 1 RRF F,d rotation droite de F a travers C {W,F ? d} 1 SUBWF F,d F W {W,F ? d} C,DC,Z 1 SWAPF F,d permute les 2 quartets de F {W,F ? d} 1 XORWF F,d W xor F {W,F ? d} Z 1 INSTRUCTIONS OPERANT SUR BIT BCF F,b RAZ du bit b du registre F 1 BSF F,b RAU du bit b du registre F 1 BTFSC F,b teste le bit b de F, si 0 saute une instruction 1(2) BTFSS F,b teste le bit b de F, si 1 saute une instruction 1(2) INSTRUCTIONS OPERANT SUR CONSTANTE ADDLW K W + K W C,DC,Z 1 ANDLW K W and K W Z 1 IORLW K W or K W Z 1 MOVLW K K W 1 SUBLW K K W W C,DC,Z 1 XORLW K W xor K W Z 1 AUTRES INSTRUCTIONS CLRW Clear W Z 1 CLRWDT Clear Watchdoc timer TO', PD' 1 CALL etqt Branchement un sous programme de label etqt 2 GOTO etqt branchement la ligne de label etqt 2 NOP No operation 1 RETURN retourne d'un sous programme 2 RETFIE Retour d'interruption 2 RETLW K retourne d'un sous programme avec K dans W 2 SLEEP se met en mode standby TO', PD' 1

  • Microcontrleur PIC16F887 A.OUMNAD 22

    II.5.1 Les instructions movwf et movf

    Ce sont les instructions les plus utilises, movwf: permet de copier laccumulateur W dans un registre (SFR

    ou GPR):

    movwf STATUS ; Copier le contenu de W dans le registre STATUS movwf 55h ; Copier W dans la case mmoire dadresse 55h

    movf: permet de copier le contenu dun registre (SFR ou GPR)

    dans laccumulateur W, le paramtre d doit tre = 0(w)

    movf STATUS,0 ; Copier le registre STATUS dans laccumulateur W movf 35h,w ; Copier le contenu du GPR 35h dans laccumulateur W

    Avec le paramtre d=1, linstruction movf semble inutile car elle permet de copier un registre sur lui-mme ce qui priori ne sert rien.

    movf STATUS,1 ; Copier le contenu du registre STATUS dans lui mme

    En ralit cette instruction peut savrer utile car elle positionne lindicateur Z. On peut s en servir pour tester si le contenu dun registre est gal { zro

    II.5.2 Les instructions btfss et btfsc

    Ces instructions permettent de tester un bit et de sauter ou non une ligne de programme en fonction du rsultat,

    Btfsc F,b ; bit test skip if clear : teste le bit b du registre F et saute linstruction suivante si le bit

    test est nul Btfss F,b ; bit test skip if set : teste le bit b du registre F et saute linstruction suivante si le bit

    test est gal 1

    exemple :

    sublw 100 ; 100 W W btfss STATUS,Z ; tester le bit Z du registre STATUS et sauter une ligne si Z=1 clrf 70h ; le programme continue ici si Z=0 cmpf 70h,f ; le programme continue ici si Z=1 suite du programme suite du programme

    II.5.3 Les instructions incfsz et decfsz

    Ces instructions permettent dincrmenter ou de dcrmenter un registre et de sauter si le rsultat est nul

    incfsz F,1 ; increment skip if Z : incrmente le registre F et sauter une ligne si le rsultat = 0. Le paramtre 1 indique que le rsultat de lincrmentation doit aller dans F.

    deccfsz F,f ; decrement skip if Z : dcrmente le registre F et sauter une ligne si le rsultat

    = 0. Le paramtre f indique que le rsultat de la dcrmentation doit aller dans F.

    W

    RAM

    MOVWF

    W

    RAM

    MOVF

  • Microcontrleur PIC16F887 A.OUMNAD 23

    II.5.4 Linstruction goto

    Permet de transfrer lexcution une autre position du programme repre par une tiquette (label)

    Instruction 1 Instruction 2 Goto bonjour instruction 3 instruction 4 instruction 5 bonjour: instruction 6 instruction 7

    Pour faire un branchement relatif la ligne courante, on peut utiliser le caractre $ qui dsigne l'adresse de la ligne courante

    Instruction Instruction Goto $-1 ; aller la ligne prcdente Instruction Goto $+3 ; sauter 2 lignes Instruction Instruction Instruction Goto $ ; rester plant ici

    II.5.5 Linstruction call

    Linstruction call permet dappeler une fonction. Une fonction est un sous programme qui peut tre crit avant ou aprs le programme principal. Sa premire ligne doit comporter une tiquette et elle doit se terminer par return.

    La diffrence en call et goto est que, quant le processeur rencontre linstruction call, il sauvegarde (dans la pile) ladresse de la ligne suivante avant de se brancher { la fonction. Comme a, quand il rencontre linstruction return, il sait o il doit retourner pour continuer lexcution du programme principal

    Programme principal

    Debut: Instruction Instruction Instruction Instruction Call afficher Instruction Instruction Instruction goto debut

    Fonction

    Afficher: Instruction Instruction Instruction Instruction Instruction Instruction Instruction return

  • Microcontrleur PIC16F887 A.OUMNAD 24

    II.6 Les indicateur dtat (drapeaux)

    Les bits Z, DC et C situs dans le registre STATUS sont des indicateurs qui permettent de savoir comment une instruction sest termine. Toutes les instructions nagissent pas sur les indicateurs, voir liste des instructions ci-dessous. Z : passe 1 quand le rsultat dune instruction est nul C : passe 1 quand lopration a gnr une retenue DC : Digital carry, passe 1 quand l'opration sur le bit 3 (4me bit) gnre une retenue vers le bit 4

    Ces bits peuvent tre utiliss trs astucieusement par les instructions btfsc et btfss qui permettent de tester un bit et de raliser un saut conditionnel. Nous aurons loccasion den reparler dans la suite.

    STATUS IRP RP1 RP0 Z DC C

    II.6.1 Les indicateurs, la soustraction et la comparaison

    Les instructions SUBWF et SUBLW positionne les drapeaux Z et C. C correspond a la retenue de la soustraction que l'on dsignera par B (Borrow) F - W = 0 ==> Z=1 , C=1 , B=0 => pas de retenue de soustraction F - W > 0 ==> Z=0 , C=1 , B=0 => pas de retenue de soustraction F - W < 0 ==> Z=0 , C=0 , B=1 => il ya retenue de soustraction

    Pour raliser une comparaison entre F et W, on fait F W et on observe Z et C Z=1 ==> galit C=1 ==> F sup ou gal W C=0 ==> F infrieur W

    Figure II-1 : organigramme de la comparaison

    II.7 Les directives de l'assembleur MPASM

    Les directives de l'assembleur sont des instructions qu'on ajoute dans le programme et qui seront interprtes par l'assembleur MPASM. Ce ne sont pas des instructions destines au PIC. On ne prsente ici que quelques directives. Pour le reste, on peut consulter la documentation de MPASM "MPASM User's Guide". L'aide du logiciel MPLAB contient aussi une rubrique sur l'assembleur MPASM.

    Remarque : dans la suite, les directives seront reprsentes en Majuscule. Ce n'est pas une obligation, le compilateur MPASM accepte les instructions et les directives en minuscule et en majuscule. Attention ce nest pas le cas pour les tiquettes et les noms de dclaration des constantes.

    F - W

    Z=1? F = W

    C=1? F > W

    F < W

    oui

    non

    oui

    non

  • Microcontrleur PIC16F887 A.OUMNAD 25

    II.7.1 La directive LIST

    Cette directive permet de dfinir un certain nombre de paramtres comme le processeur utilis (p), la base par dfaut pour les nombres (r) ainsi que d'autres paramtres. Exemple : LIST p=16F887, r=dec

    Avec r=dec, les nombres sans prfix ni suffixe seront considrs par l'assembleur comme des nombre dcimaux, sinon voir tableau ci-contre

    II.7.2 La directive INCLUDE

    Cette directive permet d'insrer un fichier source. Par exemple le fichier p16f887.inc contient la dfinition d'un certain nombre de constante comme les noms des registres ainsi que les noms de certains bits;

    INCLUDE p16f887.inc ; insre le fichier p16f887.inc cet endroit avant de compiler

    Le nom du fichier peut tre place entre "" ou entre mais ce n'est pas obligatoire

    II.7.3 La directive EQU

    Cette directive permet de dfinir une constante ou une variable :

    XX EQU 0x20

    Chaque fois que le compilateur rencontrera XX, il la remplacera par 0x20. a peut tre une constante s'il s'agit d'une instruction avec adressage Literal, ou d'une adresse s'il s'agit d'une instruction avec adressage direct.

    MOVLW XX ; placer dans W la constante 0x20 MOVF XX,w ; placer dans W le contenu de la case dadresse 0x20

    II.7.4 Les directives CBLOCK/ENDC

    Ces directives permettent de dfinir un bloc C dont le rle est de simplifier la dclaration des constantes

    Exemple : L'ensemble des dclarations suivantes :

    XX1 EQU 0x20 XX2 EQU 0x21 XX3 EQU 0x22 XX4 EQU 0x23

    Peut tre remplac par

    CBLOCK 0x20 XX1, XX2, XX3, XX4 ENDC

    II.7.5 La directive ORG

    Cette directive permet de dfinir la position dans la mmoire programme partir de laquelle seront inscrites les instructions qui la suivent. On peut ainsi faire en sorte que le programme ou un bloc de programme soit situ un endroit particulier de la mmoire programme.

    Base Prfixe Exemple (36)

    Dcimal D'nnn' .nnn

    D'36' .36

    Hexadcimal H'nn' 0xnn nnh

    H'24' 0x24 24h

    Binaire B'.' B'00100100' Octal O'nnn' O'44'

  • Microcontrleur PIC16F887 A.OUMNAD 26

    Fig. II.1 : Illustration de la directive ORG

    II.7.6 La directive #DEFINE

    Fonctionne un peu comme la directive EQU tout en tant un peu plus gnrale. Elle permet daffecter toute une chane une abrviation

    #DEFINE XX 0x20 ; dans ce cas cest quivalent XX EQU 0x20 #DEFINE LED PORTB,3 ; chaque fois que le compilateur rencontrera le mot LED, il le

    remplacera par PORTB,3 BCF LED ; sera remplac par BCF PORTB,3 => teindre la LED branche sur la broche 3 de PORTB

    II.7.7 Les directives LOW et HIGH

    LOW : retourne l'octet de poids faible d'un nombre (bit 0 7)

    HIGH : retourne l'octet de poids fort d'un nombre (bit 8 15)

    Le nombre dcimal 37500 est un nombre 16 bits (10010010 01111100). Il n'est pas ais de dterminer les valeurs de l'octet de poids faible et de poids fort sans passer par le binaire. C'est l qu'apparait l'intrt des directives LOW et HIGH.

    Movlw LOW 37500 ; place dans W la valeur 124 = 01111100 Movlw HIGH 37500 ; place dans W la valeur 146 = 10010010

    On remarquera au passage que le poids dcimal de l'octet de poids faible est 1 et celui de l'octet de poids fort est 256. Ainsi, 37500 = 146 256 + 124

    II.7.8 La directive DE

    Sert dclarer des donns qui seront stocke dans l'EEPROM de donne au moment de l'implantation du programme sur le PIC. L'adresse de la premire position de la EEPROM de donnes est 0x2100

    ORG 0x2104 DE "PIC", .70, 'Z',.23, 58h, .260, 3f6h ORG 0 Programme

  • Microcontrleur PIC16F887 A.OUMNAD 27

    Lors du flashage du PIC, le programme sera flash partir de la premire position de la mmoire programme. Les donnes "PIC", .70, 'Z',.23, 58h, .260, 3F6h seront flash partir de la position 04 de la mmoire EEPROM de donnes. Chaque octet occupe une position. Pour les caractres, c'est le code ASCII qui est stock, cela va de soi. Si une donne dpasse 8 bits (255) elle est tronque.

    La figure ci-dessous montre comment les donnes seront places dans la mmoire EEPROM

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

    P I C .70 Z .23 58h 4 F6h

    II.7.9 La directive DT

    L'instruction RETLW k est une instruction qui permet de quitter un sous programme et retourner au programme appelant en ramenant la valeur k dans W. Cette instruction est souvent utilise pour raliser des transcodages de tableaux. Normalement cette opration ncessite l'criture d'un nombre ventuellement important de lignes RETLW k. Pour faciliter l'criture des programmes, la directive DT permet de gnrer une suite d'instruction RETLW.

    DT .10,35h,Hello ; le compilateur remplace cette ligne par lignes ci-dessous RETLW .10 RETLW 35h RETLW 'H' RETLW 'e' RETLW 'l' RETLW 'l' RETLW 'o'

    II.7.10 La directive END :

    Cette directive doit tre place tout la fin du programme, aprs le programme principal et les fonctions.

    II.7.11 La directive __CONFIG

    Cette directive (qui commence par 2 underscore) permet de dfinir les registres de configuration CONFIG1 et CONFIG2.

    Exemple :

    __CONFIG 0x2007 , 0x23E4 __CONFIG 0x2008 , 0x3EFF

    II.8 Les oprateurs arithmtique et logique de l'assembleur

    L'assembleur MPASM dispose d'un prprocesseur qui peut interprter un ensemble important d'oprateurs. Ces oprateurs peuvent agir sur des valeurs de constante ou de variable de l'assembleur et en aucun cas sur le contenu des registres du PIC.

    Si on crit l'instruction movlw 25 + 7. L'assembleur reconnait l'oprateur + et fait l'addition notre place. Lors de la compilation, l'instruction sera remplace par movlw 32. En aucun cas, on n'a le droit d'crire une instruction du genre: movlw FSR + 5 o FSR est un registre du PIC.

    oprateur dscription exemple

    + addition ALPHA EQU 12 BETA EQU 50 movlw -5 addlw ((ALPHA + 25)*3 BETA) / 2

    - Soustraction ou ngation * multiplication / division ~ complment movlw ~0x0F quivaut movlw 0xF0

    % modulo movlw BETA % 16

  • Microcontrleur PIC16F887 A.OUMNAD 28

    Dcalage gauche Movlw 3 2 (3 dcale gauche de 2 position =12)

    Dcalage droite Movlw BETA 3

    & ET bit par bit Movlw ((BETA & ALPHA) | 0x0F) ^ 25 | OU bit par bit

    ^ XOR bit par bit LOW Extrait l'octet bas Movlw LOW 2011

    HIGH Extrait l'octet haut movlw HIGH 2011

    UPPER Extrait le 3me octet partir de la droite

    Movlw UPPER 44332211h ; W=33h Movlw UPPER (44332211h 8) ; W=44h

    Tableau II-1: quelques oprateurs de l'assembleur (liste trs incomplte)

    II.9 Les macros

    Les macros de l'assembleur MPASM constituent un moyen de programmation trs avanc. On va se contenter d'une dfinition simple.

    Une macro fonctionne un peut comme la directive #DEFINE ou EQU, elle permet d'affecter une abrviation un bloc d'instruction. La syntaxe de dclaration est la suivante

    Nom_Macro macro Instruction 1 Instruction 2 Instruction 3 endm

    Exemple:

    BANK0 macro Bcf STATUS,RP0 Bcf STATUS,RP0 endm

    Chaque fois que l'on dsire se place dans le bank0, il suffira d'crire BANK0, le compilateur la remplacera par les deux instructions correspondantes.

    Attention, une macro n'est pas une fonction. Chaque fois que le compilateur rencontre une macro, il la remplace par les instructions correspondantes. Si on dclare une macro de 100 instructions, chaque fois qu'on l'invoque, le compilateur crit 100 lignes de programme. Si on l'invoque 100 fois dans un programme, la taille de celui-ci dpassera les 10000 lignes et ne pourra pas tre implant dans le 16f887. Avec une fonction, c'est diffrent. Chaque fois qu'on l'invoque l'aide de l'instruction call, le processeur va excuter la fonction son emplacement et revient continuer son travail. De ce fait, la fonction est crite une seule fois dans le programme.

    Une macro peut avoir des paramtres, exemple:

    TEMPO1 macro Fosc,Tus movlw ((Tus*Fosc)-.14)/.12 call tempo1 endm

    Cette macro peut tre invoque en lui passant des paramtres, exemple :

    TEMPO1 8, 50

    Le langage des macros de l'assembleur MPASM est trs volu. Nous n'en parlerons pas ici car il ne fait pas partie des objectifs de cet ouvrage.

  • Microcontrleur PIC16F887 A.OUMNAD 29

    Chapitre III

    LES OUTILS DE DEVELOPPEMENT

    Loutil de dveloppement principal est lenvironnement de dveloppement intgr MPLAB IDE fournit gratuitement par Microchip. Cet outil intgre l'diteur, l'assembleur Microchip MPASM, le simulateur MPLAB SIM, le programme de flashage condition d'utiliser un flasheur Microchip qui lui, n'est pas gratuit.

    III.1 Procdure de travail

    Les tapes ncessaires permettant de voir un programme s'excuter sur un PIC sont :

    Ecrire un programme en langage assembleur dans un fichier texte et le sauvegarder avec l'extension .asm (les adeptes du C peuvent travailler en C, mais a, cest une autre histoire)

    Assembler (compiler) ce programme avec l'assembleur MPASM. Le rsultat est un fichier excutable avec l'extension .hex contenant une suite de codes machines comprhensible par le PIC.

    Implanter le fichier .hex dans la mmoire programme du PIC (mmoire flash) l'aide d'un programmateur adquat. On peut utiliser les programmateurs de Microchip ou tout autre programmateur achet ou ralis par soit mme.

    Mettre le PIC dans son montage final, mettre sous tension et admirer le travail.

    III.1.1 Programmeur simple

    Le programmeur le plus simple que l'on puisse raliser est celui reprsent sur la figure ci-dessous. Nous l'avons essay avec succs sur un ordinateur de bureau avec le logiciel ICPROG. Le port srie des ordinateurs portables ne dlivre pas le 12V ncessaire l'entre MCLR pour placer le PIC en mode programmation. Par ailleurs, les ordinateurs portables rcents ne sont pas quips de port srie.

    Des programmeurs qui se branchent sur le port USB sont dsormais disponibles des prix abordables.

    Figure III-1 : programmeur deux rsistances

    TxD(3)

    DTR(4)

    RTS(7)

    GND(5)

    CTS(8)

    22k

    2.2k

    MCLR

    RB6

    RB7

    Vss

    5V

    PIC

    Vdd

    Port srie

  • Microcontrleur PIC16F887 A.OUMNAD 30

    III.1.2 PIC en mode excution

    Aprs sa programmation, le PIC doit tre plac en mode excution (mode RUN) pour qu'il commence excuter le programme. Pour cela, il faut placer la broche MCLR au niveau haut. Il est prfrable de le faire travers une rsistance 1k ou plus. Si le PIC est configur pour fonctionner avec l'horloge quartz ou l'horloge RC, il ne faut pas oublier de brancher le quartz ou le rseau RC

    Figure III-2 : PIC en mode RUN, oscillateur interne, oscillateur quartz, oscillateur RC

    III.2 Lenvironnement de dveloppement MPLAB

    MPLAB-IDE peut tre tlcharg site web www.microchip.com Aprs l'installation, lancer MPLAB, faire la config ci-dessous :

    Slectionner le PIC sur lequel on travaille

    Configure Select Device PIC16F887

    Pour faire apparatre la barre doutils du simulateur :

    Debugger Select tool MPLAB SIM

    Pour retrouver l'ancien espace de travail aprs un redmarrage: Configure settings Workspace automatically save workspace upon closing et reload last workspace at startup

    On va raliser un tout petit programme sans grand intrt pour voir la procdure de fonctionnement,

    Ouvrir une nouvelle fentre (de l'diteur) pour commencer crire un programme :

    file new ou cliquer sur l'icne feuille blanche

    Saisir le petit programme ci-dessous. Ce programme incrmente sans fin la position mmoire (RAM) 70H

    loop incf 70h,1 goto looop END

    Sauvegarder (file save ) ce programme dans le dossier de votre chois sous le nom bidon.asm

    Lancer la compilation du programme l'aide de la commande project Quikbuild Apparemment il y a un problme, le compilateur nous dit qu'il y une erreur la ligne 2 Error[113] C:\...\BIDON.ASM 2 : Symbol not previously defined (looop)

    MCLR

    Vss

    5V

    Vdd 1k

    MCLR

    Vss

    5V

    PIC

    Vdd 1k OSC1

    OSC2

    MCLR

    Vss

    5V

    Vdd

    1k

    OSC1

  • Microcontrleur PIC16F887 A.OUMNAD 31

    Effectivement, il ya une erreur de frappe. Ltiquette sappelle loop et non looop. Double cliquez sur la ligne Error[113]... ce qui vous envoie directement { la ligne contenant lerreur. Corrigez et recommencez. Cette fois a a l'air d'aller. On peut vrifier que le compilateur a cr le fichier bidon.hex dans le mme dossier o se trouve bidon.asm. D'autres fichiers sont crs. Seul le fichier .hex nous intresse pour le moment. Les autres peuvent tre dtruits s'il le faut.

    On peut maintenant excuter le programme en simulation pour voir s'il ralise bien la tache demande. On remarque qu'aprs la compilation, une flche verte pointe sur la premire ligne du programme. Cette flche correspond la position du program Counter. Elle pointe sur la prochaine instruction qui sera excute. Si la flche n'est pas visible, c'est que le simulateur MPLAB SIM n'a pas t sectionn. Il faut le slectionner comme indiqu plus haut et recompiler le programme. Ouvrir la fentre qui visualise la mmoire RAM : view FileRegisters et reprer la case mmoire 70h

    Excuter le programme PAS PAS en cliquant chaque fois sur le bouton Step Into {} en observant la case mmoire 70h . (on dirait que a marche).

    On peut aussi excuter en continu en cliquant sur le bouton animate , pour arrter, il faut cliquer sur le bouton halt

    Dans le programme, remplacer 70h par 190h, compilez, simulez et tirer les conclusions. On dirait qu'il y a comme un petit problme de bank.

    Figure III-3 : capture d'cran MPLAB

  • Microcontrleur PIC16F887 A.OUMNAD 32

    III.3 Programme type : adressage direct

    On va crire un petit programme simple pour illustrer comment on dfinit les registres de configuration CONFIG1 et CONFIG2 essentiellement pour configurer l'horloge. On va aussi aborder le problme de changement de bank quand on accde la RAM par l'adressage direct.

    L'objectif du programme et de placer quatre octets dans la RAM : .35 dans la position 20h, 'A' dans la position A0h -5 dans la position 110h, 35h dans la position 190h

    Pour les switchs de configuration, on utilisera la configuration gnrique du paragraphe I.4.1. Les choix les plus importants sont WDT:OFF, LVP:OFF, horloge interne

    __CONFIG 0x2007 , 0x23E4 __CONFIG 0x2008 , 0x3EFF

    Pour la frquence, on choisira Fosc = 8 Mhz, l'aide du registre OSCCON (bank1) (I.3.4.1, page 11) : OSCCON = 0 111 000 1 = 0x71

    Movlw 0x71 movwf OSCCON

    Le PIC ne connait pas les noms des registres SFR comme STATUS dont nous allons avoir besoin pour changer de bank. Normalement, il faut y accder par leurs adresses. Ceci rend la programmation un peu rbarbative. Pour y remdier il suffit d'inclure dans notre programme le fichier p16f887.inc qui contient la dclaration EQU des tous les registres SFR et de tous les bits genre RP0, RP1 Attention, Tous les registres et les bits ont t dclars en MAJUSCULE

    INCLUDE p16f887.inc

    Bien que ce ne soit pas obligatoire, on va rajouter la directive LIST pour dfinir le processeur et dfinir le dcimal comme base par dfaut,

    LIST p=16f887, r=dec

    Le caractre (;) sert introduire un commentaire qui n'est pas interprt par le compilateur,

    Malgr le fait qu'on ait dfinit le dcimal comme base par dfaut. Il est conseiller de prendre l'habitude de prcder les nombres dcimaux par le prfix (.)

    A la fin, on peut mettre une instruction sleep pour placer le PIC en mode faible consommation.

    Il ne faut pas oublier de terminer le programme par la directive END

    On obtient le programme ci-dessous

    Programme ram_direct.asm

    ;========================================================== ; Accs la RAM par l'adressage direct ;========================================================== INCLUDE p16f887.inc LIST p=16f887, r=dec __CONFIG 0x2007 , 0x23E4 __CONFIG 0x2008 , 0x3EFF ; ==== fin dclarations dbut programme ========== bsf STATUS,RP0 bcf STATUS,RP1 ; 01 : bank1 movlw 0x71 movwf OSCCON ; Oscillateur interne, Fosc=8MHz bcf STATUS,RP0 ; 00 : Bank0 bcf STATUS,RP1 movlw .35 movwf 20h

  • Microcontrleur PIC16F887 A.OUMNAD 33

    bsf STATUS,RP0 ; 01 : Bank 1 movlw 'A' movwf 0xA0 bcf STATUS,RP0 ; 10 : bank 2 bsf STATUS,RP1 movlw -.5 ;ou -D'5' movwf 110h bsf STATUS,RP0 ; 11 : Bank3 movlw 35h movwf 190h sleep END

    o Dmarrer MPLAB, commencer un nouveau fichier

    o Sauvegarder le sous le nom ram_direct.asm, Il est important de donner un nom au programme avant mme de le saisir car, en voyant l'extension (.asm), l'diteur de MPLAB sait que c'est un programme assembleur. Il reconnait les mots clef et les affiche avec des couleurs diffrentes ce qui permet une saisie plus agrable.

    o Saisir le programme

    o Le compiler : Project Quickbuild

    Nous disposons maintenant du programme excutable ram_direc.hex que nous pouvons implanter dans un PIC. Nous n'allons pas le faire car on ne pourra rien voir vu que ce programme ne fait aucune action externe. Par contre nous pouvons faire quelques investigations en simulation sous MPLAB.

    On peut visualiser la mmoire programme : View Program Memory

    Figure III-4:

    Sur la fentre qui s'affiche on peut tirer quelques enseignements :

    La colonne Opcode contient les codes machines 14 bits qui seront rellement implants dans la mmoire programme du PIC.

    La colonne Disassembly est l pour vrification.

  • Microcontrleur PIC16F887 A.OUMNAD 34

    o On peut y voir que les directives ne font pas partie du programme excutable. C'est normal, les directives ne sont pas destines au PIC, elles sont interprtes par le compilateur,

    o L'instruction bcf STATUS,RP0 a t remplace par bcf 0x3, 0x5, c'est normal, l'unit de traitement du PIC ne reconnait pas les mots clef STATUS, RP0, RP1le compilateur les a remplacs par leur valeur qu'il a trouv dans le fichier p16f887.inc. On peut vrifier sur la Figure I-9 (page17) que 0x3 est l'adresse du registre STATUS et sur le Tableau I-1 (page19) que RP0 et le bit 5 de STATUS

    o Sur la ligne 10, on remarque que le compilateur a remplac le (-5) par (0xFB) qui est le complment 2 de 5. Ceci nous vite de le faire nous mme.

    o Les lignes 11 et 14 contiennent la mme instruction MOVWF 0x10. Alors que dans notre programme, la premire est : movwf 110h, et la deuxime est movwf 190h. C'est normal, avec l'adressage direct, le compilateur ne prend que 7 bits de l'adresse qu'on lui donne. Or 110h = 1 0001 0000 et 190h =1 1001 0000, si on prend 7 bits partir de la droite, on obtient 001 0000 = 10h dans les deux cas

    o Aprs la fin du programme toutes les positions de la mmoire programme contiennent le code machine 3FFFh = 11 1111 1111 1111. (Les positions de la mmoire programme qui n'on pas t flashs ont tous leurs bits gaux 1). Ce code machine correspond une instruction qui existe, addlw 0xFF. Quand le PIC a termin l'excution du programme que nous lui avons donn, il continue en excutant ces instruction. Ceci n'a aucune consquence grave. On peut l'viter en terminant le programme par l'instruction sleep qui arrte l'excution et place le PIC en mode faible consommation..

    On peut maintenant simuler le programme pour voir s'il ralise les taches prvues.

    o Ouvrir la fentre qui visualise la mmoire RAM : view FileRegisters et reprer les cases mmoire 20h, A0h, 110h, 90h

    o Excuter le programme PAS PAS en cliquant chaque fois sur le bouton Step Into {}

    III.3.1 Des macros pour slectionner les banks

    Vous avez sans doute remarqu que l'utilisation des bits RP0 et RP1 pour changer de bank n'est pas trs commode. Nous allons introduire dans le programme quatre macros que nous appellerons BANK0, BANK1, BANK2 et BANK3. Ces macros nous permettrons de slectionner un bank D'une faon plus souple.

    Exercice 5) macros

    Ecrire les 4 macros. Les placer dans un fichier appel mesmacros.inc et donner la version du programme prcdent en utilisant ces macros

    Exercice 6) adressage indirect

    Programme qui copie l'alphabet majuscule dans la RAM partir de la position 190h La position 70h est utilise comme compteur.

    Ce programme illustre l'utilisation de l'adressage indirect et la ralisation d'une boucle avec un compteur et l'instruction decfsz.

    Exercice 7) Soustraction

    Donner les instructions qui permettent de :

  • Microcontrleur PIC16F887 A.OUMNAD 35

    Changer le signe de l'accumulateur W (W = -W)

    Changer le signe du contenu d'un registre F (F = -F)

    Soustraire la constante 33 de l'accumulateur W (W-33)

    Soustraire le contenu de la case mmoire 70h de l'accumulateur W avec rsultat dans W. ( W [70h] W )

    Exercice 8) (comp1.asm)

    Comparer les contenus des cases mmoire 6Fh et EFh, sil son gaux mettre { zro tous les bits de la case 16Fh sinon mettre 1 tous les bits de la case 1EFh

    Exercice 9) (comp2.asm)

    Comparer les contenus des cases mmoire 6Fh et EFh, si [6Fh] = [EFh] copier la lettre E dans la case mmoire 16Fh si [6Fh] > [EFh] copier la lettre S dans la case mmoire 16Fh si [6Fh] < [EFh] copier la lettre I dans la case mmoire 16Fh

    III.4 Boucles de temporisation

    On a souvent besoin d'introduire des temporisations pendant l'excution d'un programme. Le PIC dispose de 3 timers permettant de grer le temps avec prcision. On tudiera ces modules plus tard, pour l'instant, on va raliser des temporisations l'aide de simples boucles. L'ide est d'initialiser une variable une valeur donne et ensuite la dcrmenter en boucle jusqu' ce qu'elle atteigne 0. Connaissant le temps d'excution de chaque instruction, on peut calculer le temps que mettra le processeur pour terminer la boucle de dcrmentation

    III.4.1 Temporisation avec une boucle

    Examinons l'exemple ci-dessous. On met une valeur N1 dans la case mmoire 70h et on la dcrmente jusqu' 0

    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

    T = 2 + (N1-1)3 + 2 = 3N1 + 1 cycles . La valeur max de T est obtenue pour N1 = 0 (= 256). L'instruction decfsz dcrmente d'abords et teste ensuite. Dcrmenter 0 donne 255. Donc N1=0 quivaut N1=256, ce qui donne une temporisation max de Tmax= 769 cycles. Avec Fosc = 4 Mhz, 1 cycle = 4/Fosc = 1 s, ce qui donne une temporisation max de 769 s

    Pour faciliter l'utilisation de cette temporisation on va l'utiliser comme une fonction que l'on appellera tempo1. On note AN1 la case mmoire qui sert de compteur, il faut la dclarer au dbut avec la directive EQU. W sert de paramtre d'entre.

    tempo1: movwf AN1 t1: decfsz AN1,f goto t1

  • Microcontrleur PIC16F887 A.OUMNAD 36

    return

    Cette fonction doit tre place aprs le programme principal. Chaque fois qu'on veut introduire une temporisation, on place une valeur dans W et appelle la fonction. W sert de paramtre la fonction.

    movlw valeur Call tempo1

    Pour le calcul il faut rajouter 2 cycles pour l'instruction call et 2 cycles pour l'instruction return.

    T1 = 3W + 5 cycle . 1 cycle = 4/Fosc Le maximum est obtenu pour W =256, soit T1max = 773 cycles.

    III.4.2 Temporisation avec 2 boucles imbriques

    Avec deux boucles imbriques, on a deux paramtre N1 pour la boucle intrieure te N2 pour la boucle extrieure. Pour faciliter l'utilisation, nous allons fixer le paramtre N1 0 ce qui nous le savons, correspond N1=256. Cest N2 qui constituera le paramtre de la fonction, Il faut le placer dans W avant de lappeler.

    tempo2: movwf AN2 t2: decfsz AN1,f goto t2 decfsz AN2,f goto t2 return

    T2 = 2 + 2 + [W(t1+3)-1] + 2, avec t1 = 2563 1 = 767 on obtient :

    T2 = 770 W +5 cycles . 1 cycle = 4/Fosc

    Le maximum est obtenu pour N2 =256, soit T2max = 197125 cycles

    III.4.1 Temporisation avec 3 boucles imbriques

    Les boucles intrieures (N1 et N2) se font toujours 256 fois. La boucle extrieure se fait N3 fois. Cest N3 qui constituera le paramtre de la fonction, Il faut le placer dans W avant de lappeler.

    tempo3: movwf AN3 t3: decfsz AN1,f goto t3 decfsz AN2,f goto t3 decfsz AN3,f goto t3 return

    T3 = 2 + 2 + W(t2+3)-1 + 2 avec t2=256*(767+3)-1 on obtient :

    T3 = 197122 W +5 cycles . 1 cycle = 4/Fosc Le maximum est obtenu pour N3 =256, soit T3max = 50463237 cycles

  • Microcontrleur PIC16F887 A.OUMNAD 37

    Remarques : 1) La prcision de ces fonctions peut tre amliore en y insrant des instructions nop, dans ce cas il

    faut revoir les formules.

    2) Si les Variables AN1, AN2 et AN3 sont place dans la zone commune, aucune prcaution particulire ne s'impose. Par contre, si on choisi de les placer ailleurs pour rserver la zone commune au programme principal, il faudra faire attention que le bank soit bien configur durant l'appel de ces fonctions. Si on choisit par exemple de les placer en bank0 aux positions 20h, 21h et 22h. Deux approches peuvent tre envisages:

    a. Une approche simple qui consiste se rappeler que les fonctions de temporisation utilisent le bank0. A chaque fois qu'on veut appeler une de ces fonctions, il faut se place dans ce bank avant de le faire.

    b. Une approche plus robuste consiste ajouter au dbut de chaque fonction, deux instructions bcf STATUS,RP0 et bcf STATUS,RP1 pour se placer dans le banko. Il faut aussi sauvegarder le registre STATUS au dbut de la fonction et le restituer la fin de sorte que, au retour de la fonction, on se retrouve dans le bank initial. Les instructions rajoutes doivent tre comptabilise dans les formules des temporisations.

  • Microcontrleur PIC16F887 A.OUMNAD 38

    Chapitre IV

    LES PORTS dENTRE SORTIES

    Le PIC 16F887 dispose de 36 broches dentre sortie regroups dans 5 ports PORTA, PORTB, PORTC, PORTD et PORTE. Chaque broche dun port peut tre configure soit en entre soit en sortie { laide des registres de direction TRISA, TRISB, TRISC et TRISD et TRISE:

    Bit k de TRISx = 0 broche k de PORTx = SORTIE

    Bit k de TRISx = 1 broche k de PORTx = ENTRE

    Certains ports ont quelques particularits que nous allons dtailler ci-dessous,

    IV.1 Le port d' E/S PORTA

    Le port A dsign par PORTA est un port bidirectionnel de 8 bits RA0 RA7. La direction de chaque bit est contrle par le bit correspondant du registre TRISA

    RA6 et RA7 peuvent tre configures en E/S numrique ou peuvent tre affectes au gnrateur dhorloge

    RA4 est une E/S numrique. En sortie, RA4 a une structure drain ouvert. Pour l'utiliser comme sortie, il faut ajouter une rsistance de pull-up externe. Le schma illustre (pour les non lectroniciens) le principe d'une sortie drain ouvert (ou collecteur ouvert) : si RA4 est positionne 0, l'interrupteur est ferm, la sortie est relie la masse, c'est un niveau bas. Si RA4 est place 1, l'interrupteur est ouvert, la sortie serait dconnecte s'il n'y avait pas la

    rsistance externe qui la place au niveau haut.

    RA0, RA1, RA2, RA3 et RA5 peuvent tre utilises soit comme E/S numriques soit comme entres analogiques. Quand elles sont configures