535
LA PROGRAMMATION DES PICS PAR BIGONOFF SECONDE PARTIE – Révision 13 LA GAMME MID-RANGE PAR L’ETUDE DES 16F87X (16F876-16F877)

Cours Bigonoff 16F877

  • Upload
    forio23

  • View
    440

  • Download
    58

Embed Size (px)

Citation preview

  • LA PROGRAMMATION DES PICS

    PAR BIGONOFF

    SECONDE PARTIE Rvision 13

    LA GAMME MID-RANGE PAR LETUDE DES 16F87X(16F876-16F877)

  • 2

  • 31. INTRODUCTION............................................................................................................................................. 9

    2. LES CARACTRISTIQUES DES 16F87X.................................................................................................. 11

    2.1 CARACTRISTIQUES GNRALES DE LA FAMILLE 16F87X............................................................................ 112.2 ORGANISATION DE LA RAM ........................................................................................................................ 122.3 STRUCTURE DU 16F876 ............................................................................................................................... 12

    3. LES PARTICULARITS DE LA PROGRAMMATION DU 16F87X...................................................... 15

    3.1 LA DIRECTIVE _CONFIG ....................................................................................................................... 153.2 UTILISATION DE LA MMOIRE RAM ............................................................................................................ 16

    3.2.1 Ladressage direct................................................................................................................................ 163.2.2 Ladressage indirect............................................................................................................................. 18

    3.3 LUTILISATION DU REGISTRE PCLATH ....................................................................................................... 183.3.1 PCLATH et les calculs dadresse......................................................................................................... 193.3.2 PCLATH et les sauts directs................................................................................................................. 19

    4. SAUTS DE PAGES ET PREMIER PROJET SUR MPLAB...................................................................... 23

    4.1 STRUCTURE ET UTILISATION DU FICHIER MAQUETTE ............................................................................. 244.2 CRATION DUN PROGRAMME SANS SAUT DE PAGE...................................................................................... 284.3 PREMIRES TENTATIVES DE SAUT INTER-PAGES........................................................................................... 284.4 EVITONS LE PIGE ........................................................................................................................................ 314.5 PREMIRE CORRECTION DE NOTRE EXERCICE............................................................................................... 324.6 EVITONS LES WARNINGS INUTILES ............................................................................................................... 334.7 DMONSTRATION PRATIQUE DE LUTILIT DES MACROS.............................................................................. 344.8 LES SOUS-PROGRAMMES INTER-PAGES ........................................................................................................ 38

    5. LES SOURCES DINTERRUPTIONS......................................................................................................... 43

    5.1 ENUMRATION............................................................................................................................................. 435.2 LE REGISTRE INTCON ET LES INTERRUPTIONS PRIPHRIQUES .................................................................. 44

    5.2.1 Mise en service des interruptions primaires ........................................................................................ 445.2.2 Mise en service des interruptions priphriques.................................................................................. 45

    5.3 LES REGISTRES PIE1, PIE2, PIR1 ET PIR2 .................................................................................................. 455.3 ETUDE DE LA ROUTINE DINTERRUPTION DU FICHIER MAQUETTE ........................................................... 475.4 CAS PARTICULIER DES 873 ET 874 ............................................................................................................... 54

    6. MISE EN UVRE ET CONFIGURATION MINIMALE ......................................................................... 57

    6.1 LE MATRIEL NCESSAIRE ........................................................................................................................... 576.2 LE SCHMA MINIMUM .................................................................................................................................. 586.3 LES PARTICULARITS LECTRIQUES............................................................................................................. 59

    7. MIGRATION DU 16F84 VERS LE 16F876................................................................................................. 63

    7.1 SIMILITUDES ET DIFFRENCES AVEC LE 16F84............................................................................................. 637.2 CONVERSION DUN PROGRAMME CRIT POUR LE 16F84 VERS LE 16F876.................................................... 637.3 CAUSES DE NON FONCTIONNEMENT ............................................................................................................. 647.3 CONVERSION DUN EXEMPLE PRATIQUE....................................................................................................... 65

    7.3.1 Ralisation du montage........................................................................................................................ 657.3.2 Cration du projet ................................................................................................................................ 667.3.3 La mthode conseille .......................................................................................................................... 67

    8. OPTIMISONS UN PEU ................................................................................................................................. 79

    8.1 LES DEUX GRANDS TYPES DOPTIMISATION ................................................................................................. 798.2 TRAVAIL SUR UN EXEMPLE CONCRET........................................................................................................... 798.3 LE CHOIX DU TYPE DOPTIMISATION ............................................................................................................ 828.4 APPLICATION PRATIQUE............................................................................................................................... 828.4 OPTIMISATIONS PARTICULIRES .................................................................................................................. 92

    8.4.1 Optimisation des niveaux de sous-programmes ................................................................................... 938.4.2 Lorganisation des ressources ........................................................................................................... 100

  • 49. LES DIFFRENTS TYPES DE RESET .................................................................................................... 105

    9.1 LES 6 TYPES DE RESET ............................................................................................................................... 1059.2 LE RESET ET LES REGISTRES STATUS ET PCON....................................................................................... 1059.3 DTERMINATION DE LVNEMENT ........................................................................................................... 106

    10. LES PORTS ENTRE/SORTIE ............................................................................................................... 111

    10.1 LE PORTA .............................................................................................................................................. 11110.2 LE PORTB............................................................................................................................................... 11210.3 LE PORTC............................................................................................................................................... 11210.4 LE PORTD .............................................................................................................................................. 11210.5 LE PORTE............................................................................................................................................... 113

    10.5.1 Le registre TRISE............................................................................................................................. 113

    11. LE PORTD EN MODE PSP ...................................................................................................................... 117

    11.1 A QUOI SERT LE MODE PSP ? ................................................................................................................... 11711.1 COMMENT PASSER EN MODE PSP ? ....................................................................................................... 11711.2 CONNEXION DES PORTD ET PORTE EN MODE PSP ............................................................................... 11811.3 LE FONCTIONNEMENT LOGICIEL............................................................................................................... 11811.4 LE FONCTIONNEMENT MATRIEL ............................................................................................................. 120

    12. LES ACCS LA MMOIRE EEPROM .............................................................................................. 123

    12.1 LE REGISTRE EECON1 ............................................................................................................................ 12312.2 LACCS EN LECTURE .............................................................................................................................. 12412.3 LACCS EN CRITURE ............................................................................................................................. 12512.4 INITIALISATION DUNE ZONE EEPROM ...................................................................................................... 126

    13. LES ACCS LA MMOIRE PROGRAMME..................................................................................... 127

    13.1 GNRALITS .......................................................................................................................................... 12713.2 LES ACCS EN LECTURE ........................................................................................................................... 12713.3 LES ACCS EN CRITURE .......................................................................................................................... 12913.4 PARTICULARITS ET MISE EN GARDE........................................................................................................ 13013.5 INITIALISATION DUNE ZONE EN MMOIRE PROGRAMME.......................................................................... 13113.6 LA TECHNIQUE DU BOOTLOADER . ...................................................................................................... 13113.6 APPLICATION PRATIQUE : UN CHENILLARD.............................................................................................. 131

    14. LE TIMER 0................................................................................................................................................ 149

    14.1 GNRALITS .......................................................................................................................................... 14914.2 LCRITURE DANS TMR0 ........................................................................................................................ 14914.3 LE TIMING EN MODE COMPTEUR ............................................................................................................... 15014.4 MODIFICATION AU VOL DE LASSIGNATION DU PRDIVISEUR ............................................................ 152

    14.4.1 Prdiviseur du timer 0 vers le watchdog.......................................................................................... 15214.4.2 Prdiviseur du watchdog vers le timer 0.......................................................................................... 153

    15. LE TIMER 1................................................................................................................................................ 155

    15.1 CARACTRISTIQUES DU TIMER 1 .............................................................................................................. 15515.2 LE TIMER 1 ET LES INTERRUPTIONS.......................................................................................................... 15615.3 LES DIFFRENTS MODES DE FONCTIONNEMENT DU TIMER1...................................................................... 15615.4 LE REGISTRE T1CON............................................................................................................................... 15715.5 LE TIMER 1 EN MODE TIMER ............................................................................................................... 15915.6 LE TIMER 1 EN MODE COMPTEUR SYNCHRONE ......................................................................................... 15915.7 LE TIMER 1 EN MODE COMPTEUR ASYNCHRONE....................................................................................... 16115.8 LE TIMER 1 ET TOSCEN.......................................................................................................................... 16215.9 UTILISATION DU DBORDEMENT.............................................................................................................. 16415.10 UTILISATION DUNE LECTURE ................................................................................................................ 16615.11 ECRITURE DU TIMER 1............................................................................................................................ 17015.12 EXERCICE PRATIQUE .............................................................................................................................. 172

    15.12.1 Un peu de maths............................................................................................................................. 17315.12.2 Le programme ................................................................................................................................ 176

    15.13 ERRATA : FONCTIONNEMENT NON CONFORME ...................................................................................... 181

  • 516. LE DEBUGGAGE PIN-STIMULUS .................................................................................................. 185

    17. LE TIMER 2................................................................................................................................................ 189

    17.1 CARACTRISTIQUES DU TIMER 2 .............................................................................................................. 18917.2 LE TIMER 2 ET LES INTERRUPTIONS.......................................................................................................... 19017.2 LE TIMER 2 ET LES REGISTRES PR2 ET T2CON........................................................................................ 19017.3 UTILISATION PRATIQUE DE NOTRE TIMER 2.............................................................................................. 193

    18. RCAPITULATIF SUR LES TIMERS .................................................................................................. 199

    18.1 LE CHOIX DU TIMER ................................................................................................................................. 19918.1.1 Vous dsirez mesurer un temps compris entre 256 et 65536 cycles................................................. 19918.1.2 Vous dsirez mesurer des temps allant jusque 524288 .................................................................... 19918.1.3 Vous dsirez mesurer des temps quelconques avec une grande prcision ....................................... 19918.1.4 Vous dsirez compter des vnements.............................................................................................. 200

    18.2 LES BASES DE TEMPS MULTIPLES ............................................................................................................. 20018.3 POSSIBILITS NON ENCORE ABORDES..................................................................................................... 201

    19. LE CONVERTISSEUR ANALOGIQUE/NUMRIQUE ....................................................................... 203

    19.1 PRAMBULE............................................................................................................................................. 20319.2 NOMBRES NUMRIQUES, ANALOGIQUES ET CONVERSIONS....................................................................... 20319.3 PRINCIPES DE CONVERSION SUR LES 16F87X ........................................................................................... 20819.4 LE TEMPS DACQUISITION ........................................................................................................................ 20919.5 LA CONVERSION....................................................................................................................................... 21219.6 COMPROMIS VITESSE/PRCISION.............................................................................................................. 21519.7 LES VALEURS REPRSENTES................................................................................................................... 21719.8 CONCLUSIONS POUR LA PARTIE THORIQUE............................................................................................. 21819.9 LA THORIE APPLIQUE AUX PICS : PINS ET CANAUX UTILISS ............................................................... 21919.10 LES TENSIONS DE RFRENCE ................................................................................................................ 22019.11 MESURE DUNE TENSION ALTERNATIVE................................................................................................. 22419.12 LES REGISTRES ADRESL ET ADRESH................................................................................................. 22719.13 LE REGISTRE ADCON1 ......................................................................................................................... 22719.14 LE REGISTRE ADCON0 ......................................................................................................................... 23019.15 LA CONVERSION ANALOGIQUE/NUMRIQUE ET LES INTERRUPTIONS...................................................... 23219.16 LUTILISATION PRATIQUE DU CONVERTISSEUR ...................................................................................... 23219.17 EXERCICE PRATIQUE SUR LE CONVERTISSEUR A/D ................................................................................ 23419.18 CONCLUSION.......................................................................................................................................... 248

    20. LES MODULES CCP1 ET CCP2 ............................................................................................................. 251

    20.1 GNRALITS .......................................................................................................................................... 25120.2 RESSOURCES UTILISES ET INTERACTIONS............................................................................................... 25120.3 LES REGISTRES CCP1CON ET CCP2CON .............................................................................................. 25220.4 LE MODE CAPTURE ............................................................................................................................. 253

    20.4.1 Principe de fonctionnement.............................................................................................................. 25320.4.2 Champs dapplication ...................................................................................................................... 25520.4.3 Remarques et limites dutilisation.................................................................................................... 25520.4.4 Mode sleep et astuce dutilisation .............................................................................................. 257

    20.5 LE MODE COMPARE ............................................................................................................................ 25720.5.1 Principe de fonctionnement.............................................................................................................. 25820.5.2 Champs dapplication ...................................................................................................................... 26220.5.3 Remarques et limites dutilisation.................................................................................................... 26320.5.4 Le mode sleep ............................................................................................................................. 26320.5.5 Fonctionnement non conforme......................................................................................................... 264

    20.6 LE MODE PWM .................................................................................................................................. 26520.6.1 La thorie du PWM .................................................................................................................... 26520.6.2 La thorie applique aux PICs......................................................................................................... 26720.6.3 Les registres utiliss ......................................................................................................................... 27320.6.4 Champs dapplication ...................................................................................................................... 27520.6.5 Remarques et limites dutilisation.................................................................................................... 27520.6.6 Le mode sleep ............................................................................................................................. 275

    20.7 EXERCICE PRATIQUE : COMMANDE DUN SERVOMOTEUR PAR LE PWM................................................... 276

  • 620.8 EXERCICE 2 : UNE MTHODE PLUS ADAPTE ............................................................................................ 29120.9 CONCLUSION............................................................................................................................................ 306

    21. LE MODULE MSSP EN MODE SPI........................................................................................................ 309

    21.1 INTRODUCTION SUR LE MODULE MSSP ................................................................................................... 30921.2 LES LIAISONS SRIE DE TYPE SYNCHRONE................................................................................................ 30921.3 LE MODE SPI ........................................................................................................................................... 31121.4 LES REGISTRES UTILISS .......................................................................................................................... 31221.5 LE MODE SPI MASTER............................................................................................................................. 316

    21.5.1 Mise en uvre .................................................................................................................................. 31621.5.2 Le registre SSPSTAT ........................................................................................................................ 31921.5.3 Le registre SSPCON......................................................................................................................... 32021.5.4 Choix et chronogrammes ................................................................................................................. 32121.5.5 Vitesses de transmission................................................................................................................... 32521.5.6 Initialisation du mode SPI Master.................................................................................................... 32621.5.7 Le mode sleep................................................................................................................................... 327

    21.6 LE MODE SPI SLAVE.............................................................................................................................. 32721.6.1 Mise en uvre .................................................................................................................................. 32721.6.2 Le registre SSPSTAT ........................................................................................................................ 32821.6.3 Le registre SSPCON......................................................................................................................... 32921.6.4 Les autres registres concerns ......................................................................................................... 33021.6.5 Choix et chronogrammes ................................................................................................................. 33121.6.6 Vitesses de transmission................................................................................................................... 33221.6.7 Initialisation du mode SPI SLAVE ................................................................................................... 33221.6.8 Le mode sleep................................................................................................................................... 33321.6.9 Scurit de la transmission .............................................................................................................. 333

    21.7 EXERCICE PRATIQUE : COMMUNICATION SYNCHRONE ENTRE 2 PICS........................................................ 33421.8 EXERCICE 2 : ALTERNATIVE DE FONCTIONNEMENT.................................................................................. 34821.9 CONCLUSIONS.......................................................................................................................................... 354

    22. LE BUS I2C.................................................................................................................................................. 357

    22.1 INTRODUCTION ........................................................................................................................................ 35722.1 CARACTRISTIQUES FONDAMENTALES .................................................................................................... 35722.2 LES DIFFRENTS TYPES DE SIGNAUX ........................................................................................................ 361

    22.2.1 Le bit ordinaire .......................................................................................................................... 36122.2.2 Le start-condition ............................................................................................................................. 36222.2.3 Le stop-condition.............................................................................................................................. 36222.2.4 Lacknowledge ................................................................................................................................. 36322.2.5 Le bit read/write............................................................................................................................... 36322.3 La notion dadresse............................................................................................................................. 36422.3 Structure dune trame IC ................................................................................................................... 364

    22.4 EVNEMENTS SPCIAUX........................................................................................................................... 36922.4.1 La libration du bus ......................................................................................................................... 36922.4.2 Le repeated start-condition .............................................................................................................. 36922.4.3 La pause ........................................................................................................................................... 369

    22.5 ARBITRAGE DU BUS ................................................................................................................................. 37022.6 LES EEPROM IC....................................................................................................................................... 373

    22.6.1 Caractristiques gnrales............................................................................................................... 37422.6.2 Octet de contrle et adresse esclave ................................................................................................ 37522.6.3 Slection dune adresse interne........................................................................................................ 37822.6.4 Ecriture dun octet ........................................................................................................................... 37922.6.5 Ecriture par page ............................................................................................................................. 38022.6.6 La lecture alatoire .......................................................................................................................... 38122.6.7 La lecture de ladresse courante ...................................................................................................... 38322.6.8 La lecture squentielle ..................................................................................................................... 38322.6.9 Le cas de la 24C16........................................................................................................................... 38422.6.10 Conclusions .................................................................................................................................... 385

    23. LE MODULE MSSP EN MODE IC ........................................................................................................ 387

    23.1 INTRODUCTION ........................................................................................................................................ 387

  • 723.2 LE REGISTRE SSPSTAT........................................................................................................................... 38823.3 LE REGISTRE SSPCON ............................................................................................................................ 38923.4 LE REGISTRE SSPADD ............................................................................................................................ 39023.5 LE REGISTRE SSPCON2 .......................................................................................................................... 39323.6 LES COLLISIONS ....................................................................................................................................... 39423.7 LE MODULE MSSP EN MODE IC MATRE ................................................................................................ 394

    23.7.1 La configuration du module ............................................................................................................. 39423.7.2 La vrification de la fin des oprations............................................................................................ 39523.7.3 La gnration du start-condition...................................................................................................... 39723.7.4 Lenvoi de ladresse de lesclave ..................................................................................................... 39723.7.5 Le test de lACK ............................................................................................................................... 39823.7.6 Lcriture dun octet ........................................................................................................................ 39923.7.7 L envoi du repeated start-condition ................................................................................................ 39923.7.8 Lenvoi de ladresse de lesclave ..................................................................................................... 40123.7.9 La lecture de loctet ......................................................................................................................... 40223.7.10 Lenvoi du NOACK ........................................................................................................................ 40223.7.11 Lenvoi du stop-condition............................................................................................................... 403

    23.8 LUTILISATION DES INTERRUPTIONS ........................................................................................................ 40423.8 LE MODULE MSSP EN MODE IC MULTI-MATRE ..................................................................................... 405

    23.8.1 Larbitrage ....................................................................................................................................... 40523.8.2 La prise de contrle du bus .............................................................................................................. 40523.8.3 La dtection de la perte de contle .................................................................................................. 406

    23.9 LE MODULE MSSP EN MODE IC ESCLAVE 7 BITS.................................................................................... 40623.9.1 Ladressage et linitialisation .......................................................................................................... 40723.9.2 la rception du start-condition......................................................................................................... 40723.9.3 La rception de ladresse en mode criture ..................................................................................... 40823.9.4 La gnration du ACK ............................................................................................................... 40923.9.5 La rception dun octet de donne ................................................................................................... 40923.9.6 La rception de ladresse en mode lecture....................................................................................... 41023.9.6 Lmission dun octet ....................................................................................................................... 41023.9.7 Le mode esclave 7 bits par les interruptions .................................................................................... 41123.10 Le module MSSP en mode IC esclave 10 bits .................................................................................. 415

    23.11 SYNTHSE.............................................................................................................................................. 41723.12 EXERCICE PRATIQUE : PILOTAGE DUNE 24C64...................................................................................... 41823.13 LE MODULE IC EN MODE SLEEP ............................................................................................................ 43223.14 CONCLUSIONS........................................................................................................................................ 43223.15 ANNEXE : ERRATA SUR LE IC................................................................................................................ 43223.16 BUG EN MODE IC ESCLAVE................................................................................................................... 433

    24. LE MODULE USART EN MODE SRIE SYNCHRONE..................................................................... 435

    24.1 INTRODUCTION ........................................................................................................................................ 43524.2 MISE EN UVRE ET PROTOCOLES ............................................................................................................. 43524.3 LE REGISTRE TXSTA ............................................................................................................................... 43724.4 LE REGISTRE RCSTA............................................................................................................................... 43824.5 LE REGISTRE SPBRG............................................................................................................................... 43924.6 LINITIALISATION .................................................................................................................................... 44024.7 LMISSION EN MODE MATRE.................................................................................................................. 44124.8 LMISSION EN MODE ESCLAVE................................................................................................................ 44324.9 LA RCEPTION EN MODE MATRE ............................................................................................................. 444

    24.9.1 La file FIFO de RCREG................................................................................................................... 44524.9.2 Lerreur doverflow.......................................................................................................................... 446

    24.10 LA RCEPTION EN MODE ESCLAVE ......................................................................................................... 44724.11 LE MODE SLEEP...................................................................................................................................... 44724.12 DIFFRENCES ENTRE MSSP ET USART ................................................................................................ 44724.13 EXERCICE PRATIQUE .............................................................................................................................. 44824.14 REMARQUE SUR LE MODE SLEEP ............................................................................................................ 46424.15 CONCLUSIONS........................................................................................................................................ 465

    25. LE MODULE USART EN MODE ASYNCHRONE............................................................................... 467

    25.1 LE MODE SRIE ASYNCHRONE.................................................................................................................. 467

  • 825.1.1 Le start-bit........................................................................................................................................ 46725.1.2 Les bits de donne ............................................................................................................................ 46825.1.3 La parit........................................................................................................................................... 46825.1.4 Le stop-bit ........................................................................................................................................ 469

    25.1.5 LES MODES COMPATIBLES.................................................................................................................... 47025.1.6 Les erreurs de synchronisation ........................................................................................................ 473

    25.2 MISE EN UVRE....................................................................................................................................... 47525.3 LE REGISTRE TXSTA ............................................................................................................................... 47725.4 LE REGISTRE RCSTA............................................................................................................................... 47825.5 LE REGISTRE SPBRG............................................................................................................................... 47925.6 LINITIALISATION .................................................................................................................................... 48025.7 EMISSION, RCEPTION, ET ERREUR DOVERFLOW .................................................................................... 48025.8 LERREUR DE FRAME ............................................................................................................................... 48325.9 UTILISATION DU 9ME BIT COMME BIT DE PARIT ...................................................................................... 48325.10 LA GESTION AUTOMATIQUE DES ADRESSES............................................................................................ 48325.11 LE MODE SLEEP...................................................................................................................................... 48625.12 EXEMPLE DE COMMUNICATION SRIE ASYNCHRONE.............................................................................. 487

    25.12.1 Utilisation de BSCP. ...................................................................................................................... 50525.13 CONCLUSIONS........................................................................................................................................ 509

    26. NORME ISO7816 ET PIC16F876 ............................................................................................................. 511

    26.1 AVANT-PROPOS ....................................................................................................................................... 51126.2 LANCTRE WAFER ............................................................................................................................ 51126.3 LA SUCCESSION PICCARD2 . ................................................................................................................ 51326.4 LA BIGCARD 1 ......................................................................................................................................... 51426.5 LA BIGCARD 2 .......................................................................................................................................... 51526.6 CONCLUSIONS.......................................................................................................................................... 517

    27. LE MODE SLEEP ...................................................................................................................................... 519

    27.1 GNRALITS .......................................................................................................................................... 51927.2 LES MCANISMES..................................................................................................................................... 51927.3 LES INTERRUPTIONS CONCERNES ........................................................................................................... 520

    27.4 CONCLUSION.......................................................................................................................................... 521

    28. LE RESTE DU DATASHEET................................................................................................................... 523

    28.1 INTRODUCTION ........................................................................................................................................ 52328.2 LE MODE LVP.......................................................................................................................................... 52328.3 PWRTE ET BODEN................................................................................................................................ 52428.4 LES ADRESSES RSERVES 0X01 0X03............................................................................................ 52528.5 LOVERCLOCKAGE................................................................................................................................... 52728.6 CE DONT JE NAI PAS PARL ..................................................................................................................... 528

    ANNEXE1 : QUESTIONS FRQUEMMENT POSES (F.A.Q.)............................................................... 529

    A1.1 JE NARRIVE PAS UTILISER MON PORTA ............................................................................................. 529A1.2 LE CHOIX DU PROGRAMMATEUR ............................................................................................................. 529

    CONTRIBUTION SUR BASE VOLONTAIRE ............................................................................................ 531

    B. UTILISATION DU PRSENT DOCUMENT........................................................................................... 533

  • 91. Introduction

    Tout dabord, un grand remerciement tous ceux qui ont permis que cette aventure existe.Je parle ici de toutes les personnes qui mont envoy leurs commentaires et corrections, lesdiffrents hbergeurs de la premire partie de ce cours, ainsi que tous ceux qui mont envoyremerciements et encouragements. Je remercie davance tous ceux qui feront de mme pourcette seconde partie.

    Merci galement mon pouse pour sa patience durant toutes ces soires passes plantderrire mon ordi .

    Cette seconde partie sadresse aux personnes qui ont dj lu et compris la premirepartie, ddicace la programmation du 16F84. Donc, je ne reviendrai pas sur les explicationsde base concernant la programmation, et je nexpliquerai pas non plus les diffrentesfonctions avec autant de dtail. Cet ouvrage est donc un complment, une volution, et non unouvrage destin tre utilis de manire compltement indpendante.

    Le document indispensable pour aborder la programmation du processeur 16F87x est ledatasheet 16F87x disponible sur le site http://www.microchip.com. Afin que tout le mondedispose du mme document que lauteur, jai intgr dans le rpertoire fichiers , la versiondu datasheet qui a servi pour laborer ce cours.

    Ceux qui veulent comprendre tous les dtails du fonctionnement des PICs concernspeuvent galement charger le Pic Micro Mid-Range MCU Family Reference Manual ,disponible la mme adresse. Attention, limpression de cet ouvrage, disponible dailleurs parchapitres spars, requiert plusieurs centaines de feuilles.

    Cet ouvrage est plus technique que le prcdent. Cette dmarche ma t impose, dunepart par ltendue des possibilits, et dautre part par la ncessit dune certaine part dethorie qui, seule, permettra de sortir le lecteur de toutes les situations non abordes de faonconcrte.

    En effet, ces composants possdent une multitude de fonctions, elles-mmes parfoisscindes en plusieurs modes de fonctionnement. Dcrire un exemple dtaill pour chacune deses fonctions aurait ncessit un ouvrage trop consquent pour que je puisse en venir boutdans des dlais raisonnables. Vous remarquerez cependant que je nai pas t avaredexercices pratiques.

    Jai donc conserv le maximum dexemples, mais jai opt principalement pour unedmarche qui vise vous fournir tous les outils et toutes les explications qui vous permettrontdutiliser toutes les fonctions de cette srie dans vos applications particulires.

    Ce faisant, jai d aborder beaucoup de thorie, ce qui rend cet ouvrage un peu plus dur lire que le prcdent. Ce nest pas une dmarche litiste, au contraire, mais une tentative pourvous ouvrir le maximum de portes pour le futur. De plus, vous tes senss, lors de la lecturede cet ouvrage, matriser parfaitement le 16F84, on ne peut donc plus parler douvrage pourdbutants.

    Jespre quen procdant de la sorte, je ne me suis pas montr trop rbarbatif.

  • 10

    Je suis toujours lcoute de tous, je rponds toujours au courrier reu, et si lademande se fait sentir concernant certains chapitres, il me sera toujours possible dajouterexplications complmentaires et exemples supplmentaires.

    Nhsitez donc pas me faire part de vos remarques et suggestions, et jetez de tempsen temps un il sur mon site (http://www.abcelectronique.com/bigonoff ouwww.bigonoff.org ) pour voir si une nouvelle rvision nest pas disponible.

    A tout ceux qui mont demand ou qui se demandent pourquoi jai mis cet ouvragegratuitement la disposition de tous, je rpondrai ceci :

    En ces temps o tout se marchande, o la mondialisation du commerce seffectue audtriment du bien-tre le lHomme et de lHumanit, il est primordial de se dresser contrecette mentalit du tout marchand.

    Je ne suis pas le prcurseur de cette dmarche dans le domaine de la technique et delinformatique. Bien dautres ont compris ceci avant moi, comme par exemple les crateurs delogiciels freeware. Dautres suivront ces exemples, afin que le monde en gnral, et Interneten particulier, devienne ce quil aurait toujours d tre : un lieu dchange de la connaissanceet un partage des dons et des richesses de chacun .

    Internet est un formidable outil de communication qui peut nous aider atteindre ce but.Veillons attentivement ce quil ne devienne pas un gigantesque lieu de e-business rcuprpar les multinationales.

    Je vais cependant peut-tre chercher un diteur qui me permettra de distribuer en plus cesdiffrents ouvrages par la voie classique. Ceci permettrait au plus grand nombre davoir accsaux informations, et, de plus, pourrait se rvler rentable pour lutilisateur, le prix delimpression dun tel ouvrage sur une imprimante jet dencre pouvant se rvler aussionreux que lacquisition dun livre. Mais le cours restera disposition sur internet aussilongtemps que jen aurai la possibilit matrielle et financire.

    La demande de contribution sur base volontaire nest pas une entorse cette philosophie.Le cours reste gratuit, maide qui le veut, et comme il le veut.

    Jai construit ce livre en pensant son format papier. Il est prvu pour tre imprim enrecto-verso. Comme il est amen tre corrig, et afin de ne pas vous imposer la rimpressioncomplte en cas de modifications, jai laiss un peu de place libre entre chaque chapitre.Ainsi, une insertion ne ncessitera pas la renumrotation des pages.

    Je vous souhaite beaucoup de plaisir la lecture de ce petit ouvrage sans prtention, et jevous le conseille : exprimentez, exprimentez, et exprimentez encore !

    Et vive lInternet libre !

    BIGONOFF

  • 11

    2. Les caractristiques des 16F87x

    2.1 Caractristiques gnrales de la famille 16F87x

    Le 16F876 et le 16F877 (et dautres) font partie de la sous-famille des 16F87x. Cettebranche fait partie intgrante de la grande famille des PICs Mid-Range, au mme titre que le16F84 dont je parle dans le prcdent ouvrage. On peut considrer que le 16F84 constitue lecircuit dentre de gamme de cette famille, alors que le 16F877 reprsente la couchesuprieure. De nouveaux circuits ne devraient probablement pas tarder amliorer encore lesperformances.

    De ce fait, beaucoup de similitudes sont prvoir entre ces 2 composants. Nous verronsdans le chapitre suivant quels sont ces points communs.

    La famille 16F87x comprend toute une srie de composants, voici les diffrents typesexistant au moment de lcriture de cet ouvrage. Notez que les composants sont en constantevolution. Il vous appartiendra donc de vous tenir au courant de ces volutions.

    PIC FLASH RAM EEPROM I/O A/D Port // Port srie16F870 2K 128 64 22 5 NON USART16F871 2K 128 64 33 8 PSP USART16F872 2K 128 64 22 5 NON MSSP16F873 4K 192 128 22 5 NON USART/MSSP16F874 4K 192 128 33 8 PSP USART/MSSP16F876 8K 368 256 22 5 NON USART/MSSP16F877 8K 368 256 33 8 PSP USART/MSSP

    Tous ces composants sont identiques, aux exceptions cites dans le tableau prcdent. Lesdiffrences fondamentales entre ces PICs sont donc les quantits de mmoires disponibles, lenombre dentres/sorties, le nombre de convertisseurs de type analogique/digital (dire analogique/numrique , et le nombre et le type des ports intgrs.

    A lheure actuelle, ces composants existent dans divers types de botiers. Ces types sontreprsents page 1 et 2 du datasheet. Les botiers 40 broches sont utiliss par les composantsqui disposent dun port //, comme le 16F877. Le botier qui nous intresse plusparticulirement est celui dont le brochage est disponible en haut et gauche de la page 2.Ce botier est disponible en version standard (PDIP 28 broches) ou en version composant desurface , ou CMS (SOIC).

    Comme pour le 16F84, le numro peut tre suivi dun A , et dun -xx qui donne lafrquence dhorloge maximum du composant. A lheure o jcris cet ouvrage, la version laplus courante est la version 20. Donc, la frquence que nous utiliserons en standard dans cetouvrage sera de 20MHz. De mme, les exercices seront raliss sur un PIC16F876, moinscher que le 16F877. Nous nutiliserons ce dernier composant que lorsque ses spcificitsseront indispensables la ralisation de lexercice.

  • 12

    Nous nous intresserons donc dans cet ouvrage principalement au 16F876, qui est le plusutilis lheure actuelle. La transposition vers un autre type ne demande quun minimumdadaptation. Nous parlerons galement du 16F877 lorsque nous aborderons le port parallle.Ainsi, nous aurons vu lintgralit des fonctions de cette famille.

    2.2 Organisation de la RAM

    Nous voyons donc que la mmoire RAM disponible du 16F876 est de 368 octets. Elle estrpartie de la manire suivante et donne page 13 du datasheet :

    1) 80 octets en banque 0, adresses 0x20 0x6F2) 80 octets en banque 1, adresses 0xA0 0XEF3) 96 octets en banque 2, adresses 0x110 0x16F4) 96 octets en banque 3, adresses 0x190 0x1EF5) 16 octets communs aux 4 banques, soit 0x70 0x7F = 0xF0 0xFF = 0x170 0x17F =

    0x1F0 0x1FF

    Que signifient ces octets communs ? Tout simplement que si vous accdez au registre(adresse mmoire RAM) 0x70 ou au registre 0XF0, et bien vous accdez en ralit au mmeemplacement. Ceci lavantage de permettre dutiliser ces emplacements sans devoirconnatre ltat de RP0,RP1, et IRP.

    2.3 Structure du 16F876

    Allons ensemble regarder la structure interne du 16F876, schmatise figure 1.1 page 5 dudatasheet.

    Que constatons-nous au premier abord ?

    En premier lieu, les largeurs de bus internes sont les mmes que pour le 16F84, cest dire que nous devrons faire face aux mmes contraintes pour les accs aux diffrentesbanques et registres.

    Ensuite, nous constatons la prsence de plus de ports, ce qui augmente dautant le nombredentres/sorties disponibles.

    Viennent ensuite les timers, au nombre de 3 au lieu dun seul pour le 16F84. A ct de cestimers on remarquera la prsence dun convertisseur analogique de 10 bits.

    Au vu de ce schma-bloc et des indications prcdentes, on peut donc dire, pour dgrossirle sujet de manire approximative, quun 16F876, cest un 16F84 dot en supplment :

    - De plus de mmoire RAM (rpartie sur 4 banques), Flash, et eeprom- De plus de ports dentre/sortie- De plus de timers- De nouvelles fonctionnalits, comme les gestions de ports srie - Dun convertisseur A/D (analogique/numrique) plusieurs canaux dune rsolution de

    10 bits.

  • 13

    Nous voyons donc que ltude du 16F876 peut se rsumer lapprentissage desdiffrences par rapport au 16F84. Ces diffrences introduisent cependant une part nonngligeable de thorie, ce qui ma convaincu dcrire cette seconde partie.

    Il faut dire qucrire un livre de plus de 500 pages rien que sur les diffrences avec laprcdente version, propos de laquelle louvrage comportait 200 pages, indique que les ditesdiffrences justifiaient quon sy attarde.

    Il existe de plus des fonctions qui ncessitent une tude plus pousse (debuggage surcircuit, techniques du bootloader), mais jaborderai ceci dans le livre suivant (3me partie : Lessecrets des 16F87x). En effet, afin de limiter la taille de cet ouvrage, et dacclrer sa sortie,jai scind la version initialement prvue en plusieurs volumes.

    En bonne logique, commenons donc par voir ce qui caractrise le 16F87x

  • 14

    Notes : .

  • 15

    3. Les particularits de la programmation du 16F87x

    3.1 La directive _CONFIG

    Tout comme nous lavons vu dans la premire partie, cette directive dtermine lefonctionnement du PIC. La valeur est inscrite au moment de la programmation dans unregistre spcial, situ en mmoire programme ladresse 0x2007, et ne peut plus tre modifien cours dexcution du programme.

    Notez que puisque la mmoire programme des PICs vierges contient des 1 , lesniveaux actifs de ces bits sera le niveau 0 .

    Ce registre de 14 bits (puisquen mmoire programme) dispose dune organisationdiffrente par rapport celui du 16F84. Voici donc ses fonctions, reprises page 122 dudatasheet :

    - CP1/CP0 : bits 13/12 et 5/4 : Dtermine quelle zone du 16F876 sera protge contre lalecture. Vous pouvez donc choisir de protger la totalit du PIC, ou seulement une partie.Les diffrentes zones pouvant tre protges sont les suivantes :CP1 CP01 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 lintgralit de la mmoire (_CP_ALL)

    - DEBUG : bit 11 : Debuggage sur circuit. Permet de ddicacer RB7 et RB6 lacommunication avec un debugger.

    1 : RB6 et RB7 sont des I/O ordinaires (_DEBUG_OFF)0 : RB6 et RB7 sont utiliss pour le debuggage sur circuit (_DEBUG_ON)

    - Bit 10 : non utilis

    - WRT : bit 9 : Autorisation dcriture en flash1 : Le programme peut crire dans les zones non protges par les bits CP1/CP0 (_WRT_ENABLE_ON)0 : Le programme ne peut pas crire en mmoire flash (_WRT_ENABLE_OFF)

    - CPD : bit 8 : Protection en lecture de la mmoire eeprom.1 : mmoire eeprom non protge (_CPD_OFF)0 : mmoire eeprom protge (_CPD_ON)

    - LVP : bit 7 : Utilisation de la pin RB3/PGM comme broche de programmation1 : La pin RB3 permet la programmation du circuit sous tension de 5V (_LVP_ON)0 : La pin RB3 est utilise comme I/O standard (_LVP_OFF)

    - BODE N : bit 6 : provoque le reset du PIC en cas de chute de tension (surveillance de latension dalimentation)

    1 : En service (_BODEN_ON)

  • 16

    0 : hors service (_BODEN_OFF)

    - PWRTE : bit 3 : Dlai de dmarrage la mise en service. Attention, est automatiquementmis en service si le bit BODEN est positionn.

    1 : dlai hors service (sauf si BODEN = 1) (_PWRTE_OFF)0 : dlai en service (_PWRTE_ON)

    - WDTE : bit 2 : Watchdog timer1 : WDT en service (_WDT_ON)0 : WDT hors service (_WDT_OFF)

    - FOSC1/FOSC0 : bits 1/0 : slection du type doscillateur11 : Oscillateur de type RC (_RC_OSC)10 : Oscillateur haute vitesse (_HS_OSC)01 : Oscillateur basse vitesse (_XT_OSC)00 : Oscillateur faible consommation (_LP_OSC)

    Noubliez pas dutiliser ces valeurs dans la directive _CONFIG. Les diffrentes valeurs,prdfinies dans le fichier P16F876.INC doivent tre spares par des directives & .

    Voici un exemple dutilisation :

    __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF &_LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

    Je fournis dans les fichiers joints ce cours, une maquette pour le 16F876 et une pour le16F877, dans lesquelles le corps de programme et les explications des directives ont dj tlabors par mes soins. Ces fichiers m16f876.asm et m16F877.asm vous pargnerontsans aucun doute bien du travail peu valorisant.

    3.2 Utilisation de la mmoire RAM

    Sur ce processeur, nous avons donc 4 banques de mmoire RAM. Nous voyons que lesadresses schelonnent entre 0x00 et 0x1FF.

    Si vous convertissez 0x1FF en binaire, laide de la calculette de Windows, vousconstaterez quil faut 9 bits pour coder cette valeur. La largeur du bus de donnes tant de 8bits, et la largeur du bus dadressage direct de 7 (voir la premire partie), il va nous falloirtrouver des bits supplmentaires.

    3.2.1 Ladressage direct

    Pour ce type dadressage, il nous manque donc 2 bits. Tout comme dans le cas du 16F84,nous allons trouver ces 2 bits dans le registre STATUS. La combinaison des bits RP0 et RP1de ce registre, permet donc daccder en adressage direct lintgralit de la mmoire RAM.Ladresse finale est donc compose de RP1/RP0 comme bits 8 et 7, complts des 7 bits deladresse directe utilise dans lexpression.

  • 17

    Les 4 possibilits concernant RP1/RP0 donnent donc :

    00 : Accs la RAM 0x00 0x7F01 : Accs la RAM 0x80 0xFF10 : Accs la RAM 0x100 0x17F11 : Accs la RAM 0x180 0x1FF

    Notez que la RAM situe de 0x70 0x7F est accessible quel que soit ltat de RP0 et RP1.En effet, les zones correspondantes dans les autres banques sont en fait des images de cettezone

    Voici des emplacements de mmoire RAM. Pour rappel, les ( ) dans les commentairessignifient le contenu de :

    variable1 EQU 0x25 ; adresse de la variable 1variable2 EQU 0x7E ; adresse de la variable 2variable3 EQU 0xA1 ; adresse de la variable 3

    movlw 0x50 ; charger 0x50 dans Wmovwf variable2 ; dans la case mmoire 0x7E, car indpendant de

    ; RPxmovlw 0x30 ; charger 0x30 dans Wbcf STATUS , RP0 ; passage en banque 0bcf STATUS , RP1movwf variable1 ; placer dans la case mmoire 0x25movwf variable3 ; placer dans 0x21, car seuls 7 bits sont pris en

    ; compte. Pige.bsf STATUS , RP1 ; passer en banque 2movf variable2 , W ; (0x17E) dans W, donc (0x7E), donc 0x50movwf variable1 ; 0x50 dans la case mmoire 0x125bsf STATUS , RP0 ; passage en banque 3movwf variable1 ; 0x50 dans la case mmoire 0x1A5

    Vous pouvez facilement voir les correspondances des adresses en utilisant le tableau 2.3page 13 du datasheet, ou avec la calculatrice de Windows. Si vous ne comprenez pas bien ouque vous doutez, procdez la mthode suivante pour obtenir ladresse concerne :

    1) Convertissez ladresse en binaire avec la calculatrice Windows 2) Entrez en binaire les 2 bits RP0 et RP1 3) Compltez avec les 7 bits gauche de ladresse binaire.

    Par exemple, pour la dernire ligne du prcdent exemple :

    1) RP0/RP1 = 11

    2) 25 en hexadcimal donne 100101 en binaire (attention, il ny a que 6 chiffres, jecomplte donc par un 0 gauche : 0100101

    3) Ceci donne B110100101, soit 0x1A5

  • 18

    3.2.2 Ladressage indirect

    Ladressage indirect utilise le registre FSR/INDF . Hors, ce registre une largeur de 8bits. Donc, tel quel, il lui est impossible dadresser plus de 2 banques. Il va donc falloirtrouver une fois de plus un bit supplmentaire.

    Ce bit est le bit IRP du registre STATUS. Ce bit est donc utilis comme bit de poids fort(bit 8) complt par les 8 bits contenus dans le registre FSR.

    En fonction de la valeur de IRP, nous accderons donc :

    IRP = 0 : Banques 0 et 1, soit registres de 0x00 0xFFIRP = 1 : Banques 2 et 3, soit registres de 0x100 0x1FF

    Donc, faites attention : les bits RP0 et RP1 ninfluencent en aucune faon ladressageindirect. De mme , IRP ninfluence en aucune faon ladressage direct.

    Voici un exemple dutilisation de ladressage indirect. On prsume que cet exemple est lasuite du prcdent :

    bcf STATUS,IRP ; pointer banques 0 et 1 indirectmovlw variable1 ; charger 0x25, donc adresse de variable1movwf FSR ; mettre 0x25 dans le pointeurmovf INDF,w ; charger (0x25), donc 0x30bsf STATUS,IRP ; pointer banque 2 et 3 indirectmovwf INDF ; mettre 0x30 dans le registre 0x125movlw variable3 ; charger adresse variable3movwf FSR ; dans pointeurbcf STATUS,RP0 ; pointer banque0 en adressage directbcf STATUS,RP1movf variable3,w ; charger (0x21) car 0xA1 en 7 bits , donc 0x30movwf INDF ; placer 0x30 en 0x1A1. En effet, 8 bits de

    ; ladresse 0xA1 + bit8 1 (IRP)

    Pour rsumer :

    - Vous devez toujours vrifier RP0 et RP1 avant toute utilisation de ladressage direct.

    - Vous devez toujours vrifier IRP avant toute utilisation de ladressage indirect.

    Sachez dj que, suivant mes observations, plus de la moiti des erreurs deprogrammation persistantes sont dues des erreurs de slection de banques.

    3.3 Lutilisation du registre PCLATH

    Nous avons dj vu ce registre dans ltude du 16F84 : en effet, lors dune oprationmathmatique sur le registre PCL (dans le cadre de lutilisation dun tableau), le rsultatdonnait une valeur sur 8 bits.

    Notre 16F84 permettant un adressage de plus de 8 bits, les bits manquants taientgalement emprunts PCLATH.

  • 19

    3.3.1 PCLATH et les calculs dadresse

    Cette limitation existe ici aussi de la mme manire. Donc, nous devrons donc utilisernotre PCLATH en suivant les recommandations suivantes :

    - En cas dopration sur PCL, la valeur sur 8 bits obtenue est complte par PCLATH pourformer ladresse de destination effective. Supposons donc que nous fassions une additionde w par rapport PCL. O va pointer alors le pointeur de programme (PC) ?

    Voici le contenu de PC aprs laddition :

    b7 b0 seront en fait le contenu effectif de PCLb12 b8 seront les bits b4 b0 de PCLATH.

    Exemple dopration qui sapplique dans ce cas :

    movlw B10010 ; charger valeurmovwf PCLATH ; initialiser PCLATHmovlw 0x22 ; charger valeuraddwf PCL , f ; sauter plus loin

    PCLATH (5 bits) PCL (8 bits)B4 B3 B2 B1 B0 B7 B6 B5 B4 B3 B2 B1 B0

    PC(13 bits) = adresse de sautB12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

    Ce fonctionnement est strictement identique celui expliqu dans le cadre du 16F84.

    Si on prend comme exemple concret le rsultat suivant :

    - PCL vaut B11011010 aprs laddition- PCLATH a t initialis B00010010 par lutilisateur. Notez que b7 b5 sont inutiliss.- Le saut final seffectuera donc ladresse B1001011011010 aprs laddition, soit

    0x12DA.

    PCLATH (5 bits) PCL (8 bits)1 0 0 1 0 1 1 0 1 1 0 1 0

    PC(13 bits) = adresse de saut1 0 0 1 0 1 1 0 1 1 0 1 0

    3.3.2 PCLATH et les sauts directs

    Et oui, avec ce processeur survient un autre problme, problme que nous navions pasrencontr cette fois avec le 16F84.

    Si vous examinez le jeu dinstructions du 16F876 dans le dtail, vous allez vousapercevoir quil est strictement identique celui du 16F84, et, de ce fait, prsente les mmeslimitations.

  • 20

    Une de celle-ci, la plus gnante, est le nombre de bits qui accompagne les instructions desaut, comme le goto . Rappelez-vous que les instructions de saut sont de la forme :Op-code + 11 bits de destination.

    Or, les sauts sur 11 bits ne permettent que des sauts lintrieur dune page de 2KMots. Notre processeur utilise un maximum de 8Kmots de programme, et ncessite donc 2bits supplmentaires pour accder lintgralit de la mmoire programme. Le schma-blocdonnant bien une largeur de bus dadressage de 13 bits.

    Ces bits, nous allons donc aller les chercher galement dans le registre PCLATH. Commeil ne nous manque que 2 bits, nous nutiliserons donc que les 2 bits b4 et b3 de PCLATH.

    Pour rsumer, le saut seffectuera ladresse donne en argument complte en poids fortpar les 2 bits b4 et b3 de PCLATH. Les bits 2 0 de PCLATH sont inutiliss ici.

    PCLATH ARGUMENT DU SAUT (11 bits)B4 B3 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

    PC(13 bits) = adresse de sautB12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

    Petit exemple pratique : soit les instructions suivantes :

    movlw 0x13 ; charger 0x13, soit B10011, donc b4=1, b3=0movwf PCLATH ; dans PCLATHgoto 0x112 ; sauter thoriquement en 0x112 (B00100010010)

    Voici ce que a donne :

    PCLATH ARGUMENT DU SAUT (11 bits)1 0 0 0 1 0 0 0 1 0 0 1 0

    PC(13 bits) = adresse de saut1 0 0 0 1 0 0 0 1 0 0 1 0

    Donc, vous constaterez que le programme saute en ralit ladresse 0x1112, et non ladresse 0x112.

    Mais ne vous inquitez pas trop : tout dabord nous allons voir tout a avec un exemplepratique, et ensuite, les sauts dans les espaces suprieurs 2K ne devraient pas vous perturberavant un certain temps.

    Noubliez pas en effet que vous ne rencontrerez ce problme que si votre programmedpasse les 2Kmots de code. Donc, il faudra que vous ayez crit plus de 2000 lignes de codedans votre programme.

    Nul doute que quand vous en serez l, vous matriserez parfaitement ce type de limitation.

    De plus, je vais vous venir en aide, en vous expliquant et en crant des macros pour vousfaciliter le traitement de ce problme le jour o vous le rencontrerez.

  • 21

    Notez quil est rare dcrire un ligne du type

    goto 0x112

    car, en gnral, vous utiliserez plutt un saut vers une tiquette, du style :

    goto etiquette

    Dans ce cas, vous devrez raisonner de faon inverse. Il vous faudra savoir dans quellepage de 2Kmots se trouve etiquette et ensuite vous positionnerez PCLATH enconsquence.

    Rassurez-vous cependant, MPASM ne manquera pas de vous avertir, par un warning,quil y a un risque ce niveau.

    Mais, pour tre certain que vous compreniez bien tout, nous allons mettre tout ceci enpratique dans le chapitre suivant.

  • 22

    NOTES : ...

  • 23

    4. Sauts de pages et premier projet sur MPLAB

    Pour clarifier la situation, nous allons donc mettre ceci en pratique. Commencez donc parfaire une copie de votre fichier m16f876.asm et renommez cette copie en pclath.asm .

    Lancez MPLAB et crez un nouveau projet pclath.pjt .

    Je nentrerai plus dans les dtails, vu que jai tout expliqu dans la premire partie ducours. Dans la fentre edit project qui souvre alors, slectionnez < change > ct de lafentre development mode , puis choisissez la mise en service du simulateur pour le16F876. Ceci est donn pour lancienne version 5.x de MPLAB. Pour la 6.x, voyez le cours-part1

    Cliquez ensuite sur la ligne pclath [.hex] , le bouton < Node Properties > devient actif.Cliquez dessus et configurez la fentre qui souvre de manire identique celle de la figuresuivante :

  • 24

    Cliquez OK dans la fentre Node Properties , puis revenez la fentre Editproject . Crez un nouveau nud avec et slectionnez votre fichier pclath.asm . Cliquez ensuite dans la fentre Edit project .

    Dans le menu file , ouvrez enfin votre fichier pclath .asm . Vous tes enfinprts travailler sur votre premier programme en 16F876.

    Si vous navez pas tout suivi, retournez jeter un il dans le cours sur le 16F84.

    4.1 Structure et utilisation du fichier maquette

    Commencez donc, comme toujours, par remplir votre cadre de commentaires, pourexpliquer ce que contiendra votre nouveau projet. Tout comme dans la premire partie ducours, jinsiste de nouveau pour que vous documentiez au maximum vos programmes. Cestle seul et unique moyen de vous permettre une maintenance aise de vos ralisations dans letemps. Ce qui vous semble vident aujourdhui ne le sera peut-tre plus demain. Sachez quemoi-mme je documente mes programmes exactement de la faon que je dcris dans ce cours,car ce qui est bon pour vous lest forcment pour moi aussi.

    Jouvre ici une parenthse, pour me fcher un peu (une fois nest pas coutume, vous nemy reprendrez plus).

    Malgr tous ces avertissements, je reois rgulirement des programmes excuts parcertains dentre-vous, et vierges de tout commentaire. Dune part, je ne lirai plus lesprogrammes sans commentaire, et dautre part, si ces personnes me les envoient, cest quilsne fonctionnent pas. Comment alors admettre que ces personnes nont pas besoin de conseilspour raliser leur programme, mais en ont besoin pour les debugger lorsquils ne fonctionnentpas ?

    De mme, je reois des programmes de personnes qui ont dcid de nutiliser aucunsymbole. Essayez donc de lire des programmes du style :

    bsf 03,7movlw 0x3Cmovwf 04movf 0,0

    Et bien, moi, jy renonce dfinitivement. Et dire que leurs auteurs stonnent quils sontdifficiles debugger. Cest quand mme plus clair comme ceci, non ? (cest le mmeprogramme) :

    bsf STATUS,IRP ; pointer sur banques 2 et 3movlw mavariable ; charger adresse de ma variablemovwf FSR ; dans pointeur indirectmovf INDF,w ; charger mavariable dans w

    Autrement dit, si vous vous obstinez utiliser la premire mthode (qui vous refera trsvite perdre le temps gagn), alors cest que vous avez dcid de vous passer de mes conseils.Gardez donc dans ce cas vos problmes de debuggage pour vous.

  • 25

    Ben oui, cette fois je rle un peu, mais il faut me comprendre, non ? Jestime donc que sivous poursuivez, cest que vous tes pleins de bonne volont, et que vous comprenez quecest dans votre propre intrt dutiliser les commentaires et adressages symboliques.

    Je referme la parenthse.

    Voici donc un exemple de zone de commentaires pour cet exercice :

    ;************************************************************************; Exercice sur les sauts inter-pages pour montrer l'utilisation de *; PCLATH. *; *;************************************************************************; *; NOM: PCLATH *; Date: 04/07/2001 *; *; Version: 1.0 *; *; Circuit: aucun *; Auteur: Bigonoff *; *; *;************************************************************************; *; Fichier requis: P16F876.inc *; *; *;************************************************************************

    Viennent ensuite, comme toujours, la dclaration de processeur destine MPASM, et larfrence au fichier dinclusion, qui devra tre prsent dans votre rpertoire des fichiers.

    LIST p=16F876 ; Dfinition de processeur#include ; fichier include

    Ensuite, vous trouvez la fameuse directive _CONFIG qui dfinit le fonctionnement debase du processeur. Rien de spcial ici, vu que ce nest quun exercice statique:

    __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF &_BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

    Plus bas se trouvent les assignations systme. Ceci dans le but de vous viter dechercher dans le programme aprs les registres concerns. Il suffit de modifier ici les valeursde certains registres. Ces valeurs seront charges lors de linitialisation par la routine init .

    ;**************************************************************************; ASSIGNATIONS SYSTEME *;**************************************************************************

    ; REGISTRE OPTION_REG (configuration); -----------------------------------OPTIONVAL EQUB'00000000'

    ; RBPU b7 : 1= Rsistance rappel +5V hors service; INTEDG b6 : 1= Interrupt sur flanc montant de RB0; 0= Interrupt sur flanc descend. de RB0; TOCS b5 : 1= source clock = transition sur RA4

  • 26

    ; 0= horloge interne; TOSE b4 : 1= Slection flanc montant RA4(si B5=1); 0= Slection flanc descendant RA4; PSA b3 : 1= Assignation prdiviseur sur Watchdog; 0= Assignation prdiviseur sur Tmr0; PS2/PS0 b2/b0 : valeur du prdiviseur; 000 = 1/1 (watchdog) ou 1/2 (tmr0); 001 = 1/2 1/4; 010 = 1/4 1/8; 011 = 1/8 1/16; 100 = 1/16 1/32; 101 = 1/32 1/64; 110 = 1/64 1/128; 111 = 1/128 1/256

    ; REGISTRE INTCON (contrle interruptions standard); -------------------------------------------------INTCONVAL EQU B'00000000'

    ; GIE b7 : masque autorisation gnrale interrupt ; ne pas mettre ce bit 1 ici ; sera mis en temps utile

    ; PEIE b6 : masque autorisation gnrale priphriques; T0IE b5 : masque interruption tmr0; INTE b4 : masque interruption RB0/Int; RBIE b3 : masque interruption RB4/RB7; T0IF b2 : flag tmr0; INTF b1 : flag RB0/Int; RBIF b0 : flag interruption RB4/RB7

    ; REGISTRE PIE1 (contrle interruptions priphriques); ----------------------------------------------------PIE1VAL EQU B'00000000'

    ; PSPIE b7 : Toujours 0 sur PIC 16F786; ADIE b6 : masque interrupt convertisseur A/D; RCIE b5 : masque interrupt rception USART; TXIE b4 : masque interrupt transmission USART; SSPIE b3 : masque interrupt port srie synchrone; CCP1IE b2 : masque interrupt CCP1; TMR2IE b1 : masque interrupt TMR2 = PR2; TMR1IE b0 : masque interrupt dbordement tmr1

    ; REGISTRE PIE2 (contrle interruptions particulires); ----------------------------------------------------PIE2VAL EQU B'00000000'

    ; UNUSED b7 : inutilis, laisser 0; RESERVED b6 : rserv, laisser 0; UNUSED b5 : inutilis, laisser 0; EEIE b4 : masque interrupt criture EEPROM; BCLIE b3 : masque interrupt collision bus; UNUSED b2 : inutilis, laisser 0; UNUSED b1 : inutilis, laisser 0; CCP2IE b0 : masque interrupt CCP2

    Ne vous occupez pas de ces registres ici. Nous verrons ceux que vous ne connaissez pasencore plus tard. Vous trouvez galement deux zones prvues pour placer vos propresdfinitions et assignations, le tout avec chaque fois un exemple.

  • 27

    Il va de soi que lorsque vous matriserez parfaitement les PICs, vous pourrez vous passerdes assignations dont vous navez pas usage. Mais ceci vous permet dtre certains de ne rienoublier.

    Maintenant, vous vous trouvez dans la zone des macros, o quelques macros existent dj.Par exemple, les macros de passage de banques. Nous naurons pas besoin des autres dans lecadre de cet exercice

    ;**************************************************************************; MACRO;**************************************************************************

    BANK0 macro ; passer en banque0bcf STATUS,RP0bcf STATUS,RP1endm

    BANK1 macro ; passer en banque1bsf STATUS,RP0bcf STATUS,RP1endm

    BANK2 macro ; passer en banque2bcf STATUS,RP0bsf STATUS,RP1endm

    BANK3 macro ; passer en banque3bsf STATUS,RP0bsf STATUS,RP1endm

    Ces macros permettent de slectionner une banque particulire en positionnant les 2 bitsconcerns. Il est vident que si vous savez dans quelle banque vous vous trouvez, il nest pastoujours ncessaire de repositionner les 2 bits. Il se peut en effet que lun des 2 soit dj dansle bon tat. Nanmoins, lutilisation de cette macro ne vous cotera quune lignesupplmentaire, et limitera fortement les risques derreurs. Vous verrez dautres macros danscette maquette, nen tenez pas compte pour linstant.

    De plus, certaines macros que je dveloppe dans mes exercices et dans les fichiersmaquettes ont leur quivalent (ou presque) dj intgr dans MPASM. Cependant, dans cecas, leur contenu nest pas visible, cest donc une dmarche moins didactique (noubliez pasquil sagit dun cours). De toute faon, je vous parlerai de ces macros particulires.

    Ensuite vous trouvez les diffrentes zones demplacement RAM pour chacune desbanques, ainsi que lemplacement des 16 octets de la zone commune. Je rappelle que ces 16octets sont accessibles indpendamment de la valeur de RP0 et RP1.

    ;************************************************************************; VARIABLES ZONE COMMUNE;************************************************************************; Zone de 16 bytes; ----------------

    CBLOCK 0x70 ; Dbut de la zone (0x70 0x7F)

  • 28

    w_temp : 1 ; Sauvegarde registre Wstatus_temp : 1 ; sauvegarde registre STATUSFSR_temp : 1 ; sauvegarde FSR (si indirect en interrupt)PCLATH_temp : 1 ; sauvegarde PCLATH (si prog>2K)ENDC

    Dans cette zone, vous trouvez les variables de sauvegarde temporaire ncessaires lorsquevous utilisez les interruptions. Les explications concernant ces variables sont donnes dans lechapitre 5 sur les interruptions.

    Pour notre exemple, supprimez ces variables, nous nutiliserons pas les interruptions.Supprimez enfin tout ce qui suit les lignes suivantes, except la directive END :

    ;***********************************************************************; DEMARRAGE SUR RESET;***********************************************************************

    org 0x000 ; Adresse de dpart aprs reset

    4.2 Cration dun programme sans saut de page

    Nous allons maintenant complter notre petit exercice. Noubliez pas de toujours laisser ladirective END aprs la dernire ligne de votre programme.

    Ajoutez maintenant les lignes suivantes, puis compilez avec Tout devrait se passersans problme.

    saut1nop ; ne rien fairenop ; ne rien fairegoto saut1 ; sauter

    END

    Tapez ensuite , le curseur du simulateur vient se placer sur la ligne ladresse 0x00.Pressez ensuite plusieurs fois pour constater que votre boucle fonctionne sans problme.

    4.3 Premires tentatives de saut inter-pages

    Nous allons maintenant provoquer un saut entre 2 pages distinctes. Tout dabord, quelleest la longueur dune page ?

    Et bien, rappelez-vous : elle est de 2Kmots, qui est la limite des 11bits impose parlarchitecture des instructions de saut. Donc, on dbordera de la page en passant deB11111111111 B100000000000, autrement dit quand on a modification du bit 12 ou dubit 13 (bit 12 dans ce cas). Cette nouvelle adresse est ladresse 0x800. Voici donc les zonesdes diffrentes pages :

    Page 0 : de 0x0000 0x07FF Page 1 : de 0x0800 0x0FFF

  • 29

    Page 2 : de 0x1000 0x17FFPage 3 : de 0x1800 0x1FFF

    Modifions donc notre petit programme de la faon suivante (noubliez pas la directive END , je ne lindiquerai plus) :

    org 0x000 ; Adresse de dpart aprs resetnop ; ne rien faire

    saut1nop ; ne rien fairenop ; ne rien fairegoto saut2 ; sauter

    org 0x800 ; adresse de la suite du programmesaut2

    nop ; ne rien fairenop ; ne rien fairegoto saut1 ; sauter

    Lancez la compilation avec . Dans la fentre des rsultats, vous voyez apparatre 2 warnings . Les numros de lignes peuvent tre diffrents en fonction des espaces entre leslignes :

    Message[306] D:\DOCUME~1\LESSONS\PICS-P~2\FICHIERS\PCLATH.ASM 214 : Crossingpage boundary -- ensure page bits are set.Message[306] D:\DOCUME~1\LESSONS\PICS-P~2\FICHIERS\PCLATH.ASM 221 : Crossingpage boundary -- ensure page bits are set.

    Si vous vous reportez aux lignes incrimines (dans mon cas 214 et 221), vous constaterezque ces lignes correspondent aux deux instructions de saut.

    En fait MPASM attire votre attention sur le point suivant : les sauts incrimins traversentune limite de page, il vous demande de vrifier si les bits correspondants de PCLATH sontbien positionns. Ceci est logique, car la directive org0x800 place le saut2 en page 1,alors que le saut 1 est situ en page 0.

    Ne tenons pas compte de ces avertissements dans un premier temps. Tapez donc ensuite puis une succession de pour voir le droulement du programme.

    Que se passe-t-il ? Au lieu que linstruction goto saut2 nous envoie vers saut2 , nousnous retrouvons en fait la premire ligne du programme.

    Examinons ce qui sest pass :

    - Linstruction goto saut2 est traduite par lassembleur en goto 0x800

    - Or, 0x800 comporte 12 bits, donc est tronque 11 bits, ce qui donne goto 0x00 . Eneffet 0x800 = B100000000000. Si vous enlevez le bit de poids fort, il resteB00000000000

    - La gestion interne du PIC ajoute ladresse les bits 3 et 4 de PCLATH, qui sont 0 .Ladresse finale est donc 0x00. En effet, ltude des 2 dernires colonnes du tableau 2-1

  • 30

    de la page 15 du datasheet nous apprend que ce registre est toujours remis 0 aprs unreset ou une mise sous tension.

    - Que trouvons-nous ladresse 0x00 ? Tout simplement la ligne qui suit la directive org0x00 .

    Modifions encore notre programme pour voir si vous avez tout compris :

    Remplaons pour cela la ligne

    org 0x800 ; adresse de la suite du programme

    Par

    org 0x850 ; adresse de la suite du programme

    Profitez-en pour ouvrir la fentre Special Fonction Registers du menu Window .Ceci vous permettre de suivre lvolution du registre PCL, titre dinformation.

    Lancez la compilation , puis faites avancer votre programme lentement en pas pas.Arriv la ligne du saut vers saut2 , pressez encore une fois . Que se passe-t-il ? Unenouvelle fentre souvre alors, intitule Program Memory Window . Cette fentrereprsente le contenu de votre mmoire programme.

    En effet, o donc avez-vous saut ? Appliquons de nouveau la mme mthode. Le saut adonc du avoir lieu vers ladresse 0x050, au lieu de 0x850 prvue. donc hors de notreprogramme. MPLAB ne peut donc pas pointer dans votre fichier source, il est contraintdouvrir cette nouvelle fentre.

    Si vous ne pointez pas sur la bonne adresse, pas de panique, MPLAB semble ne pasapprcier ce type de manuvre. Faites dfiler la fentre jusqu ladresse 0x00. Vous verrezalors la premire partie de votre programme.

    Remarquez que lassembleur a bien traduit le saut en goto 0x050 . Dfilez maintenantjusque ladresse 0x850. vous voyez alors la seconde partie de notre programme.

  • 31

    4.4 Evitons le pige

    Nous allons encore une fois modifier notre programme en remplaant la ligne

    org 0x850 ; adresse de la suite du programme

    par

    org 0x7FF ; adresse de la suite du programme

    Nous allons donc sauter juste avant la limite de la page, ce qui fait que la premireinstruction suivant ltiquette saut2 sera en page 0, tandis que la suite du programme seraen page 1. Nous nous trouvons donc au lieu de dbordement de page dun programme.

    Recompilons notre programme et analysons la fentre des rsultats. Nous constatons alorsquil ny a plus quun seul warning, correspondant au second saut. Ceci est logique, carltiquette saut2 est maintenant situe dans la mme page (0) que le premier goto .

    Faisons donc tourner notre programme en pas--pas. Il semble maintenant fonctionnertout fait correctement. Quel est donc ce mystre ?

    En fait, comme toujours, ce nest que pure logique. Il y a 3 phases distinguer dans lefonctionnement de ce petit bout de code.

    - Le premier saut (goto saut1) seffectue sans problme, puisque ladresse de destination(0x7FF) est situe dans la page 0, les bits 3 et 4 de PCLATH tant 0, ladresse dedestination obtenue est bien 0x7FF

    - Ensuite, en avanant en pas pas, on passe la page2. Notez en passant 2 choses. PCL estremis 0, ce qui est logique, et PCLATH voit son contenu inchang. Cest ici quil ne fautpas tomber dans le pige :

  • 32

    LE REGISTRE PCLATH NEST JAMAIS MODIFIE AUTOMATIQUEMENT PAR LEPROGRAMME.

    Cest lutilisateur seul de procder sa modification. Mais PCLATH nest utilis quepour les sauts directs, PAS pour le droulement du programme. Si vous regardez en effet leschma-bloc du 16F876, vous constatez que le compteur de programme a une capacit de 13bits, donc ne pose aucun problme pour le droulement squentiel du prog