Vous êtes sur la page 1sur 77

1

MICROCONTROLEURS
Famille Mid-Range de Microchip

LE PIC 16F876/877
A. Oumnad

SOMMAIRE
I II Introduction .............................................................................................................5 I.1 Les PICs de Microchip ........................................................................................... 6 Les lments de base du PIC 16F876/877 .............................................................7 II.1 L'Horloge ............................................................................................................. 7 II.2 L'ALU et laccumulateur W ..................................................................................... 8 II.3 Organisation de la mmoire RAM ........................................................................... 8 II.3.1 Accs la RAM par adressage DIRECT ................................................................ 8 II.3.2 Accs la RAM par ladressage INDIRECT ......................................................... 10 II.4 Quelques registres de configuration et leurs bits.................................................... 11 II.5 Les instructions du 16F876/877............................................................................ 12 II.5.1 Les instructions orientes Registre ............................................................... 12 II.5.2 Les instructions orientes bits ..................................................................... 12 II.5.3 Les instructions oprant sur une constante ........................................................ 12 II.5.4 Les instructions de saut et appel de procdures ................................................. 12 II.5.5 Le jeu d'instructions ........................................................................................ 13 II.5.6 Les paramtres des instructions agissant sur registre ......................................... 14 II.5.7 Les paramtres des instructions agissant sur bit ................................................ 14 II.5.8 Les instructions MOVWF et MOVF ..................................................................... 14 II.5.9 Les instructions btfss et btfsc ........................................................................... 15 II.5.10 Les instructions incfsz et decfsz ........................................................................ 15 II.5.11 Linstruction goto ............................................................................................ 15 II.5.12 Linstruction call .............................................................................................. 16 II.5.13 Les indicateur dtat (drapeaux) ....................................................................... 17

II.5.13.1
II.6

Les indicateurs, la soustraction et la comparaison ....................................... 17

Les directives de l'assembleur MPASM .................................................................. 18

III Les outils de dveloppement .................................................................................22 III.1 Procdure de travail ............................................................................................ 22 III.2 Lenvironnement de dveloppement MPLAB .......................................................... 23 III.3 Structure gnrale dun programme ..................................................................... 25 III.4 Quelques exemples ............................................................................................. 26 III.4.1 Comparaison............................................................ Erreur ! Signet non dfini. III.4.2 Boucles de temporisation ................................................................................. 27

III.4.2.1 III.4.2.2 III.4.2.3

Temporisation avec une boucle ................................................................. 27 Temporisation avec 2 boucles imbriques .................................................. 28 Temporisation avec 3 boucles imbriques .................................................. 28

IV Les ports dE/S .......................................................................................................29 IV.1 Le port d' E/S PORTA .......................................................................................... 29 IV.1.1 La broche RA4 ................................................................................................ 29 IV.1.2 Les autres broches de PORTA........................................................................... 30 IV.2 Le port d' E/S PORTB .......................................................................................... 30 IV.3 Le port d' E/S PORTC .......................................................................................... 30 IV.4 Le port d' E/S PORTD .......................................................................................... 31 IV.5 Le port d' E/S PORTE .......................................................................................... 31 V Les mmoires permanentes ...................................................................................33 V.1 La mmoire EEPROM de donnes ......................................................................... 33 V.1.1 Procdure de lecture dans l'EEPROM................................................................. 34 V.1.2 Procdure d'criture dans l'EEPROM.................................................................. 34 V.2 La mmoire Programme ou mmoire flash ............................................................ 34 V.2.1 Procdure de lecture dans la mmoire programme............................................. 35 V.2.2 Procdure d'criture dan la mmoire programme ............................................... 35

3 VI Les interruptions ....................................................................................................36 VI.1 Droulement d'une interruption ........................................................................... 36 VI.2 Les sources d'interruption .................................................................................... 37 VI.3 L'interruption INT (Entre RB0 du port B) ............................................................. 37 VI.4 L'interruption RBI (RB4 A RB7 du port B) .............................................................. 37 VI.5 Les autres interruptions ....................................................................................... 37 VII Les Timers ..............................................................................................................38 VII.1 Le Timer TMR0 ................................................................................................... 38 VII.2 Le Watchdog Timer WDT (Chien de garde) .......................................................... 39 VII.3 Le Timer TMR1 ................................................................................................... 40 VII.3.1 Le mode Timer ............................................................................................... 40 VII.3.2 Le mode Compteur .......................................................................................... 40 VII.3.3 Le registre de control de T1CON ....................................................................... 41 VII.4 Les module de Comparaison/Capture CCP1 et CCP2............................................... 42 VII.4.1 Le module CCP1 .............................................................................................. 42

VII.4.1.1 VII.4.1.2 VII.4.1.3

Le mode Capture ..................................................................................... 42 Le registre de configuration CCP1CON ....................................................... 43 Le mode Comparaison .............................................................................. 43

VII.4.2 Le module CCP2 .............................................................................................. 44 VII.5 Le Timer TMR2 ................................................................................................... 45 VIII Le module de conversion A/N................................................................................48 VIII.1 Droulement dune Conversion ............................................................................ 49 VIII.2 Temps de conversion .......................................................................................... 50 VIII.3 Temps d'acquisition ............................................................................................ 50 VIII.4 Frquence d'chantillonnage................................................................................ 51 VIII.5 Valeur numrique obtenue .................................................................................. 51 VIII.6 Programmation ................................................................................................... 51 IX L'USART ..................................................................................................................52 IX.1 Mode Asynchrone ............................................................................................... 52 IX.2 Le port en transmission ....................................................................................... 52 IX.2.1 Les tapes de transmission (sans interruption, mode 8 bits) ............................... 53 IX.3 Le port en rception ............................................................................................ 54 IX.3.1 Les tapes de rception (sans interruption, mode 8 bits) .................................... 55 IX.4 La vitesse de communication ............................................................................... 55 X Le module MSSP (Master Synchronous Serial Port) .............................................56 X.1 Introduction au bus I2C ...................................................................................... 56 X.1.1 start condition................................................................................................. 57 X.1.2 Transmission d'un bit....................................................................................... 57 X.1.3 Stop condition................................................................................................. 57 X.1.4 Remarque sur le Start et le Stop condition......................................................... 58 X.1.5 L' acknowledge ............................................................................................... 58 X.1.6 L'adresse et le bit R/W..................................................................................... 58 X.2 Le module MSSP en mode I2C ............................................................................. 59 X.2.1 Transmission dun octet ................................................................................... 59 X.2.2 Rception dun octet........................................................................................ 59 X.2.3 Les registres de configuration........................................................................... 59

X.2.3.1 X.2.3.2 X.2.3.3 X.2.3.4


X.2.4

Le registre SSPSTAT :............................................................................... 60 Le registre SSPCON : ................................................................................ 60 Le registre SSPCON2 : .............................................................................. 61 Le registre SSPADD : ................................................................................ 61
MSCP en mode I2C Master ............................................................................... 61

X.2.4.1 X.2.4.2

Master en transmission :........................................................................... 62 Master en rception : ............................................................................... 64

4 X.2.5 MSCP en mode I2C Slave ................................................................................ 66

X.2.5.1 X.2.5.2 X.2.5.3 X.3.1.1


X.3.2

Slave en Rception de donnes (venant du master) .................................... 66 Slave en transmission de donnes (vers le master) ..................................... 68 Utilisation des interruptions ....................................................................... 70 Rcapitulation mode master...................................................................... 73
Le mode SPI slave........................................................................................... 74

X.3 Le module MSSP en mode SPI ............................................................................. 71 X.3.1 Le mode SPI master ........................................................................................ 72

X.3.2.1

Les chronogrammes de fonctionnement : ................................................... 74

XI Annexe : Gestion du Programme Counter, ............................................................76 XI.1 GOTO calcul : modification de la valeur de PCL .................................................... 76 XI.2 Instruction de branchement ................................................................................. 76 XII Rfrences ..............................................................................................................77

Introduction
dun microprocesseur, de la mmoire RAM, de la mmoire permanente, des interfaces dE/S //, srie (RS232,I2C, SPI ) des interfaces dE/S analogique Des Timer pour grer le temps Dautres module plus au moins sophistiqus selon la taille des C

Un microcontrleur est un composant lectronique Autonome dot :

Il 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 afin qu'il effectue une ou des tches prcises au sein d'un appareil lectronique. Mais les C rcents peuvent tre reprogramms et ceci grce leur mmoire permanente de type FLASH (do le terme flasher quelque chose) Plusieurs Constructeurs se partagent le march des microcontrleurs, citons INTEL, MOTOROLA, AMTEL, ZILOG, PHILIPS et enfin MICROCHIP avec ses PICs trs populaires qui nous intresse ici dans ce cours. 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 cours dapprendre les microcontrleurs travers une tude dtaille des microcontrleur 16F87x (x=3, 4, 6, 7) qui constitue les lments fondamentaux de la famille mid-range qui est la famille moyenne puissance de Microchip

I.1

Les PICs de Microchip

Les PICs sont des microcontrleurs architecture RISC (Reduce Instructions Construction Set), 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 PICs est subdivise en 3 grandes familles : La famille Base-Line, qui utilise des mots dinstructions de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876), et la famille High-End, qui utilise des mots de 16 bits. Les PICs sont des composants STATIQUES, Ils peuvent fonctionner avec des frquences dhorloge allant du continu jusqu une frquence max spcifique chaque circuit. Un PIC16F87604 peut fonctionner avec une horloge allant du continu jusqu 4 MHz. Nous nous limiterons dans ce document la famille Mid-Range et particulirement au PIC 16F876/877, sachant que si on a tout assimil, on pourra facilement passer une autre famille, et mme un autre microcontrleur. PIC 16F870 16F871 16F872 16F873 16F874 16F876 16F877 FLASH 2K 2K 2K 4K 4K 8K 8K RAM 128 128 128 192 192 368 368 EEPROM 64 64 64 128 128 256 256 I/O 22 33 22 22 33 22 33 A/D 5 8 5 5 8 5 8 Port // NON PSP NON NON PSP NON PSP Port Srie USART USART MSSP USART/MSSP USART/MSSP USART/MSSP USART/MSSP

Tableau I.1 : diffrents circuit de la famille 16F87X

Les lments essentiels du PIC 16F876 sont : Une mmoire programme de type EEPROM flash de 8K mots de 14 bits, Une RAM donne de 368 octets, Une mmoire EEPROM de 256 octets, Trois ports d'entre sortie, A (6 bits), B (8 bits), C (8 bits), Convertisseur Analogiques numriques 10 bits 5 canaux, USART, Port srie universel, mode asynchrone (RS232) et mode synchrone SSP, Port srie synchrone supportant I2C Trois TIMERS avec leurs Prescalers, TMR0, TMR1, 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 par mode 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

PORTE

PORTD

PORTC

PORTB

PORTA 96 registres systme 368 registres utilisateur

14 bits : config

DAC 10 bits CCP1


Capture/Comparaison

timer 0 TMR0 timer 1 TMR1 timer 2 TMR2


Chien de garde

Mmoire programme de type Flash 8 x 1024 mots de 14 bits

CCP2
Capture/Comparaison

W ALU Horloge systme EEPROM


256 octets

MSSP (I2C/SPI) USART (RS232)

WDT

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

Le port D (8 bits) et le port E (3 bits) ne sont pas disponibles sur tous les processeurs. (Voir Tableau I.1)

II
II.1

Les lments de base du PIC 16F876/877


L'Horloge

L'horloge peut tre soit interne soit externe. L'horloge interne est constitue d'un oscillateur quartz ou d'un oscillateur RC. Avec l'oscillateur Quartz, on peut avoir des frquences allant jusqu' 20 MHz selon le type de C. Le filtre passe bas (Rs, C1, C2) limite les harmoniques dus lcrtage et Rduit lamplitude de loscillation, il n'est pas obligatoire. Avec un oscillateur RC, la frquence de l'oscillation est fixe par Vdd, Rext et Cext. Elle peut varier lgrement d'un circuit l'autre. Dans certains cas, une horloge externe au microcontrleur peut tre utilise pour synchroniser le PIC sur un processus particulier. Quelque soit l'oscillateur utilis, l'horloge systme dite aussi horloge instruction est obtenue en divisant la frquence par 4. Dans la suite de ce document on utilisera le terme Fosc/4 pour dsigner l'horloge systme. Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour excuter une instruction de 1s.

II.2

L'ALU et laccumulateur W

LALU est une Unit Arithmtique et logique 8 Bits qui ralise les oprations arithmtiques et logique de base. Laccumulateur W est un registre de travail 8 bits, toutes les oprations deux oprandes passe par lui. On peut avoir : Une instruction sur un seul oprande qui est en gnral un registre situ dans la RAM Une instruction sur 2 oprandes. Dans ce cas, lun des deux oprandes est toujours laccumulateur W, lautre peut tre soit un registre soit une constante.

Pour les instructions dont un des oprandes est un registre, le rsultat peut tre rcupr soit dans laccumulateur, soit dans le registre lui-mme.

II.3

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 16F876 et 16F877, 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 :

II.3.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 copier le contenu de l'accumulateur W dans la case mmoire d'adresse 50, on utilise l'instruction MOVWF 50. Cette instruction sera code sur 14 bits, la partie adresse est code sur 7 bits ce qui va poser quelques petits problmes. En effet, 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 et RP1 et doivent tre positionns correctement avant toute instruction qui accde la RAM par ladressage direct. RP1 RP0 9 bits

La RAM apparat alors organise en 4 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 choisir un bank. La Figure II-1 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.
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 (bank 3), ensuite on utilise soit linstruction MOVWF 6Fh soit linstruction

9 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
00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h Bank 0 (00) INDF TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD (*) PORTE (*) PCLATH INTCON PIR1 PIR2 TMR1L TMR1H T1CON TMR2 T2CON SSPBUF SSPCON CCPR1L CCPR1H CCP1CON RCSTA TXREG RCREG CCPR2L CCPR2H CCP2CON ADRESH ADCON0 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh A0h Bank 1 (01) INDF OPTION_REG PCL STATUS FSR TRISA TRISB TRISC TRISD TRISE PCLATH INTCON PIE1 PIE2 PCON 100h 101h 102h 103h 104h 105h 106h 107h 108h 109h 10Ah 10Bh 10Ch 10Dh 10Eh 10Fh 110h Bank 2 (10) INDF TMR0 PCL STATUS FSR PORTB 180h 181h 182h 183h 184h 185h 186h 187h 188h 189h 18Ah 18Bh 18Ch 18Dh 18Eh 18Fh 190h Bank 3 (11) INDF OPTION_REG PCL STATUS FSR TRISB

PCLATH INTCON EEDATA EEADR EEDATH EEADRH

PCLATH INTCON EECON1 EECON2

SSPCON2 PR2 SSPADD SSPSTAT

TXSTA SPBRG

ADRESL ADCON1

6Fh 70h Zone commune 7Fh

EFh F0h

16Fh 170h

1EFh 1F0h

FFh

17Fh

1FFh

Figure II-1 : organisation de la RAM du 16F876/877

Nous allons anticiper un peu et prsenter les instructions bcf et bsf et qui permettent de positionner un bit 0 ou 1

bcf bsf

STATUS,RP0 STATUS,RP1

; place le bit RP0 0 ; place le bit RP1 1

10

II.3.2

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

Exemle : 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.

IRP

FSR

0 00 0 1F 0 20

SFR (32) GPR (96) SFR (32) GPR (80)

1 00 1 0F 1 10

SFR (16)

GPR (96)
SFR (16)

1 6F 1 80 1 8F 1 90

0 7F 0 80 0 9F 0 A0 0 EF 0 FF

GPR (96)

1 EF 1 FF

page 0

page 1

Donc 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 registre FSR complt par le bit IRP du registre STATUS INDF est la case mmoire pointe par le pointeur: IRP FSR pointeur 9 bits IRP = 0 IRP = 1 000h 0FFh 100h 1FFh page 0 page 1

11

II.4

Quelques registres de configuration et leurs bits


IRP RBPU GIE PSPIE PSPIF N.I. N.I. EEPGD CSRC SPEN WCOL GCEN SMP CSRC SPEN ADCS1 ADFM RP1 INTEDG PEIE ADIE ADIF Rserv Rserv TX9 RX9 TOUTPS3 SSPOV ACKSTAT CKE TX9 RX9 ADCS0 RP0 T0CS T0IE RCIE RCIF N.I. N.I. TXEN SREN DCxB1 T1CKPS1 TOUTPS2 SSPEN ACKDT D/A CCP1X TXEN SREN CCP2X CHS2 TO T0SE INTE TXIE TXIF EEIE EEIF SYNC CREN DCxB0 T1CKPS0 TOUTPS1 CKP ACKEN P CCP1Y SYNC CREN CCP2Y CHS1 PD PSA RBIE SSPIE SSPIF BCLIE BCLIF WRERR ADDEN CCPxM3 T1OSCEN TOUTPS0 SSPM3 RCEN S CCP1M3 ADDEN CCP2M3 CHS0 PCFG3 Z PS2 T0IF CCP1IE CCP1IF N.I. N.I. WREN BRGH FERR CCPxM2 T1SYNC TMR2ON SSPM2 PEN R/W CCP1M2 BRGH FERR CCP2M2 GO/DONE PCFG2 DC PS1 INTF TMR2IE TMR2IF N.I. N.I. WR TRMT OERR CCPxM1 TMR1CS T2CKPS1 SSPM1 RSEN UA CCP1M1 TRMT OERR CCP2M1 PCFG1 C PS0 RBIF TMR1IE TMR1IF CCP2IE CCP2IF RD TX9D RX9D CCPxM0 TMR1ON T2CKPS0 SSPM0 SEN BF CCP1M0 TX9D RX9D CCP2M0 ADON PCFG0 0001 1xxx 1111 1111 0000 000x 0000 0000 0000 0000 -r-0 0--0 -r-0 0--0 x--- x000 0000 -010 0000 000x --00 0000 --00 0000 -000 0000 0000 0000 0000 0000 0000 0000 --00 0000 0000 -010 0000 000x --00 0000 0000 00-0 0--- 0000 1111 1111

STATUS OPTION_REG INTCON PIE1 PIR1 PIE2 PIR2 EECON1 TXSTA RCSTA CCPxCON T1CON T2CON SSPCON SSPCON2 SSPSTAT CCP1CON TXSTA RCSTA CCP2CON ADCON0 ADCON1 TRISx

Tableau II.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 le bank1. Mme question pour le bank2.

12

II.5

Les instructions du 16F876/877

Tous les PICs 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 4MHz, on obtient une horloge fosc/4 = 1000000 cycles/seconde, cela nous donne une puissance de lordre de 1MIPS (1 Million d Instructions Par Seconde). Avec un quartz de 20MHz, on obtient une vitesse de traitement de 5 MIPS.

II.5.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)

II.5.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 manipul individuellement.

II.5.3 II.5.4

Les instructions oprant sur une constante Les instructions de saut et appel de procdures

Ce sont les instructions entre laccumulateur W est une constante K

Ce sont les instructions qui permettent de sauter une autre position dans le programme et de continuer lexcution du programme partir de cette position.

13

II.5.5

Le jeu d'instructions

{W,F ? d} signifie que le rsultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f INSTRUCTIONS ADDWF F,d ANDWF F,d CLRF F COMF F,d DECF F,d DECFSZ F,d INCF F,d INCFSZ F,d IORWF F,d MOVF F,d MOVWF F RLF F,d RRF F,d SUBWF F,d SWAPF F,d XORWF F,d INSTRUCTIONS BCF F,b BSF F,b BTFSC F,b BTFSS F,b INSTRUCTIONS ADDLW K ANDLW K IORLW K MOVLW K SUBLW K XORLW K OPERANT SUR REGISTRE W+F {W,F ? d} W and F {W,F ? d} Clear F Complmente F {W,F ? d} dcrmente F {W,F ? d} dcrmente F {W,F ? d} skip if 0 incrmente F {W,F ? d} incrmente F {W,F ? d} skip if 0 W or F {W,F ? d} F {W,F ? d} W F rotation gauche de F a travers C {W,F ? d} rotation droite de F a travers C {W,F ? d} FW {W,F ? d} permute les 2 quartets de F {W,F ? d} W xor F {W,F ? d} OPERANT SUR BIT RAZ du bit b du registre F RAU du bit b du registre F teste le bit b de F, si 0 saute une instruction teste le bit b de F, si 1 saute une instruction OPERANT SUR CONSTANTE W+K W W and K W W or K W K W KW W W xor K W indicateurs Cycles C,DC,Z 1 Z 1 Z 1 Z 1 Z 1 1(2) Z 1 1(2) Z 1 Z 1 1 C 1 1 C,DC,Z 1 1 Z 1

1 1 1(2) 1(2)

C,DC,Z Z Z C,DC,Z Z

1 1 1 1 1 1

AUTRES INSTRUCTIONS CLRW Clear W CLRWDT Clear Watchdoc timer CALL L Branchement un sous programme de label L GOTO L branchement la ligne de label L NOP No operation RETURN retourne d'un sous programme RETFIE Retour d'interruption RETLW K retourne d'un sous programme avec K dans W SLEEP se met en mode standby

Z TO', PD'

TO', PD'

1 1 2 2 1 2 2 2 1

14 On remarque que : Les instructions qui agissent sur un registre ou un bit dun registre contiennent toutes la lettre F dans le nom de linstruction. Ceci vient du fait que chez Microchip, la RAM est appele register File (Fichier des registres). Les instructions qui agissent sur une constante contiennent toutes la lettre L, parce que chez Microchip, on appelle Literal ce genre dadressage, chez dautres constructeurs, on parle dadressage immdiat

II.5.6

Les paramtres des instructions agissant sur registre

Pour les instructions qui agissent sur registre, le paramtre F reprsente ladresse du registre considr. Le paramtre d (destination) joue un rle important, si on prend d = 0 ou w, le rsultat de lopration sera plac dans laccumulateur W, si on prend d = 1 ou f, le rsultat de lopration sera plac dans le registre prcis par F. ADDWF 70h,1 ou ADDWF 70h,f Signifie : additionner le contenu de W avec le contenu de la case mmoire dadresse 70h et placer le rsultat dans la case mmoire 70h XORWF 35h,0 ou XORWF 35h,w Signifie : faire un ou exclusif entre W et le contenu de la case mmoire dadresse 35h et placer le rsultat dans laccumulateur W

II.5.7

Les paramtres des instructions agissant sur bit

Pour les instructions agissant sur un bit, le paramtre F indique le registre qui contient le bit modifier et le paramtre b indique le numro du bit modifier; on compte partir de zro en commenant droite
7 6 5 4 3 2 1 0

BSF

STATUS,2

; signifie : placer 1 le bit 2 (3me bit partir de la droite) du registre STATUS ; signifie : placer 0 le bit 6 (7me bit partir de la droite) du registre de la case mmoire dadresse 45h

BCF

45h,6

II.5.8

Les instructions MOVWF et MOVF


un MOVWF RAM

Ce sont les instructions les plus utilises, MOVWF permet de copier laccumulateur W dans registre (SFR ou GPR): MOVWF STATUS

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

MOVWF

55h

MOVF permet de copier le contenu dun registre (SFR ou GPR) dans laccumulateur W, le paramtre d doit tre = 0

15 MOVF MOVF STATUS,0 35h,0 ; Copier le contenu du registre STATUS dans laccumulateur W ; Copier le contenu de la case mmoire dadresse 35h dans laccumulateur W W MOVF RAM

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, comme elle positionne lindicateur Z, elle permet de tester si le contenu dun registre est gal zro

II.5.9

Les instructions btfss et btfsc

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

btfsc F,b btfss F,b exemple :

: bit test skip if clear : teste le bit b du registre F et saute linstruction suivante si le bit test est nul : bit test skip if set : teste le bit b du registre F et saute linstruction suivante si le bit test est gal 1

sublw 100 btfss STATUS,Z clrf 70h cmpf 70h,f suite du programme suite du programme

; 100 W W ; tester le bit Z du registre STATUS et sauter une ligne si Z=1 ; aprs btfss, le programme continue ici si Z=0 ; aprs btfss, le programme continue ici si Z=1

II.5.10 Les instructions incfsz et decfsz


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

Incfsz F,1 deccfsz 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. : decrement skip if Z : dcrmente le registre F et sauter une ligne si le rsultat = 0. Le paramtre 1 indique que le rsultat de la dcrmentation doit aller dans F.

II.5.11 Linstruction goto


Permet de transfrer lexcution une autre position du programme repre par une

tiquette (label)

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

bonjour

II.5.12 Linstruction call


Linstruction call permet dappeler une fonction. Une fonction est un sous programme crit la suite du programme principal. Sa premire ligne doit comporter une tiquette et elle doit se terminer par return
Programme principal

debut

Instruction Instruction Instruction Instruction Call afficher Instruction Instruction Instruction goto debut

La diffrence en call et goto est que, quant le processeur rencontre linstruction call, il sauvegarde ladresse de la ligne suivante avant daller excuter les instructions constituant la fonction. Comme a, quand il rencontre linstruction return, il sait o il doit retourner pour continuer lexcution du programme principal.

Fonction

afficher

Instruction Instruction Instruction Instruction Instruction Instruction Instruction return

17

II.5.13 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 : passe 1 quand les 4me bits gnre une retenue Ces bits peuvent tre utilis 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 du cours. STATUS IRP RP1 RP0 Z DC C

II.5.13.1

Les indicateurs, la soustraction et la comparaison

Les instructions SUBWF et SUBLW positionne les drapeaux Z et C. Remarquons seulement que la retenue B (Borrow) de la soustraction correspond C, F - W = 0 ==> F - W > 0 ==> F - W < 0 ==> Pour raliser une Z=1 C=1 C=0 Z=1 , C=1 , B=0 => pas de retenue de soustraction Z=0 , C=1 , B=0 => pas de retenue de soustraction Z=0 , C=0 , B=1 => il ya retenue de soustraction comparaison entre F et W, on fait F W et on observe Z et C ==> galit ==> F sup ou gal W ==> F infrieur W

18

II.6

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. Nous ne prsentons ici que quelques directives, pour le reste, consulter la documentation de MPASM "MPASM USER'S GUIDE".

Remarque : Je vais prsenter les directives en Majuscule, mais sachez que 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. LIST : 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=16F876, r=dec Base Prfixe Exemple (36) Dcimal D'nnn' D'36' avec r=dec, les nombres sans spcification particulire .nnn .36 seront considrs par l'assembleur comme des nombre Hexadcimal H'nn' H'24' dcimaux, sinon voir tableau ci-contre 0xnn 0x24 nnh 24h Binaire B'.' B'00100100' INCLUDE : permet d'insrer un fichier source. Par Octal O'nnn' O'44' exemple le fichier p16f876.inc contient la dfinition d'un certain nombre de constante comme les noms des registres ainsi que les noms de certains bits; INCLUDE "p16f876.inc" EQU : 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 MOVF XX ; charger dans W la constante 0x20 XX,w ; charger dans W le contenu de la case dadresse 0x20

CBLOCK/ENDC : permet de dfinir un ensemble de constantes : L'ensemble des dclarations suivantes : XX1 XX2 XX3 XX4 EQU EQU EQU EQU 0x20 0x21 0x22 0x23

peut tre remplac par CBLOCK 0x20

XX1, XX2, XX3, XX4 ENDC ORG : dfinit la position dans la mmoire programme partir de laquelle seront inscrites les instructions suivantes.

19

Fig. II.1 : Illustration de la directive ORG

#DEFINE : fonctionne un peu comme la directive EQU tout en tant un peu plus gnrale, car elle permet daffecter toute une chane une abrviation

#DEFINE

XX

0x20

; dans ce cas cest quivalent XX EQU 0x20

#DEFINE LED BCF LED

PORTB,3

; ici chaque fois que le compilateur rencontrera le mot LED, il le remplacera par PORTB,3

; teindre la LED branche sur la broche 3 de PORTB

On peu ainsi affecter une abrviation toute une instruction

#DEFINE

eteindre

bcf

PORTC,5

;affecte labrviation eteindre linstruction bcf PORTC,5 ;affecte labrviation allumer linstruction bsf PORTC,5

#DEFINE allumer allumer eteindre

bsf PORTC,5

; allume la LED branche sur la broche 5 de PORTC ; teindre la LED branche sur la broche 5 de PORTC

DE : pour dclarer des donns qui seront stocke dans l'EEPROM de donne au moment de l'implantation du programme sur le PIC

ORG 0x2100 DE "Programmer un PIC, rien de plus simple", 70, 'Z'


DT : pour dclarer un tableau RETLW
DT 10,35h,Hello RETLW 10 RETLW 35h RETLW 'H' RETLW 'e' RETLW l RETLW l RETLW o ; sera remplace par la suite dinstructions :

END : indique la fin du programme

20

__CONFIG : permet de dfinir les 14 bits (fusibles ou switch) de configuration qui seront copis dans l'EEPROM de configuration (adresse 2007h) lors de l'implantation du programme dans le PIC.
CP0 DEBUG WRT CPD LVP BODEN CP1 CP0 PWRTE WDTE F0SC1 F0SC0

CP1

CP1/CP0 : bits 13/12 ; Dterminent quelle zone de la mmoire programme sera protge contre la lecture externe (via ICSP) ou l'criture par programme conformment l'tat du bit 9 (WRT). On peut choisir de protger la totalit de la mmoire ou seulement une partie. Les diffrentes zones pouvant tre protges sont les suivantes : 1 1 : Aucune protection (_CP_OFF) 1 0 : Protection de la zone 0x1F00 0x1FFF (_CP_UPPER_256) 0 1 : Protection de la zone 0x1000 0x1FFF (_CP_HALF) 0 0 : Protection de lintgralit de la mmoire (_CP_ALL) DEBUG : bit 11 : Debuggage sur circuit. Permet de ddicacer RB7 et RB6 la communication 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) WRT : bit 9 : Autorisation dcriture en flash 1 : 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 de donnes. 1 : mmoire EEPROM non protge (_CPD_OFF) 0 : mmoire EEPROM protge contre la lecture externe via ICSP (_CPD_ON) LVP : bit 7 : Utilisation de la pin RB3/PGM comme broche de programmation 5V 1 : 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) BODEN : bit 6 : provoque le reset du PIC en cas de chute de tension (surveillance de la tension dalimentation) 1 : En service (_BODEN_ON) 0 : hors service (_BODEN_OFF) PWRTE : bit 3 : Dlai de dmarrage la mise en service. Attention, est automatiquement mis 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 : Validation du Watchdog timer 1 : WDT en service (_WDT_ON) 0 : WDT hors service (_WDT_OFF) FOSC1/FOSC0 : bits 1/0 : slection du type doscillateur 11 : Oscillateur de type RC (_RC_OSC) (3K < R < 100k, C > 20 pF) 10 : Oscillateur haute vitesse (_HS_OSC) (4 Mhz 20 Mhz) 01 : Oscillateur basse vitesse (_XT_OSC) (200 kHz 4 Mhz) 00 : Oscillateur faible consommation (_LP_OSC) (32 k 200 kHz)

21

Voici 3 exemples dutilisation : __CONFIG B'11111100111001' __CONFIG H'3F39' __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC

Remarque :
Attention, les microcontrleurs avec lextension A comme 16F876A ou 16F877A ont une disposition des bits de configuration lgrement diffrente, consultez le datasheet.

22

III Les outils de dveloppement


Loutil de dveloppement principal est lenvironnement de dveloppement intgr MPLAB fournit gratuitement par Microchip

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 Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le rsultat est un fichier excutable avec l'extension .hex contenant une suite d'instruction comprhensible par le pic. Transplanter 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.

Microchip propose gratuitement l'outil de dveloppement MPLAB qui regroupe l'diteur de texte, le compilateur MPASM, un outil de simulation et le logiciel de programmation. Le programmateur lui-mme, n'est malheureusement pas gratuit. Pour ce qui nous concerne, nous utiliseront MPLAB pour crire, compiler et ventuellement simuler nos programmes, ensuite, pour implanter les programmes dans la mmoire flash du PIC, nous utiliserons un programmateur fait maison que nous piloteront par le logiciel ICPROG, les deux sont disponibles gratuitement sur le Web.

Internet est riche en informations sur ce sujet. Vous trouverez une rubrique sur les programmateurs de PIC sur mon site http://z.oumnad.123.fr

23

III.2 Lenvironnement de dveloppement MPLAB


MPLAB-IDE peut tre tlcharg sur le site Web http://www.microchip.com Aprs l'installation, lancer MPLAB et faire les config ci-dessous : Configure Select Device PIC16F876 ou PIC16F877

Nous allons raliser un tout petit programme sans grand intrt pour voir la procdure de fonctionnement (avec MPLAB 6.30) Ouvrir une nouvelle fentre (de l'diteur) pour commencer crire un programme : file new ou cliquez sur l'icne feuille blanche Taper le petit programme ci-dessous dans la fentre qui vient de s'ouvrir. Ce programme incrmente sans fin la position mmoire (RAM) 70H incf 70h,1 goto looop end save ) ce programme dans la directory de votre chois sous le nom

loop

Sauvegarder (file

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)

Evidemment, le label loop dfinit dans la ligne prcdente prend seulement deux o. Corrigez et
recommencez. Cette fois a a l'air d'aller. On peut vrifier que le compilateur a cre le fichier bidon.hex dans la mme directory o se trouve bidon.asm. Les fichiers bidon.cod, bidon.err et bidon.lst ne nous servent rien pour l'instant on peut les dtruire. Nous pouvons maintenant excuter notre programme en simulation pour voir s'il ralise bien la tache demande : Pour faire apparatre la barre d'outil du simulateur :

Debugger Select tool MPLAB SIM


Ouvrez la fentre qui visualise la mmoire RAM : view mmoire 70h

FileRegisters. et reprer la case

Excuter maintenant 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 cliquer sur le bouton halt , pour arrter, il faut

Pour plus de dtail, consulter le manuel d'utilisation de MPLAB

24

Modifiez maintenant la case 70h par la case 190h, compilez, simulez et tirer les conclusions

25

III.3 Structure gnrale dun programme


;***************************************************************** ; Ce programme crit les lettres A, B, C, D dans les positions suivantes de la RAM ; A => 20h B => A0h C => 110h D => 190h ;***************************************************************** list p=16f877 , r=dec include <p16f877.inc> __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC bcf bcf movlw movwf bsf movlw movwf bcf bsf movlw movwf bsf movlw movwf end Compilons le programme avec (project quikbuild) et MPLAB visualisons la mmoire programme (view program memory) , on obtient la fentre ci-dessus. STATUS,RP0 STATUS,RP1 'A' 20h STATUS,RP0 'B' 0xA0 STATUS,RP0 STATUS,RP1 'C' 110h STATUS,RP0 'D' 190h ;bank 0 ;bank 0

;bank 1

;bank 2 ;bank 2

;bank 3

Observations :
Comme il n'y a pas d'interruption, on ne s'est pas souci de l'implantation du programme dans la mmoire programme (directive ORG). on remarque sur la fentre que l'implantation du programme commence l'adresse 0. La colonne de droite de cette fentre obtenue par cross-assemblage du code machine n'utilise pas les noms des registres mais leurs adresses. Si nous avons pu utiliser les instruction comme : bcf STATUS,RP0, au lieu de bcf 0x3,0x5 c'est parce que le fichier p16f876.inc que nous avons inclus contient les dclarations STATUS EQU 0x3 et RP0 EQU 0x5

26

On remarque aussi que l'instruction movwf 190h a t remplace par movwf 0x10, c'est tout fait normal car on ne retient que 7 bits de l'adresse 190h = 0001 1001 0000 ce qui donne 001 0000 = 10h. Rassurons nous, c'est quand mme l'adresse 190h qui sera adresse l'adresse 001 0000 sera complte par RP1,RP0=11 (bank 3) et on obtient 11001 0000 = 190h

III.4 Quelques exemples


Exercice 5) : Accs la RAM par l'adressage direct
Donner le programme qui copie : 35 dans la position 20h, -5 dans la position 110h, 'A' dans la position A0h 35h dans la position 190h

Exercice 6) : Accs la RAM par l'adressage indirect


Donner le programme qui copie l'alphabet majuscule dans la RAM partir de la position 190h

Exercice 7) : Soustraction
Donner le programme qui : a) soustrait la constante 33 de l'accumulateur W (W-33) b) qui soustrait le contenu de la case mmoire 70h de l'accumulateur W avec le 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 si [6Fh] = [EFh] copier la lettre si [6Fh] > [EFh] copier la lettre si [6Fh] < [EFh] copier la lettre 6Fh et EFh, E dans la case mmoire 16Fh S dans la case mmoire 16Fh I dans la case mmoire 16Fh

27

III.4.1 Boucles de temporisation


Il arrive souvent qu'on dsire introduire des temporisations pendant l'excution d'un programme. Le PIC dispose de 3 timers permettant de grer le temps avec prcision. Nous tudierons ces modules plus tard, pour l'instant regardons comment on peut 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 atteint 0. Connaissant le temps d'excution de chaque instruction, on peut calculer le temps que mettra le processeur terminer la boucle de dcrmentation

III.4.1.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 movwf decfsz goto 4 70h 70h,f ici

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 + (W-1)*3 + 2 = 3*W + 1 cycles

La valeur max que l'on peut donner W est = 0 = 256, ce qui donne une temporisation max de 769 cycles. Avec un quartz = fosc = 4 Mhz, 1 cycle = fosc/4 = 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 tempo1: t1: ; il faut placer une valeur dans W avant d'appeler cette fonction movwf AN1 decfsz AN1,f goto t1 return

Cette fonction doit tre place aprs le programme principal, et on l'appelle avec l'instruction

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

return, ce qui donne


T1 = 3 W + 5 cycles Le maximum est obtenu pour N1 =256, soit T1max = 773 s = 0.77 ms

28

III.4.1.2

Temporisation avec 2 boucles imbriques

La boucle intrieure (N1) se fait toujours 256 fois. La boucle extrieure se fait N2 fois. Cest N2 qui constituera le paramtre de la fonction, Il faut le placer dans W avant de lappeler. tempo2 : t2 : ; il faut dfinir W dans le programme principal movwf AN2 decfsz AN1,f goto t2 decfsz AN2,f goto t2 return T2 = 2 + 2 + [W(t1+3)-1] + 2 avec t1=256*3-1=767 on obtient :

T2 = 770 W +5 cycles Le maximum est obtenu pour N2 =256, soit T2max = 197125 s = 0.197 s

III.4.1.3

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 : t3 :

;Il faut dfinir W dans le programme principal movwf AN3 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 Le maximum est obtenu pour N3 =256, soit T3max = 50463237 s = 50.46 s

Remarque : La prcision de ces fonctions peut tre amliore en y insrant des instructions nop,
dans ce cas il faut revoir les formules. On verra plus tard comment on peut faire des temporisations laide des timers.

29

IV

Les ports dE/S

Le PIC 16F877 dispose de 33 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 = Bit k de TRISx =

0 1

broche k de PORTx = broche k de PORTx =

SORTIE ENTRE

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

IV.1 Le port d' E/S PORTA


Le port A dsign par PORTA est un port de 6 bits (RA0 RA5). RA6 et RA7 ne sont pas accessibles. La configuration de direction se fait l'aide du registre TRISA, positionner un bit de TRISA 1 configure la broche correspondante de PORTA en entr et inversement. Au dpart toutes les broches sont configures en entre

IV.1.1

La broche RA4

V'dd (8.5Vmax) 1k

En entre, la broche RA4 peut tre utilise soit comme E/S numrique normale, soit comme entre horloge pour le Timer TMR0 En sortie, RA4 est une E/S drain ouvert, pour l'utiliser comme sortie logique, il faut ajouter une rsistance de pull-up externe. Le schma (Fig. IV.1) 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.

RA4

Fig. IV.1 : rsistance de pull-up

Si on veut utiliser RA4 pour allumer une LED, on peut utiliser le schma de Fig. IV.2. Il faut juste remarquer que la logique est inverse, si on envoie 0 sur RA4, l'interrupteur se ferme et 1k la LED s'allume. Si on envoie 1, l'interrupteur s'ouvre et la LED s'teint. Le schma illustr sur Fig. IV.3 peut aussi tre utilis. La logique n'est pas inverse mais il demande une prcaution particulire. Il ne faut LED pas positionner la sortie RA4 l'aide d'une instruction qui ralise une opration sur l'tat actuel du port; genre IORWF, ANDWF, XORWF ou RA4 COMF, ADDWF, INCF Ces instructions ralisent Vdd une lecture-criture en commencent par lire l'tat du port pour ensuite faire une opration dessus. Fig. IV.2 : LED sur RA4 Or, (sur Fig. IV.3) si la sortie tait au niveau 1k haut, l'interrupteur est ouvert, la LED est allume RA4 et elle impose une tension de l'ordre de 1.5V qui sera considre ( tort) comme un niveau bas lors de la lecture du port par les instructions LED prcites. La solution est d'utiliser des instructions qui positionnent le PORT sans tenir compte de son tat courant comme MOVWF, BSF ou BCF

Vdd

Fig. IV.3 : LED sur RA4

30

IV.1.2

Les autres broches de PORTA

Les autres broches (RA0, RA1, RA2, RA3 et RA5) peuvent tre utilises soit comme E/S numriques soit comme entres analogiques. Au RESET, ces E/S sont configures en entres analogiques. Pour les utiliser en SORTIES NUMERIQUES, il suffit de les configurer en sortie l'aide du registre de direction TRISA. Pour les utiliser en ENTRES NUMERIQUES, il faut les configurer en entre l'aide de TRISA, en plus il faut les configurer en numrique en plaant la valeur '00000110' dans le registre ADCON1, Pour les utiliser en ENTRE ANALOGIQUE, voir chapitre sur le convertisseur Analogique numrique.

Quelque soit le mode (Analogique ou Numrique), il faut utiliser le registre TRISA pour configurer la direction des E/S : Bit i de TRISA = 0 Bit i de TRISA = 1 bit i de PORTA configur en sortie bit i de PORTA configur en entre

IV.2 Le port d' E/S PORTB


Le port B dsign par PORTB est un port bidirectionnel de 8 bits (RB0 RB7). Toutes les broches sont compatibles TTL. La configuration de direction se fait l'aide du registre TRISB, positionner un bit de TRISB 1 configure la broche correspondante de PORTB en entr et inversement. Au dpart toutes les broches sont configures en entre. En entre, la ligne RB0 appele aussi INT peut dclencher linterruption externe INT. En entre, une quelconque des lignes RB4 RB7 peut dclencher l'interruption RBI. Nous reviendrons l-dessus dans le paragraphe rserv aux interruptions.

IV.3 Le port d' E/S PORTC


Le port C dsign par PORTC est un port bidirectionnel de 8 bits (RC0 RC7). Toutes les broches sont compatibles TTL. La configuration de direction se fait l'aide du registre TRISC, positionner un bit de TRISC 1 configure la broche correspondante de PORTC en entr et inversement. Au dpart toutes les broches sont configures en entre. Toutes les broches du port C peuvent tre utilises soit comme E/S normales soit comme broches d'accs diffrents modules comme le timer 1, les modules de comparaison et de capture CCP1/2, le timer 2, le port I2C ou le port srie, ceci sera prcis au moment de l'tude de chacun de ces priphriques. Pour lutilisation dune broche du port C comme E/S normale, il faut sassurer quelle na pas t affecte un de ces modules. Par exemple, si TIMER1 est valid, il peut utiliser les broches RC0 et RC1 selon sa configuration.

31

IV.4 Le port d' E/S PORTD


Le port D dsign par PORTD est un port bidirectionnel de 8 bits (RD0 RD7). Toutes les broches sont compatibles TTL et ont la fonction trigger de Schmitt en entre. Chaque broche et configurable en entre ou en sortie laide du registre TRISD. Pour configurer une broche en entre, on positionne le bit correspondant dans TRISD 1 et inversement. PORTD peut tre utilis dans un mode particulier appel parallel slave port, pour cela il faut placer le bit PSPMODE (bit 4) de TRISE 1. Dans ce cas les 3 bits de PORTE deviennent les entres de control de ce port (RE, WE et CS) Pour utiliser PORTD en mode normal, il faut placer le bit PSPMODE de TRISE 0

IV.5 Le port d' E/S PORTE


PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables en entre ou en sortie laide des bits 0, 1 ou 2 du registre TRISE. Les 3 bits de PORTE peuvent tre utiliss soit comme E/S numrique soit comme entres analogiques du CAN. La configuration se fait laide du registre ADCON1. Si le bit PSPMODE de TRISE est plac 1, Les trois bits de PORTE deviennent les entres de control du PORTD qui (dans ce cas) fonctionne en mode parallel Slave mode A la mise sous tension (RESET), les 3 broches de PORTE sont configures comme entres analogiques. Pour utiliser les broches de PORTE en E/S numriques normales : - Placer 06h dans ADCON1 - Placer le bit PSPMODE de TRISE 0

IV.6 Situation au dmarrage


Au dmarrage : o Tous les ports sont configurs en entre o PORTD et PORTE sont configurs en mode normal o PORTA et PORTE sont configurs en analogique

Exercice 10) : Clignoter une LED


Donner le programme qui fait clignoter une LED branche sur RA3 avec une temporisation voisine de 0.5s. Sachant que le PIC est dot d'un quartz de 4 MHz, la temporisation sera ralise l'aide de boucles imbriques

Exercice 11) :
On dispose dun PIC cadenc par un quartz de 4MHz. Donner le Programme qui utilise les instructions bsf, bcf et nop pour gnrer le signal suivant sur la sortie RB0

Exercice 12) :
Programme qui surveille l'tat de l'entre RA1 : - Si RA1 = 0 faire RA3 = 1, PORTB = 00001111 - Si RA1 = 1 faire RA3 = 0, PORTB = 11110000

32

Exercice 13) :
Programme qui : Recopie W sur PORTB Gnre une impulsion (STROBE) de largeur 3 cycles machines sur RC4 Attend une impulsion (ACK) sur RA2

Exercice 14) : compteur dimpulsions


Programme qui : Allume la LED branche sur RB3 Compte 150 impulsions sur l'entre RA4 (la case mmoire 70h servira de compteur) Eteint la LED branche sur RB3

33

Les mmoires permanentes

Le PIC 16F877 dispose de 2 mmoires permanentes. La mmoire EEPROM PROGRAMME de capacit 8k mots de 14 bits et la mmoire EEPROM DE DONNES de capacit 256 octets. On dispose de deux mthodes pour crire dans ces mmoires. La premire consiste flasher le PIC avec l'excutable (.hex). Les instructions sont flashs dans la EEPROM programme et les donne sont flashs dans la EEPROM de donnes. Le flashage se fait laide dun programmeur et le soft qui va avec. (voir les directive DE et ORG dans ce cours et dautres directives comme DA, DW dans le manuel dutilisation de MPASM) La deuxime mthode consiste accder aux mmoires EEPROM partir du programme durant la phase d'excution de ce dernier. Cest ce que nous allons dtailler dans les paragraphes ci-dessous.

V.1

La mmoire EEPROM de donnes

Le PIC 16F876/877 dispose de 256 octets de mmoire EEPROM de donne. Son implantation physique commence la position dadresse absolue 2100h. Mais pour y accder partir des programmes utilisateur on utilise ladressage relatif par rapport la premire position. La premire position aura ladresse 0, la deuxime aura ladresse 1. . . et la dernire aura ladresse 255. Pour accder la EEPROM, on utilise 4 registres particuliers : EEADR : registre dadresse (relative) EEDATA : registre de donne EECON1 : registre de control (bank 2) (bank 2) (bank 3) (bank 3) WRERR WREN WR RD

EECON2 : 2me registre de control EEPGD

Le registre EECON1 :

EEPGD : Accs la mmoire EEPROP ou la mmoire Programme 0 : EEPROM de donnes 1 : Mmoire programme (flash) WRERR : Erreur d'criture (indicateur) 0 : Pas d'erreur 1 : Une erreur s'est produite WREN : Validation de l'criture dans l'EEPROM 0 : Ecriture interdite 1 : Ecriture autorise WR : Write Enable. Ce bit doit tre mis 1 pour dmarrer l'criture d'un octet. Il est remis zro automatiquement la fin de l'criture. Ce bit ne peut pas tre mis zro par une instruction. : Read Enable. Ce bit doit tre mis 1 pour dmarrer la lecture d'un octet. Il est remis zro automatiquement la fin de la lecture. Ce bit ne peut pas tre mis zro par une instruction

RD

34

V.1.1

Procdure de lecture dans l'EEPROM

Pour lire le contenu dune position de la mmoire EEPROM, on place ladresse dans le registre EEADR, on lance lopration de lecture laide du bit RD du registre EECON1, la donne dsire est tout de suite disponible dans le registre EEDATA : 1) Mettre le bit EEPGD 0 pour pointer sur l'EEPROM de donne 2) Placer ladresse relative de la position lire dans EEADR 3) Mettre le bit RD 1 pour dmarrer la lecture. Ce bit revient 0 automatiquement tout de suite aprs le transfert de la donne vers EEDATA, (moins d'un cycle) 4) Traiter la donne disponible dans EEDATA 5) Recommencer au point 2 si on a d'autres donnes lire,

V.1.2

Procdure d'criture dans l'EEPROM

Pour crire une donne dans une position de la mmoire EEPROM, on place ladresse dans le registre EEADR, la donne dans le registre EEDATA, on lance lopration dcriture laide du bit WR de EECON1 et du registre EECON2. La donne prsente dans EEDATA est alors copie dans la EEPROM mais cette opration prend 10 ms. A la fin de l'criture le bit WR revient zro automatiquement, le drapeau EEIF est lev ce qui peut dclencher l'interruption EEI si elle a t valide auparavant : 1) 2) 3) 4) 5) 6) Interdire les interruptions (si elles ont t valides avant : bit INTCON.GIE) Mettre le bit EEPGD 0 pour pointer sur l'EEPROM de donne Positionner le bit WREN pour valider l'criture dans l'EEPROM Placer ladresse relative de la position crire dans EEADR Placer la donne crire dans le registre EEDATA - Ecrire 55h dans EECON2 (commande de process hardwares) - Ecrire AAh dans EECON2 (commandes de process hardwares) - Positionner le bit WR pour dmarrer l'opration d'criture, et attendre quil revienne 0 Recommencer au point (4) si on a d'autres donnes crire,

7)

Remarque : Les bits WREN et WR ne peuvent tre positionn dans la mme instruction. Le bit
WR ne peut tre positionn que si le bit WREN a t positionn avant.

Exercice 15)
Programme qui crit l'alphabet majuscule dans la mmoire EEPROM de donnes partir de la position 20h.

Exercice 16) EEPROM-D vers RAM


Programme qui utilise la directive DE pour crire la chane "BONJOUR CHER AMI" dans la EEPROM de donnes partir de la position 2140h. Le programme doit ensuite lire ces caractres (1 par 1) dans la EEPROM et les copier dans la RAM partir de la position 110h

V.2

La mmoire Programme ou mmoire flash

Cette mmoire de 8 x 1024 mots de 14 bits sert stocker le programme, mais elle est accessible par programme et peut donc tre utilise comme une extension de la mmoire EEPROM de donnes. Elle est non volatile (flash) et reprogrammable souhait. Chaque position de 14 bits contient une instruction. L'emplacement du programme peut se situer n'importe quel endroit de la mmoire. Cependant il faut savoir que suite un RESET ou lors de la mise sous tension, le PIC commence l'excution l'adresse 0000H. De plus, lorsqu'il y a une interruption, le PIC va l'adresse 0004H. Il est donc ncessaire de bien organiser le programme si celui-ci utilise des interruptions.

35 Le programme excutable par le PIC est implant dans la mmoire flash l'aide d'un programmateur (hard+soft) sur lequel nous reviendrons dans la suite de ce document. L'accs la mmoire flash par les instructions du programme se fait de la mme faon que l'accs l'EEPROM de donnes, l'exception des points suivant : Le bit EEPGD doit tre plac 1 Le registre EEADR (8 bits) seul ne suffit pas adresser les 8k de mmoire programme, on lui accole le registre EEADRH dans lequel il faut crire la partie haute de l'adresse. On obtient ainsi les 13 bits ncessaires pour adresser 8K. Le registre EEDATA (8 bits) seul ne suffit pas pour contenir les 14 bits contenus dans une position de la mmoire programme. On lui accole le registre EEDATH qui contiendra les 6 bits suprieurs. Il faut insrer deux instructions NOP dans les cycles de lecture/criture. Pendant la phase d'criture, le processeur arrte l'excution des instructions. Il n'est donc pas ncessaire d'attendre la fin de l'criture pour continuer car ceci se fait automatiquement, la fin de l'criture, l'excution reprend l'instruction qui suit le 2me NOP,

V.2.1
1) 2) 3) 4) 5) 6)

Procdure de lecture dans la mmoire programme

Mettre le bit EEPGD 1 pour pointer sur la mmoire programme Placer ladresse de la position lire dans EEADRH:EEADR Mettre le bit RD 1 pour dmarrer la lecture Attendre 2 cycles machine (2 instructions NOP) Lire le contenu des registres EEDATH:EEDATA Recommencer au point 2) si on a d'autres donnes lire

V.2.2
1) 2) 3) 4) 5) 6)

Procdure d'criture dan la mmoire programme

Interdire les interruptions (si elles ont t valides avant) Mettre le bit EEPGD 1 pour pointer sur la mmoire programme Positionner le bit WREN pour valider l'criture dans la mmoire programme Placer ladresse de la position crire dans EEADRH:EEADR Placer la donne crire dans le registre EEDATH:EEDATA - Ecrire 55h dans EECON2 (commande de process hardwares) - Ecrire AAh dans EECON2 (commandes de process hardwares) - Positionner le bit WR pour dmarrer l'opration d'criture Excuter 2 instructions NOP Recommencer au point 3 si on a d'autres donnes crire

7) 8)

Remarque : aprs le point (6), a ne sert rien dattendre que WR passe 0 pour dtecter la fin de l'criture. Le processeur arrte l'excution du programme pendant la phase d'criture dans la mmoire programme. La boucle de scrutation ne sera excute qu'aprs la fin de l'criture ce qui la rend tout fait inutile. Il suffit de mettre deux instructions NOP avant de continuer. Exercice 17) Mem-Prog vers RAM
Programme qui lit 20 positions de la mmoire programme dbutant la position 12FAh et les copie dans la RAM partir de la position 110h. Attention : Le contenu dune position mmoire programme permet de remplir 2 positions de la RAM. Le dbordement de EEADR naffecte pas EEADRH

36

VI

Les interruptions

Une interruption provoque larrt du programme principal pour aller excuter une procdure d'interruption. A la fin de cette procdure, le microcontrleur reprend le programme principal lendroit o il la laiss. A chaque interruption sont associs deux bits, un bit de validation et un drapeau. Le premier permet d'autoriser ou non l'interruption, le second permet au programmeur de savoir de quelle interruption il s'agit. Sur le 16F876/877, l'es interruptions sont classes en deux catgories, les interruptions primaires et les interruptions priphriques. Elles sont gres par les registres : INTCON PIE1 (bk1) PIR1 (bk0) PIE2 (bk0) PIR2 (bk1) OPTION_REG(bk1) GIE PSPIE PSPIF PEIE T0IE ADIE RCIE ADIF RCIF INTEDG INTE TXIE TXIF EEIE EEIF RBIE SSPIE SSPIF BCLIE BCLIF T0IF CCP1IE CCP1IF INTF TMR2IE TMR2IF RBIF TMR1IE TMR1IF CCP2IE CCP2IF

Toutes les interruptions peuvent tre valides/interdites par le bit INTCON.GIE Toutes les interruptions priphriques peuvent tre valides/interdites par le bit INTCON.PEIE Chaque interruption peut tre valide/interdite par son bit de validation individuel En rsum, pour valider une interruption priphrique (par exemple), il faut positionner 3 bits, GIE, PEIE et le bit individuel de linterruption.

VI.1 Droulement d'une interruption


Lorsque positionn dclenche : d'interruption l'vnement dclencheur 1 (lev). Si l'interruption le programme arrte ce qui se trouve l'adresse 4 d'une interruption intervient, alors son drapeau est a t valide (bits de validations = 1), elle est alors qu'il est en train de faire et va excuter la procdure en excutant les tapes suivantes :

l'adresse contenue dans le PC (Program Counter) est sauvegarde dans la pile, puis remplace par la valeur 0004 (adresse de la routine d'interruption). Le bit GIE est plac "0" pour inhiber toutes les interruptions (afin que le PIC ne soit pas drang pendant l'excution de la procdure d'interruption). A la fin de la procdure d'interruption (instruction RETFIE) : le bit GIE est remis 1 (autorisant ainsi un autre vnement) le contenu du PC est recharg partir de la pile ce qui permet au programme de reprendre l o il s'est arrt

Deux remarques importantes sont faire : Le drapeau reste ltat haut mme aprs le traitement de linterruption. Par consquent, il faut toujours le remettre "0" la fin de la routine d'interruption sinon l'interruption sera dclenche de nouveau juste aprs l'instruction RETFIE Seul le PC est empil automatiquement. Si cela est ncessaire, les registres W et STATUS doivent tre sauvegards en RAM puis restaurs la fin de la routine pour que le microcontrleur puisse reprendre le programme principal dans les mmes conditions o il l'a laiss.

37

VI.2 Les sources d'interruption


Interruption : Source dinterruption T0I : Dbordement Timer 0 INT : Front sur RB0/INT RBI : Front sur RB4-RB7 ADI : Fin de conversion A/N RCI : Un Octet est reu sur l'USART TXI : Fin transmission d'un octet sur l'USART SSPI : Caractre mis/reu sur port srie synchrone TMR1I : Dbordement de Timer 1 TMR2I :Timer 2 a atteint la valeur programme PSPI : Lecture/criture termine sur Port parallle (16F877) CCP1I : Capture/comparaison de TMR1 avec module CCP1 CCP2I : Capture/comparaison de TMR1 avec module CCP2 EEI : Fin d'criture en EEPROM BCLI : Collision sur bus SSP en mode I2C Validation INTCON,T0IE INTCON,INTE INTCON,RBIE PIE1,ADIE PIE1,RCIE PIE1,TXIE PIE1,SSPIE PIE1,TMR1IE PIE1,TMR2IE PIE1,PSPIE PIE1,CCP1IE PIE2,CCP2IE PIE2,EEIE PIE2,BCLIE Flag INTCON,T0IF INTCON,INTF INTCON,RBIF PIR1,ADIF PIR1,RCIF PIR1,TXIF PIR1,SSPIF PIR1,TMR1IF PIR1,TMR2IF PIR1,PSPIF PIR1,CCP1IF PIR2,CCP2IF PIR2,EEIF PIR2.BCLIF PEIE non non non oui oui oui oui oui oui oui oui oui oui oui

VI.3 L'interruption INT (Entre RB0 du port B)


Cette interruption est provoque par un changement d'tat sur l'entre RB0 du port B quand elle est programme en entre. En plus de son bit de validation INTE et son drapeau INTF, elle est gre aussi par le bit INTEDG (OPTION_REG) qui dtermine le front sur lequel l'interruption se dclenche, 1=montant, 0=descendant

VI.4 L'interruption RBI (RB4 A RB7 du port B)


Cette interruption est provoque par un changement d'tat sur l'une des entres RB4 RB7 du port B, Le front n'a pas d'importance. Les bits associs sont RBIE (validation) et RBIF (drapeau). ATTENTION : Le drapeau RBIF ne peut tre remis zro sans la lecture pralable de PORTB (MOVF PORTB,w). Si on ne veut pas modifier le contenu de W, on peut copier PORTB sur luimme (MOVF PORTB,f).

VI.5 Les autres interruptions


Les autres interruptions seront abordes au moment de l'tude des modules qui les dclenchent.

Exercice 18) (int.asm)


Programme qui utilise linterruption INT comme suit : Chaque fois que lentre RB0 passe de 1 0, la LED branche sur RB1 clignote 5 fois au rythme de la 0.6 seconde. Le PIC est cadenc par un quartz de 8 MHz

Exercice 19) (div-freg-rbi.asm)


Ecrire un programme qui ralise une division de frquence par 5. Le signal d'entre est appliqu sur l'entre RB4. Le signal de sortie est gnr sur la sortie RB1. On utilisera l'interruption RBI pour dtecter les transitions du signal d'entre.

38

VII Les Timers


VII.1 Le Timer TMR0
Cest un compteur 8 bits ayant les caractristiques suivantes : Il est incrment en permanence soit par lhorloge interne Fosc/4 (mode timer) soit par une horloge externe applique la broche RA4 du port A (mode compteur). Le choix de l'horloge se fait l'aide du bit T0CS du registre OPTION_REG o T0CS = 0 horloge interne o T0CS = 1 horloge externe applique RA4 Dans le cas de l'horloge externe, Le bit T0SE du registre OPTION_REG permet de choisir le front sur lequel le TIMER s'incrmente. PS2 PS1 PS0 Div o T0SE = 0 incrmentation sur fronts montants o T0SE = 1 incrmentation sur fronts descendants 0 0 0 2 0 0 1 4 Quelque soit l'horloge choisie, on peut la passer dans un diviseur de 0 1 0 8 frquence programmable (prescaler) dont le rapport DIV est fixs par 0 1 1 16 les bits PS0, PS1 et PS2 du registre OPTION_REG (tableau ci-contre). L'affectation ou non du prdiviseur se fait l'aide du bit PSA du 1 0 0 32 registre OPTION_REG 1 0 1 64 o PSA = 0 on utilise le prdiviseur 1 1 0 128 o PSA = 1 pas de prdiviseur (affect au chien de garde) 1 1 1 256 Le contenu du timer TMR0 est accessible par le registre qui porte le mme nom. Il peut tre lu ou crit n'importe quel moment. Aprs une criture, le timer ne comte pas pendant deux cycles machine. Au dbordement de TMR0 (FF 00), le drapeau INTCON.T0IF est plac 1. Ceci peut dclencher l'interruption T0I si celle-ci est valide RBPU T0SE RA4
0 1

OPTION_REG

INTEDG T0CS T0SE

PSA

PS2

PS1

PS0

T0CS
1 0

TH

PSA
1 Prdiviseur programmable 0

TF0 T0 TMR0 T0IF

Horloge quartz Fosc

Fosc/4
PS2 PS1 PS0

TF0 = 256 x (DIV x TH)

En rsum, chaque fois que le compteur complte un tour, le drapeau T0IF se lve. Si on note TH la priode de l'horloge source, T0 l'horloge de TMR0 et TF0 le temps qui spare 2 levs de drapeau successifs : Sans prdiviseur : TF0 = 256 T0 = 256 TH Avec prdiviseur : TF0 = 256 T0 = 256 x (DIV x TH ) Avec prdiviseur et compteur N dans le programme on obtient : NxTF0 = N x 256 x (DIV x TH)

Exercice 20) Clignoter LED / TMR0


PIC dot d'un quartz de 4 MHz. Programme qui fait clignoter une LED branche sur RB0, delay voisin de 0.5s l'aide de TMR0 a) Par scrutation du drapeau T0IF (pas d'interruption) b) En utilisant l'interruption T0I

39

VII.2 Le Watchdog Timer WDT (Chien de garde)


Cest un compteur 8 bits incrment en permanence (mme si le C est en mode sleep) par une horloge RC intgre indpendante de l'horloge systme. Lorsquil dborde, (WDT TimeOut), deux situations sont possibles : Si le C est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci permet dviter de rester plant en cas de blocage du microcontrleur par un processus indsirable non contrl Si le C est en mode SLEEP, le WDT time-out provoque un WAKE-UP, l'excution du programme continue normalement l o elle s'est arrte avant de rentrer en mode SLEEP. Cette situation est souvent exploite pour raliser des temporisations

L'horloge du WDT a une priode voisine de 70 s ce donne un Time-Out toutes les 18 ms. Il est cependant possible d'augmenter cette dure en faisant PS2 PS1 PS0 Div 1 passer le signal Time-Out dans un prdiviseur programmable (partag avec le 0 0 0 0 0 1 2 timer TMR0). L'affectation se fait l'aide du bit PSA du registre OPTION_REG 0 1 0 4 o PSA = 1 on utilise le prdiviseur 0 1 1 8 o PSA = 0 pas de prdiviseur (affect TMR0) 1 0 0 16 Le rapport du prdiviseur est fix par les bits PS0, PS1 et PS2 du registre 1 0 1 32 OPTION_REG (voir tableau ci-contre) 1 1 0 64 1 1 1 128 L'utilisation du WDT doit se faire avec prcaution pour viter la rinitialisation (inattendue) rpte du programme. Pour viter un WDT timeOut lors de l'excution d'un programme, on a deux possibilits : Inhiber le WDT d'une faon permanente en mettant 0 le bit WDTE dans l'EEPROM de configuration Remettre le WDT 0 priodiquement dans le programme l'aide de l'instruction CLRWDT pour viter qu'il ne dborde PSA Horloge WDT
0 0

WDT
1

WDT timeout Prdiviseur programmable PS2 PS1 PS0


1

40

VII.3 Le Timer TMR1


TMR1 est un Timer/Compteur 16 bits accessible en lecture/criture par l'intermdiaire des registres 8 bits TMR1H (bank0) et TMR1L (bank0) qui constituent sa partie haute et sa partie basse. On le configure l'aide du registre T1CON (bank0)
RC1 T1OSC T1OSCEN RC0 1 0 Horloge Systme FOSC/4 TMR1CS

T1CON
T1SYNC Prdiviseur DIV=1,2 4,8 SYNC 1 0 TMR1ON

TF1 T1
TMR1IF

TH

TMR1 16 bits
CLR

CCP

TF1 = 65536 x T1 = 65536 x (DIV x TH)

TMR1 peut fonctionner dans 3 modes diffrents : - Timer Synchrone (horloge interne) - Compteur Synchrone (horloge externe) - Compteur Asynchrone (horloge externe) Le bit de contrle TMR1CS dtermine le fonctionnement en Timer ou en Compteur et le bit T1SYNC dtermine le mode de fonctionnement en synchrone ou en asynchrone

TMR1 peut tre arrt/dmarr l'aide du bit TMR1ON TMR1 peut tre RAZ l'aide du module de capture/comparaison CCP TMR1 peut tre prcd d'un prdiviseur (Prescaler) qui peut diviser la frquence par 1, 2, 4 ou 8 selon la valeur des bits T1CKPS1 et T1CKPS0 A son dbordement (FFFFh 0000h) le drapeau PIR1.TMR1IF (bank0) est positionn ce qui peut dclencher l'interruption priphrique TMR1I si elle est valide par son bit de validation PIE1.TMR1IE (bank1).

VII.3.1 Le mode Timer


Dans ce mode, TMR1 est incrment par lhorloge systme Fosc/4 ventuellement prdivise. Le bit de synchronisation n'a pas d'effet car l'horloge Fosc/4 est toujours synchronise sur l'horloge systme.

VII.3.2 Le mode Compteur


Dans ce mode, TMR1 est incrment chaque front montant de l'horloge externe T1CKI (RC0) ou l'horloge ddie gnre par loscillateur T1OSC condition de positionner le bit T1OSCEN 1 et de brancher un quartz entre les broche RC0 et RC1. En mode compteur, RC0 et RC1 sont automatiquement configures en entre, on na pas besoin de configurer les bits TRISC,0 et TRISC,1

41 En fonctionnement Synchrone, l'horloge externe (ventuellement prdivise) n'incrmente pas directement le timer mais elle est synchronise sur l'horloge systme ce qui peut entraner un dlai de l'ordre de 1 cycle machine. Dans cette configuration En fonctionnement Asynchrone, l'horloge externe (ventuellement prdivise) incrmente le timer indpendamment de l'horloge systme. En mode Compteur Asynchrone, on ne peut pas utiliser les modules CCP1 et CCP2 pour faire des captures ou des comparaisons sur TMR1

VII.3.3 Le registre de control de T1CON


T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

T1CKPS1,T1CKPS0 : Control du prescaler 00 : division par 1 01 : division par 2 10 : division par 4 11 : division par 8 T1OSCEN : Validation de l'Oscillateur associ TMR1 0 : Oscillateur arrt 1 : Oscillateur activ T1SYNC : Synchronisation de l'horloge externe (ignor en mode timer) 0 : Synchronisation 1 : pas de synchronisation TMR1CS : Choix de l'horloge du Timer 0 : horloge systme (Fosc/4) : mode timer 1 : Horloge externe : mode compteur TMR1ON : Dmarrer arrter le timer 0 : Timer stopp 1 : Timer en fonctionnement En rsum : Le temps qui spare 2 levs de drapeau TMR1IF est : TF1 = 65536 x T1 = 65536 x (DIV x TH) Si on ajoute un compteur N dans le programme on obtient un temps = N x TF1

Exercice 21) Clignoter LED / scrutation de TMR1


Clignoter une LED relie RE0. La temporisation voisine de 0.5s sera ralise l'aide de TMR1 par scrutation du drapeau TMR1IF

Exercice 22) Clignoter LED / interruption TMR1


Clignoter une LED relie RD0. La temporisation voisine de 0.5s sera ralise l'aide de TMR1 est son interruption TMR1I

42

VII.4

Les module de Comparaison/Capture CCP1 et CCP2

Chacun des modules CCP1 et CCP2 permet : Soit de CAPTURER en un seul coup le contenu du double registre TMR1 Soit de COMPARER en permanence son contenu avec un registre 16 bits et de dclencher un vnement au moment de lgalit. Ces modules ne fonctionnent pas si TMR1 est configur en mode Compteur non synchronis

VII.4.1 Le module CCP1


Ce module est constitu de : Un registre 16 bits CCPR1 utilis pour la capture ou la comparaison de TMR1. Il est accessible par sa partie basse CCP1L et sa partie haute CCP1H Un registre de contrle 8 bits CCP1CON. Un prdiviseur permettant de filtrer les vnements dclencheurs de capture venant de la broche RC2

VII.4.1.1

Le mode Capture
CCP1IF
Registre de capture et comparaison

Registre de control

CCP1CON RC2 Prescaler 1, 4 ou 16

CCPR1 CCPR1H
chargement

CCPR1L

TMR1H TMR1

TMR1L

Dans ce mode le contenu de TMR1 est copi dans CCPR1 chaque fois qu'un vnement intervient sur la broche RC2. Le choix de l'vnement dclencheur se fait en programmant le prescaler laide des bits 0 3 du registre de contrle CCP1CON. On a le choix parmi les vnements suivants : A chaque front descendant A chaque front montant (prescaler 1:1) A chaque 4me front montant (prescaler 1:4) A chaque 16me front montant (prescaler 1:16)

A la fin de la capture, le drapeau CCP1IF est positionn, l'interruption priphrique associe est dclenche si elle a t valide. Plusieurs aspects sont noter comme : Si on veut dclencher la capture par un signal externe, celui-ci doit tre appliqu sur la proche RC2 qui doit tre configure en entre par le bit TRISC,2

43 Si on veut dclencher la capture par programme en changeant la valeur du bit RC2, celui-ci doit tre configur en sortie par le bit TRISC,2 Lors de la modification du mode de capture, une interruption indsirable peut intervenir. L'utilisateur doit veiller masquer l'interruption CCP1I avant de procder cette modification et de baisser le drapeau CCP1IF aprs la modification. En mode Sleep, le prescaler et le drapeau CCP1IF restent oprationnels. le positionnement du drapeau peut dclencher un Wake-up si le bit de validation CCP1IE a t valid auparavant

VII.4.1.2

Le registre de configuration CCP1CON


DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0

DC1B1, DC1B0 : utiliss en PWM mode Ce sont les 2 bits de poids faible des 10 bits MWM duty cycle. Les 8 autres bits sont dans le registre CCPR1L CCP1M3 CCP1M0 : mode de fonctionnement du module CCP1 0000 : Module arrt (reset module) 0100 : Capture sur chaque front descendant 0101 : Capture sur chaque front montant 0110 : Capture tous les 4 fronts montants 0111 : capture tous les 16 fronts montants 1000 : Mode comparaison (drapeau CCP1IF + broche RC2 0 1) 1001 : Mode comparaison (drapeau CCP1IF + broche RC2 1 0) 1010 : Mode comparaison (drapeau CCP1IF seulement) 1011 : Mode comparaison (drapeau CCP1IF + RAZ TMR1) 10xx : PWM mode (modulation de largeur dimpulsion), ce mode ne sera pas trait dan ce cours

VII.4.1.3

Le mode Comparaison

Dans ce mode le registre CCPR1 est compar en permanence TMR1. Quand l'galit intervient, le drapeau CCP1IF passe 1 et diffrentes actions sont accomplies selon le mode dfini par les bits de configuration CCP1M3:CCP1M0 CCP1IF

CCP1Mx

CCPR1H

CCPR1L

RC2

Logique de control

Comparateur

(RAZ)

TMR1H

TMR1L

horloge

mode 1000 : Au moment de l'galit, le drapeau CCP1IF est le bit RC2 passent 1. C'est l'utilisateur de les remettre 0 pour une prochaine utilisation. RC2 doit tre configur en sortie.

44

mode 1001 : Au moment de l'galit, le drapeau CCP1IF passe 1 et le bit RC2 passe 0. C'est l'utilisateur de les remettre leur tat dorigine pour une prochaine utilisation. RC2 doit tre configur en sortie. mode 1010 : A l'galit le drapeau CCP1IF passe 1. La broche RC2 n'est pas utilise. mode 1011 : A l'galit, le drapeau CCP1IF passe 1 et le timer TMR1 est remis 0

VII.4.2 Le module CCP2


Le module CCP2 est identique au module CCP1, il suffit dinterchanger 1 et 2 et de constater les points suivants : CCP2 est associ la broche RC1 Il est gr par le registre de control CCP2CON Son registre de capture/comparaison est CCPR2 = CCPR2H:CCPR2L En mode comparaison 1011, A lgalit : o o o le drapeau CCP2IF passe 1 RAZ de TMR1 envoi dun GO vers le convertisseur analogique numrique

Exercice 23) gnrer signal TMR1/CCP1


Programme qui gnre le signal ci-dessous sur la sortie RE0 en utilisant TMR1 associ CCP1

500 s

500 s

45

VII.5 Le Timer TMR2

TMR2 est un timer 8 bits accessible en lecture criture constitu de : un registre de control T2CON (bank0) un prdiviseur (1,4,16) un registre de priode PR2 (bank1) accessible en lecture/criture un comparateur, un postdiviseur (1 16) TMR2 est incrment par l'horloge interne Fosc/4. Il commence 0 et quant il atteint la valeur du registre PR2, le comparateur gnre un signal qui : Remet TMR2 0 incrmente le postscaler qui fonctionne comme un diviseur de frquence Comme le comptage commence 0, si PR2=N, alors le comparateur annonce une galit tous les N+1 coups dhorloge Au dbordement du postscaler, le drapeau PIR1.TMR2IF est positionn, l'interruption correspondante et dclenche si elle est valide TMR2 est remis zro chaque RESET Le prescaler et le postscaler sont initialiss chaque criture dans TMR2 ou dans T2CON et au RESET du processeur Le fonctionnement de TMR2 est configur l'aide du registre de control T2CON :

En rsum, Si on note : DIV1 DIV2 P Tsy : rapport du prdiviseur : Rapport du postdiviseur : Valeur place dans le registre PR2 : priode de l'horloge systme,

la priodicit du drapeau TMR2IF est donne par :

TF2 = DIV1 x (P+1) x DIV2 x Tsy .

46

Le registre T2CON:

TOUTPS3

TOUTPS2

TOUTPS1

TOUTPS0

TMR2ON

T2CKPS1

T2CKPS0

TOUTPS3:TOUTPS0 : ratio du postscaler 0000 : division par 1 0001 : division par 2 ... 1111 : division par 16 TMR2ON : dmarrer arrter TMR2 0 : TMR2 off 1 : TMR2 on T2CKPS1,T2CKPS0 : ratio du prescaler 00 : prdiviseur par 1 01 : prdiviseur par 4 1x : prdiviseur par 16

REMARQUE :
Dans le cas de la scrutation du drapeau TMR2IF par les 2 instructions suivantes :

ici

btfss goto

PIR1,TMR2IF ; attendre drapeau ici

Les temporisations obtenues peuvent tre errones cause de linstruction goto qui prend deux cycles pour sexcuter ce qui peut retarder la dtection du drapeau. La solution est dutiliser linterruption lie au drapeau TMR2IF, dans ce cas, les temporisations obtenues sont exactes

Exercice 24)
a) Si le PIC est cadenc par un quartz de 8 MHz, quelle la temporisation maximale que l'on peut obtenir l'aide du timer TMR2 b) Que devient cette valeur si on ajoute un compteur N dans le programme c) Quelle est la valeur max si le compteur N utilise une seule case mmoire

Exercice 25)
On dispose d'un PIC dot d'un quartz de 4 MHz. Donner le programme qui gnre le signal cidessous sur la sortie RB2. On crira deux versions du programme : a) On scrute nous mme le drapeau TMR2IF l'aide de l'instruction btfss, b) On exploite l'interruption TMR2I.

30 s

30 s

Exercice 26)
c) Essayer de trouver une opration logique simple permettant de faire basculer le contenu d'un registre entre deux valeur N1 et N2 d) Utiliser cette astuce pour obtenir un programme qui gnre le signal ci-dessous sur la sortie RB0. Le programme doit utiliser l'interruption TMR2I associe TMR2. Le PIC est dot d'un quartz de 4 MHz.

35 s

45 s

47

Exercice 27)
On dispose d'un PIC dot d'un quartz de 4 MHz. Donner le programme qui fait clignoter une LED relie RE0. La temporisation voisine de 0.5s est ralise l'aide de TMR2 : 1) Par scrutation du drapeau TMR2IF 2) En utilisant linterruption TMR2I

48

VIII Le module de conversion A/N


Vdd

RA3
CHS2 CHS1 CHS0

ADCON0 ADCON1 Vref+ ADRESL

RA0 RA1 RA2 RA3 RA5 RE0 RE1 RE2

000 001 010 011 100

CAN

ADRESH

Vref101 110 GO 111

CLK Tad

DIV

ADCS0 ADCS1

RA2

Vss fosc

Ce module est constitu d'un convertisseur Analogique Numrique 10 bits dont l'entre analogique peut tre connecte sur l'une des 8 (5 pour 16F876) entres analogiques externes. On dit qu'on a un CAN 8 canaux. Les entres analogiques doivent tre configures en entre l'aide des registres TRISA et/ou TRISE. Lchantillonneur bloqueur est intgr, il est constitu dun interrupteur dchantillonnage et dune capacit de blocage de 120 pF. Les tensions de rfrences permettant de fixer la dynamique du convertisseur. Elles peuvent tre choisies parmi Vdd, Vss, Vr+ ou Vr-

Le control du module se fait par les deux registres ADCON0 et ADCON1 ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE ADON

ADCS1:ADCS0 : Choix de l'horloge de conversion donc du temps de conversion (voir paragraphe VIII.2) 00 : Fosc/2 01 : Fosc/8 10 : Fosc/32 11 : Oscillateur RC ddi au CAN (fonctionne seulement pour FOSC < 1MHz) CHS2:CHS0 : choix de l'entre analogique 000 = channel 0, (RA0) 001 = channel 1, (RA1) 010 = channel 2, (RA2) 011 = channel 3, (RA3) 100 = channel 4, (RA5) 101 = channel 5, (RE0) 110 = channel 6, (RE1) 111 = channel 7, (RE2)

49 GO/DONE : Une conversion dmarre quand on place ce bit 1. A la fin de la conversion, il est remis automatiquement zro. Ce bit peut aussi tre positionn automatiquement par le module CCP2. ADON : Ce bit permet de mettre le module AN en service ADCON1 ADFM PCFG3 PCFG2 PCFG1 PCFG0

ADFM : justification droite ou gauche du rsultat dans les registre ADRESH et ADRESL

1 : justifi droite 0 : justifi gauche

ADRESH ADRESL 000000XX XXXXXXXX XXXXXXXX XX000000

PCFG3:PCFG0 : configuration des E/S et des tensions de rfrences. Les 5 broches de PORTA et les 3 de PORTE peuvent tre configurs soit en E/S digitales, soit en entres analogiques. RA2 et RA3 peuvent aussi tre configures en entre de rfrence.
PCFG3: PCFG0 0000 0001 0010 0011 0100 0101 011x 1000 1001 1010 1011 1100 1101 1110 1111 RE2 A A N N N N N A N N N N N N N RE1 A A N N N N N A N N N N N N N RE0 A A N N N N N A A A A N N N N RA5 A A A A N N N A A A A A N N N RA3 A VREF+ A VREF+ A VREF+ N VREF+ A VREF+ VREF+ VREF+ VREF+ N VREF+ RA2 A A A A N N N VREFA A VREFVREFVREFN VREFRA1 A A A A A A N A A A A A A N N RA0 A A A A A A N A A A A A A A A VREF+ VDD RA3 VDD RA3 VDD RA3 VDD RA3 VDD RA3 RA3 RA3 RA3 VDD RA3 VREFVSS VSS VSS VSS VSS VSS VSS RA2 VSS VSS RA2 RA2 RA2 VSS RA2 A/R/N 8/0/0 7/1/0 5/0/3 4/1/3 3/0/5 2/1/5 0/0/8 6/2/0 6/0/2 5/1/2 4/2/2 3/2/3 2/2/4 1/0/7 1/2/5

VIII.1

Droulement dune Conversion

Le PIC dispose dun chantillonneur bloqueur intgr constitu d'un interrupteur S, d'une capacit de maintien C=120 pF et dun convertisseur Analogique numrique 10 bits. Pendant la conversion, la tension Ve l'entre du convertisseur A/N doit tre maintenue constante. Au dpart il faut commencer par faire lacquisition du signal en fermant linterrupteur S, ceci se fait laide du registre ADCON0, soit au moment de la validation du module par le bit ADON soit aprs un changement de canal si ADON est dj positionn. Aprs la fin de lacquisition, on peut dmarrer une conversion en positionnant le bit GO_DONE, l'interrupteur S souvre pour assurer le blocage de la tension. La conversion commence, elle est ralise en 12 TAD, la fin, le bit GO_DONE repasse 0, le drapeau ADIF passe 1 et le rsultat est charg dans les registres ADRESL et ADRESH. Le module met 2 TAD supplmentaires pour fermer l'interrupteur S ce qui dmarre une nouvelle phase dacquisition pendant laquelle la tension Ve rejoint la tension analogique d'entre Va. Le temps d'acquisition dpend de la constante de temps RC, R tant la somme des rsistances entre le module de conversion et la source de la tension analogique. Aprs la fin de lacquisition, on peut dmarrer une nouvelle conversion et ainsi de suite

50

Ve Va Va S Ve CAN 120 pF
2Tad

12Tad

Tacq

GO/DONE nous automatique

VIII.2

Temps de conversion

Le temps de conversion est gal 12 TAD TAD est le temps de conversion d'un bit, il dpend de la frquence du quartz et du prdiviseur (div) choisi : TAD = div x 1/fosc. Le choix de div doit tre ajust pour que TAD soit 1,6 s Div 20Mhz 5Mhz 4Mhz 2Mhz 2 0,1 s 0,4 s 0,5 s 1 s 8 0,4 s 1,6 s 2 s 4 s 32 1,6 s 6,4 s 8 s 16 s RC Non utilisable 1Mhz 2 s 8 s 32 s 4 s

00 01 10 11

Tableau VIII.1 : Temps de conversion d'un bit TAD (les cases grises sont hors plage dutilisation)

Avec un quartz de 4 MHz, il faut choisir div=8 ce qui donne TAD = 2 s soit un temps de conversion : TCONV = 24 s

VIII.3

Temps d'acquisition
Temps d'acquisition = TACQ = Tc + CT +2 s

Tc

: temps de charge du condenseur = (Ric+Rss+Rs) C Ln(2047) Ric = Rsistance dinterconnexions, elle est infrieure 1k Rss = Rsistance du linterrupteur S (Sampling switch), elle dpend de la tension dalimentation Vdd. Elle est gale 7k pour Vdd=5V Rs : Rsistance interne de la source du signal analogique. Microchip recommande de ne pas dpasser 10 k C : Capacit de blocage = 120 pF

CT : Coefficient de temprature = (Tp -25C) 0.05 s/C Tp = Temprature Processeur, voisine de 45C en temps normal

Exemple :
Ric = 1k, Rss = 7k, Rs = 2k, Tp = 45 C : Tc = 10k x 120pF x Ln(2047) = 9 s CT = 20 x 0.05 s = 1 s TACQ = 2 + 9 + 1 s = 12 s

51

VIII.4

Frquence d'chantillonnage

Si on veut chantillonner un signal variable, La priode d'chantillonnage Te doit tre suprieur ou gale Temin = TCONV + 2 Tad + TACQ Avec les exemple prcits, on aura la pride dchantillonnage min Temin = (12+2)x2 + 12 = 40 s La frquence dchantillonnage max est donc femax = 1/Temin = 25 kHz Si on tient compte de la rgle de Shannon (fe > 2 fmax), on constate que lon peut chantillonner des signaux dont la frquence ne dpasse pas 12 KHz.

VIII.5

Valeur numrique obtenue

Quelle est la relation entre la tension analogique convertie et le nombre N recueilli dans le registre ADRES ? Si on note : Q = pas de quantification = (Vref+ - Vref-)/1024 Va = tension analogique convertir N = valeur numrique obtenue, N = valeur entire de (Va Vref-) / Q Avec Vref- = masse, on obtient N = int (Va / Q)

exemple :
Vref+ = Vdd = 5V, Vref- = 0, Vin = 4 V Q = 5V/1024 = 0,0048828125 V N = 4V / 0,0048828125 = 819

VIII.6

Programmation

1) Si des entre de PORTE sont utilises, le configurer en mode normal l'aide du bit PSPMODE 2) Configurer les E/S en Analogique/Numrique/Rfrence (ADCON1) 3) Configurer les entres analogiques en entres (TRISA, TRISE) 4) Dfinir l'horloge de conversion l'aide du diviseur DIV dans ADCON0 5) Choisir le canal convertir et valider le module (ADCON0) 6) Attendre le temps dacquisition (12 s ) 7) Lancer la conversion, GO = 1 (ADCON0) 8) Attendre fin de conversion, GO = 0 ou drapeau ADIF=1 9) Traiter le rsultat 10) Si l'on dsire prendre d'autres mesures, recommencer au point 7 en faisant attention aux timings

Exercice 28)
PIC dot d'un quartz de 4 MHz. Programme qui converti la tension applique RA0 et recopie le rsultat dans la RAM la position 70h et 71h

Exercice 29)
Sur un PIC dot d'un quartz de 4 MHz, Donner le programme qui fait l'acquisition de 40 chantillons du signal appliqu sur RA0, et recopie les rsultats dans la RAM partir de la position 190h. L'chantillonnage se fera la vitesse la plus rapide possible

Exercice 30)
Refaire lexercice prcdent avec une frquence dchantillonnage fe = 8000Hz. Utiliser le timer 2 pour ajuster la priode d'chantillonnage.

52

IX

L'USART

L'USART (Universal Synchronous Asynchronous Receiver Transmitter) est l'un des deux modules de communication srie dont dispose le PIC 16F876/877. L'USART peut tre configur comme systme de communication asynchrone full duplex ou comme systme synchrone half duplex (non tudi). La communication se fait sur les deux broches RC6/TX et RC7/RX qui doivent tre configurs toutes les deux en ENTREE par TRISC. (oui, jai bien dit toutes les deux)

IX.1 Mode Asynchrone


Si on place le bit SYNC du registre TXSTAT 0, l'USART fonctionne dans le mode asynchrone standard, 10 (ou 11) bits sont transmis ou reus dans l'ordre ci-dessous : - 1 bit de START (toujours 0) - 8 ou 9 bits de donne (LSB d'abord) - 1 bits de STOP (toujours 1) La transmission se fait sur la broche RC6/TX et la rception sur la broche RC7/RX La configuration et le control du port se fait par les registres TXSTA et RCSTA La vitesse de communication est fixe par le registre SPBRG et le bit TXSTA.BRGH La parit n'est pas gre d'une faon matrielle, elle peut tre gre par soft si son utilisation est ncessaire. L'accs au port en lecture ou criture se fait par les registres tampon RCREG et TXREG. La transmission et la rception se font par deux registres dcalage, un pour la transmission (TSR) et un pour la rception (RSR). L'accs au registres tampon peut se faire alors que les registre dcalage sont en train de transmettre/recevoir une donne. Les drapeaux PIR1.RCIF et PIR1.TXIF sont trs utiles pour grer la lecture/criture dans le port. RCIF est positionn quand le port a termin une rception et TXIF est positionn quand le buffer de transmission TXREG est "vide".

IX.2 Le port en transmission

Le contrle de la transmission se fait par le registre TXSTA CSRC TX9 TXEN SYNC BRGH TRMT TX9D

CSRC : non utilis en mode asynchrone

53 TX9 et TX9D : Pour utiliser le mode 9 bits il faut positionner le bit TX9. Le 9me bit doit tre crit dans TX9D avant d'crire les 8 bits de donnes dans TXREG TXEN : permet de valider ou interdire la transmission SYNC : 0 mode asynchrone, 1 mode synchrone BRGH : slectionne le mode haut dbit du gnrateur de baud rate TRMT : Indicateur de lactivit du registre dcalage de transmission TSR 1 TSR libre, 0 TSR en activit

Droulement de la transmission
Quand on crit un octet D dans le registre TXREG, le drapeau PIR1.TXIF passe 0, ensuite, deux situations sont possibles : Le registre de transmission TSR nest pas occup, alors la donne D est transfre immdiatement dans TSR qui commence sa transmission bit bar bit. Le drapeau TXIF repasse 1 pour nous dire que nous pouvons de nouveau crire dans TXREG. Le registre de transmission TSR est occup transmettre un octet qui lui t donn auparavant. La donne D attend dans TXREG, et le drapeau TXIF reste 0 jusqu ce que TSR termine de transmettre loctet prcdent. La donne D est alors transfre dans TSR qui commence sa transmission bit bar bit. Le drapeau TXIF repasse 1 pour nous dire que nous pouvons de nouveau crire dans TXREG. criture D0 dans TXREG criture D1 dans TXREG

TXIF

Transmission D0

Transmission D1

chargement TXREG TSR

chargement TXREG TSR

Figure IX-1 : illustration de la transmission de deux octet successifs D0 et D1

A la mise sous tension, tous les drapeaux sont zro y compris TXIF. Ds quon valide la transmission en positionnant le bit TXEN, le drapeau TXIF passe automatiquement 1, sauf si on crit dabord un octet dans TXREG et on valide ensuite le bit TXEN, dans ce cas, ds la validation de TXEN, le contenu de TXREG est transfr dans TSR qui commence sa transmission et le drapeau TXIF passe 1. Comme on vient de le voir, le drapeau TXIF est gr automatiquement, on ne peut pas le modifier directement par programme.

IX.2.1
1) 2) 3) 4) 5) 6) 7) 8)

Les tapes de transmission (sans interruption, mode 8 bits)

Sassurer que linterruption TXI nest pas valide Configurer la broche TX/RC6 en entre Configurer le registre TXSTA (mode 8 bits, valider transmission, asynchrone, BRGH) Initialiser le registre SPBRG pour dfinir la vitesse de transmission Valider le port avec le bit RCSTA.SPEN Vrifier que le drapeau PIR1.TXIF=1 c..d TXREG est vide Placer la donne transmettre dans le registre TXREG recommencer au point 6) tant quon a des donnes transmettre

54

IX.3 Le port en rception

La rception est valide par le bit CREN La rception d'un octet dmarre la rception du START bit qui commence toujours par une transition 1 0 A la rception du stop bit le contenu du registre dcalage de rception RSR est recopi dans le registre tampon de rception RCREG. Le drapeau RCIF (PIR1.5) est positionn, l'interruption associe est dclenche si elle est valide. Le drapeau RCIF est remis zro automatiquement au moment de la lecture dans RCREG. Le registre RCREG est un registre double (FIFO 2 positions). On peut donc avoir 2 octets en attente dans ce registre et tre en train de recevoir un 3me dans le registre dcalage RSR. A la fin de la rception du 3me octet, si RCREG est toujours plein, alors le dernier octet reu est perdu et le bit OERR (Overrun ERRor bit) est positionn ce qui provoque l'arrt des transfert du registre dcalage RSR vers le buffer RCREG. Pour reprendre la rception il faut rinitialiser le module de rception en mettant 0 puis 1 le bit CREN ( ). Le drapeau PIR1.RCIF ne passe 0 que quand la pile RCREG est vide Si on reoit un 0 la position du STOP bit qui doit tre toujours 1, alors le bit FERR (Framing ERRor) est positionn. Ce bit ainsi que le 9me bit (si utilis) sont bufferiss, Il doivent tre lu dans le registre RCSTA avant la lecture du registre RCREG.

Le contrle de la rception se fait par le registre RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D

SPEN : Validation du port srie (1 = valid, 0 = Inhib) RX9 : Validation du mode 9 bits (1 mode 9 bits, 0 mode 8 bits) SREN : validation de rception d'u seul octet (non utilis en mode asynchrone) CREN : Validation du mode rception continue (1 valid, 0 inhib) ADDEN : validation du mode dtection d'adresse en mode 9 bits, utilis en mode multiprocesseurs ( 1 valid, 0 : Inhib) FERR : Erreur de synchronisation, lecture seule. (Voir au dessus) OERR : Erreur dbordement du buffer de rception, lecture seule. (Voir au dessus) RX9D : En mode 9 bits, le 9me bit est reu ici

55

IX.3.1
1) 2) 3) 4) 5) 6) 7) 8)

Les tapes de rception (sans interruption, mode 8 bits)

Sassurer que linterruption RCI nest pas valide Configurer la broche RX/RC7 en entre Initialiser le registre SPBRG pour dfinir la vitesse de communication Configurer le registre TXSTA (asynchrone, BRGH) Configurer le registre RCSTA (validation port, mode 8 bits, valider rception continue) Attendre que drapeau RCIF passe 1 ce qui annonce la fin de rception d'un octet Lire loctet reu dans le registre RCREG recommencer au point 6) tant quon a des donnes recevoir

IX.4 La vitesse de communication


La vitesse de communication est dtermine par le gnrateur de rythme BRG (Baud Rate Generator) qui est ddi au port srie. La vitesse de communication est dfinie l'aide du registre de control SPBRG et du bit BRGH (TXSTA.2) qui quadruple la vitesse quand il est positionn. Il prfrable d'utiliser le mode haute vitesse (BRGH=1) car permet d'obtenir une meilleur prcision sur la frquence.

vitesse
FOSC 2400 4800 9600 19200

4 BRGH Fosc = baud 64 (SPBRG + 1)

SPBRG

4 BRGH Fosc 64 vitesse

-1

1000000 4000000 8000000 20000000 SPBRG Baude err% SPBRG Baude err% SPBRG Baude err% SPBRG Baude err% 6 2 1 0 2232 7 5208 8,5 7813 18,61 15625 18,62 25 12 6 2 2404 4808 8929 20833 0,17 0,17 6,99 8,51 51 25 12 6 2404 4808 9615 17857 0,17 0,17 0,16 6,99 129 64 32 15 2404 4808 9470 19531 0,17 0,17 1,35 1,72

Tableau IX.1 : vitesse de transmission BRGH = 0

FOSC 2400 4800 9600 19200 28800 33600

1000000 SPBRG Baude 25 2404 12 4808 6 8929 2 20833 1 31250 1 31250

err% 0,17 0,17 6,99 8,51 8,51 6,99

4000000 SPBRG Baude 103 2404 51 4808 25 9615 12 19231 8 27778 6 35714

err% 0,17 0,17 0,16 0,16 3,55 6,29

8000000 SPBRG Baude 207 2404 103 4808 51 9615 25 19231 16 29412 14 33333

20000000 err% SPBRG Baude err% 0,17 0,17 0,16 129 9615 0,16 0,16 64 19231 0,16 2,13 42 29070 0,94 0,79 36 33784 0,55

Tableau IX.2 : vitesse de transmission BRGH = 1

Exercice 31)
On dispose d'un PIC dot d'un quartz de 4MHz. Donner le programme qui transmet l'alphabet sur le port srie 19200 baud avec un dlai voisin de s entre les caractres.

Exercice 32)
On dispose d'un PIC dot d'un quartz de 10MHz. Donner le programme qui lit 40 caractres sur le port srie (9600 baud) et les stocke dans la RAM partir de la position 190h.

56

Le module MSSP (Master Synchronous Serial Port)

Le MSSP est une des deux modules de communication srie du PIC 16F876/877. Il permet d'changer des donnes en mode synchrone avec d'autres circuits qui peuvent tre des microcontrleurs, des mmoires EEPROM srie, des convertisseurs A/N, des modules d'affichage . . . Il peut fonctionner selon deux modes : le mode SPI (Serial Peripheral Interface) et le mode I2C (Inter-Integrated Circuit)

X.1

Introduction au bus I2C

Avant de parler du module MSSP en mode I2C du PIC, introduisons trs brivement Le standard I2C Le bus IC permet de faire communiquer entre eux des composants lectroniques trs divers grce seulement 3 fils : Un signal de donne (SDA), un signal d'horloge (SCL), et un signal de rfrence lectrique ( Masse ). Comme les lignes SDA et SCK sont utilises dans les deux sens par les deux circuits qui communiquent, on peut avoir un circuit qui place la ligne 1 (Vcc) et l'autre qui la place 0 (masse) ce qui correspond un court circuit qui peut dtruire les deux composants. Pour viter ce problme, les E/S SDA et SCK fonctionnent en mode collecteur ouvert (ou drain ouvert) de sorte qu'un circuit ne peut imposer que le niveau bas ou ouvrir la ligne, le niveau haut est obtenu par une rsistance de tirage externe. Ainsi une ligne est 0 quand un des deux circuits impose le 0. Elle passe 1 quand les deux circuits imposent le 1 (circuit ouvert). Le protocole I2C jongle avec cette situation pour organiser l'change des donnes entre les deux composants. Vcc

lecture Ecriture

lecture Ecriture

Un bus I2C peut tre reli plusieurs circuits, mais pendant une communication, un des circuits est le matre, c'est lui gnre l'horloge et initie les squences de transmission, l'autre est l'esclave, il subit l'horloge du matre sur la ligne SCK mais il peut tout de mme recevoir et mettre des donnes sur la ligne SDA. Chaque esclave a une adresse, au dbut d'une squence de communication, le matre qui initie la squence envoie l'adresse du slave avec lequel il dsire communiquer, celui-ci reconnat son adresse et rpond, les autres slaves (s'il y en a) restent muets.

57 Vcc Vcc

SDA

SCK

SDA

SCK

SDA

SCK

Matre ou Esclave

Matre ou Esclave

Matre ou Esclave

Certains circuits sont fabriqus pour tre des masters, d'autres des slaves et d'autres peuvent tre soit l'un soit l'autre. Pour prendre le contrle du bus, il faut que celui-ci soit au repos ( SDA et SCL '1'). Lorsqu'un circuit prend le contrle du bus, il en devient le matre. C'est lui qui gnre le signal d'horloge et c'est lui qui initie les squences d'change.

X.1.1

start condition

Au dbut d'une squence d'change, le master gnre un start condition (S) avant de commencer l'change de donnes. Au repos, les lignes SCL et SDA sont l'tat haut (relches). Pour gnrer un start, le master place d'abord la ligne SDA 0, ensuite il place SCK 0.

SDA SCK S

X.1.2

Transmission d'un bit

On place le bit transmettre sur la ligne SDA ensuite on envoie une impulsion d'horloge sur la ligne SCK. C'est cette impulsion qui informe le slave qu'il doit lire la donne sur SDA bit transmettre SDA SCK

X.1.3

Stop condition

moment de lecture par le rcepteur

A la fin d'une squence d'change, le master gnre un stop condition (P) aprs lequel le bus est de nouveau libre. Pour cela, partir de la situation SDA=0, SCK=0, le master commence par placer SCK 1 et place ensuite SDA 1.

58

SDA SCK P

X.1.4

Remarque sur le Start et le Stop condition

Une squence de transmission peut contenir plusieurs Starts conditions avant de rencontrer un Stop Condition. On parle de repeated Start condition. Un Stop condition est toujours synonyme de FIN de transmission.

X.1.5

L' acknowledge

L' acknowledge est l'accus de rception. Il est plac par le circuit qui reoit sur la ligne SDA juste aprs la rception du 8me bit. C'est l'metteur qui le lit de la mme faon qu'on lit un bit acknowledge positif (ACK), SDA=1 acknowledge ngatif (NOACK), ordinaire. SDA=0 ACK SDA SCK NOACK

En conclusion, l'change d'un octet ncessite 8 + 1 = 9 impulsions dhorloge sur la pin SCL.

Acknowledge
SDA SCK D7 D6 D5 D4 D3 D2 D1 D0

X.1.6

L'adresse et le bit R/W

Comme on peut brancher plusieurs composant sur un bus I2C, il est ncessaire de dfinir une adresse unique pour chacun. Elle est code sur 7 bits A6 A5 A4 A3 A2 A1 A0. Le master qui dmarre une squence d'change envoie l'adresse du slave juste aprs le start condition. Comme il y a seulement 7 bits, le master envoie la 8me position le bit R/W pour indiquer au slave s'il dsire une mission (R/W=0) ou une rception (R/W=1).

Acknowledge
SDA SCK S A6 A5 A4 A3 A2 A1 A0 R/W

Le standard I2C supporte maintenant l'adressage sur 10 bits. Comme avec 7 bits on peut adresser jusqu' 128 composants, cela nous suffira largement.

59

X.2

Le module MSSP en mode I2C

Le module MSSP du PIC peut tre configur en master ou en slave. Il utilise les broches RC3/SCL (Horloge) et RC4/SDA (donnes). Ces broches doivent tre configures en ENTREE l'aide du registre TRISC et doivent tre munie de rsistances de pull-up externes ncessaire au fonctionnement I2C. Les frquences d'horloges supportes sont 100 kHz, 400 kHz et 1 MHz L'accs au module en lecture et criture se fait l'aide du registre tampon (buffer) SSPBUFF. La transmission et la rception se fait l'aide du registre dcalage SSPSR auquel nous navons pas directement accs SSPBUF SCK/RC3 SDA/RC4 SSPSR SSPCON SSPCON2 SSPSTA SSPADD

X.2.1

Transmission dun octet

Pour transmettre un octet, il suffit de le copier dans le registre SSPBUF, et le module MSSP soccupe du reste. Au moment de lcriture dans SSPBUF, le bit BF passe 1 et la transmission commence. A la fin de la transmission, le bit SSPSTAT.BF repasse 0 et le drapeau dinterruption PIR1.SSPIF passe 1. Le bit BF apparat donc comme un bit trs important, cest lui qui nous permet de savoir si le registre SSPBUF est libre ou non Si on tante d'crire dans SSPBUF alors que BF=1, le bit SSPCON.WCOL passe 1 pour indiquer une collision et l'criture n'a pas lieu.

X.2.2

Rception dun octet

A la fin de la rception d'un octet, celui-ci est transfr dans SSPBUF, lindicateur SSPSTAT.BF et le drapeau dinterruption PIR1.SSPIF passent 1. BF repasse automatiquement 0 au moment de la lecture de SSPBUF alors que SSPIF soit tre remis 0 par soft. Si le PIC termine la rception d'un octet avant que l'octet prcdent qui se trouve dans SSPBUF n'ait t lu, on a un Overflow qui sera signal par le drapeau SSPOV. Le transfert n'a pas lieu, loctet arriv est perdu.

X.2.3

Les registres de configuration

Le control du module se fait l'aide des registres : SSPCON : registre de control (BANK0) SSPCON2 : registre de control (BANK1) SSPSTAT : registre d'tat (BANK1) SSPADD : registre d'adresse (BANK1)

60

X.2.3.1
SSPSTAT SMP CKE D/A P S R_W

Le registre SSPSTAT :
SMP CKE D/A P S R_W UA BF

UA

BF

: Control de slew rate : 1 pour 100 kHz et 1 MHz, 0 pour 400 kHz : Control des niveaux de tension l'entre, 0 : I2C, 1 : SMBUS : Indicateur d'tat, 0 : dernier octet mis/reu = adresse, 1 : dernier octet mis/reu = donne : Indicateur de Stop Condition. Ce bit passe 1 quand on dtecte un Stop Condition. Il est automatiquement remis 0 quand un autre vnement et reu. : Indicateur de Start Condition. Ce bit passe 1 quand on dtecte un Start Condition. Il est automatiquement remis 0 quand un autre vnement et reu : Indicateur de lecture criture Mode master : 0 : pas de transmission en cours, 1 : transmission en cours Mode slave : image du bit R/W qui constitue le bit 0 du premier octet suivant le start condition. 0 : criture, 1 : lecture : Indicateur utilis en mode esclave avec adressage 10 bits pour nous informer qu'il faut placer la 2me partie de l'adresse dans le registre adresse. Ce dernier ayant seulement 8 bits, l'adresse est traite en 2 parties. Ce bit est remis automatiquement zro aprs l'criture dans SSPADD. : Indicateur sur l'tat du registre SSPBUF.

X.2.3.2
SSPCON WCOL

Le registre SSPCON :
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0

: Collision d'criture. En mode I2C master, ce bit passe 1 si on tente d'crire dans SSPBUF mauvais moment de la squence de transmission (BF=1). En mode I2C slave, il est positionn si on tente d'crire dans SSBUF avant la fin de la transmission de l'octet prcdant. Ce bit doit tre remis zro par programme. : Overflow, cet indicateur d'erreur est positionn quand une nouvelle donne est reue alors que le registre SSBUF n'est pas encore lu. Dans ce cas la nouvelle donne est perdue. Ce bit doit tre remis zro par programme.

SSPOV

SSPEN : Validation du module MSSP (1 = valid) CKP : Utilis en mode I2C slave pour gnrer des pauses en inhibant l'horloge. 0 : horloge force zro, 1 : horloge valide

SSPM3:SSPM0 : mode de fonctionnement du module 0110 : I2C Slave, adresse 7 bits 0111 : I2C Slave, adresse 10 bits 1000 : I2C master, frquence = FOSC / (4 * (SSPADD+1)) 1011 : I2C Slave forc l'tat de repos 1110 : I2C master, adresse 7 bits, interruption sur START et STOP 1110 : I2C master, adresse 10 bits, interruption sur START et STOP

61

X.2.3.3
SSPCON2

Le registre SSPCON2 :
GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN

Le bit 7 concerne le mode slave, les autres bits concernent le mode master : GCEN : General call enable bit : Si ce bit est valid, le PIC rpond son adresse et l'adresse gnrale 0000h

ACKSTAT : Acknowledge Status bit (mode master) : ce bit est limage de laccus de rception envoy par le slave. 0=accus positif, 1=accus ngatif ACKDT : Acknowledge Data bit (master mode) : Valeur du bit envoy au slave en fin de rception. Ce bit est envoy au moment ou on positionne le bit ACKEN. ACKEN : Acknowledge Sequence Enable bit (master mode) : quand il est plac un, ce bit dmarre une squence accus de rception qui consiste placer les broches SDA et SCL dans le mode correspondant au bit ACKDT RCEN : Receive Enable bit : (master, rception) Quand on le place 1, ce bit dmarre la rception d'un octet. Il revient automatiquement 0 aprs la transmission du 8me bit. La rception ne dmarre que si l'horloge n'est pas stretche (force 0: pause) par le slave. PEN : STOP Condition Enable bit , dmarre une squence stoP_condition sur les broches SDA et SCL. Ce bit est remis 0 automatiquement aprs la squence du STOP RSEN : Repeated START Condition Enable bit : dmarre une squence Repeated Start condition. Il est remis 0 automatiquement aprs la squence du R-START SEN : START Condition Enable bit : dmarre une squence Start condition. Il est remis 0 automatiquement aprs la squence du START

X.2.3.4

Le registre SSPADD :

En mode I2C master, ce registre permet de dterminer la frquence de communication Fosc F = Hz 4 (SSPADD + 1) Les frquences possibles sont : 100 kHz, 400 kHz et 1 MHz

Fosc 1 Hz 4 F En mode I2C slave, ce registre doit contenir l'adresse du slave. Le bit 0 est rserv, il doit tre toujours plac zro, l'adresse doit tre crite partir du bit 1. En cas d'adresse 7 bits, cela ne pose pas de problme. En cas d'adresse 10 bits, l'adresse est crite en 2 temps, On commence par crire 1 1 1 1 0 A9 A8 0 dans SSPADD, en attend l'indicateur UA, ensuite on crit A7 A6 A5 A4 A3 A2 A1 A0 SSPADD =

X.2.4

MSCP en mode I2C Master

Une squence de communication est toujours initie par le master qui commence par envoyer un Start_bit (SSPCON2.SEN), suivi de l'adresse du slave. Ladresse sera code seulement sur 7 bits, Le LSB quon appelle bit R/W permet de prciser le sens de lchange qui va suivre, R/W=0 pour transmission, R/W=1 pour rception. On envoie ou on reoit les donnes et on termine la communication par un stoP_bit (SSPCON2.PEN) Si lon dsire changer le sens de lchange avant lenvoi du stoP, ce qui vite l'ventualit de perdre la ligne au profit d'un autre master, il faut envoyer un RepeatStart condition suivi de ladresse accompagne dun R/W diffrent

62

X.2.4.1

Master en transmission :
ACK envoy par le slave S Slave adress 0 R/W A Data byte A Data byte A P

On positionne le bit SSPCON2.SEN sur le master, celui-ci envoie le START bit sur la ligne SDA puis r..z automatiquement le bit SEN et positionne le drapeau d'interruption PIR1.SSPIF, ce dernier doit tre r.a.z par soft. Le slave voit le START, positionne son bit S et se prpare recevoir l'adresse, On copie ladresse avec R/W=0 dans SSPBUF, les bits SSPSTAT.BF et SSPSTAT.R_W passent 1, la transmission dmarre, aprs le 8me coup d'horloge, SSPSTAT.BF repasse zro, aprs le 9me R_W repasse 0, et le drapeau dinterruption SSPIF passe 1 et l'horloge est force 0 (pause) jusqu'`a ce qu'un nouvel octet est copi dans SSPBUF. Le drapeau SSPIF doit tre raz par soft pour quil puisse servir dans la suite. L'acquittement sur l'adresse est renvoy par le slave pendant le 9me coup d'horloge sur la ligne SDA : 0 (ACK) sil a lu loctet correctement, 1 (NoACK) sil na pas pu lire loctet correctement. Ce bit recopi par le master dans le bit SSPCON2.ACKSTAT. Le programmeur doit vrifier ltat de ce bit pour dcider de la suite des vnements, Si acquittement de l'adresse est ngatif on envoie un R-START et on renvoie ldresse Si acquittement de l'adresse est positif, on envoie un octet de donne en l'crivant dans SSPBUF. Tout se passe comme lorsqu'on a envoy l'adresse. Les bit BF et R_W passent 1 au dbut de l'mission et repassent 0 la fin. Le drapeau SSPIF passe 1. Le slave renvoie l'acquittement pendant le 9me bit qui sera copi dans le bit ACKSTAT. Si l'acquittement sur la donne est ngatif, le plus simple est de retransmettre la donne Si l'acquittement sur la donne est positif : o o Si on a encore des donnes transmettre, on dmarre une nouvelle mission en crivant dans SSPBUF. Si on n'a plus de donnes transmettre, on envoie un stoP_bit en positionnant le bit SSPCON2.PEN qui est remis zro automatiquement aprs la transmission d'un Stop bit sur la ligne SDA.

Quand le slave voie le stoP_bit, il r.a.z le bit S et positionne le bit P puis rinitialise son lectronique pour se prparer la rception d'un nouveau Start_bit.

63

PIC Master - Transmission

Configuration du module I2C Envoyer START Envoyer adresse avec R/W=0 Tester Acquittement Adresse

Envoyer R-START

OK ?

Envoyer une donne Tester Acquittement sur donne

non

OK ?

oui
Fini ?

non

oui
Envoyer STOP

64

X.2.4.2

Master en rception :
ACK du slave S Slave adress transmis R/W 1 A Data byte reu A ACK du master Data byte reu A P

On positionne le bit SSPCON2.SEN sur le master, celui-ci envoie le Start_bit sur la ligne SDA et r..z automatiquement le bit SEN et positionne le drapeau d'interruption PIR1.SSPIF, ce dernier doit tre r.a.z par soft. Le slave voit le Start_bit, il place le bit SSPSTAT.S 1 et se prpare recevoir l'adresse, On copie ladresse avec R/W=1 dans SSPBUF, les bits SSPSTAT.BF et SSPSTAT.R_W passent 1, la transmission dmarre, aprs le 8me coup d'horloge, SSPSTAT.BF repasse zro, aprs le 9me R_W repasse 0, et le drapeau dinterruption SSPIF passe 1, il doit tre raz par soft pour quil puisse servir dans la suite. Pendant le 9me coup d'horloge, le slave renvoie un ACK/NOACK selon sa situation et force l'horloge zro (pause) pour empcher le master de lire avant que la donne ne soit prpare sur le bus. On appelle a : clock stretching. Le programme du slave prpare la donne sur le bus puis libre lhorloge l'aide du bit CKP Le programme du master doit tester l'acknowledge dans SSPCON2.ACKSTAT, si = 0(OK), il positionne le bit SSPCON2.RCEN pour demander le dbut d'une rception. Le module I2C master voyant le RCEN=1 essaye de commencer une rception par l'envoi d'une rafale de 8 coups d'horloge. Quand il place l'horloge 1 (premire impulsion), celle-ci peut ne pas passer 1 car il se peut qu'elle soit force 0 par le slave. Dans ce cas le master attend que l'horloge passe 1 pour continuer la rafale de coup d'horloge En rsum, ds que les deux conditions {RCEN=1 et horloge libre} sont vrifies, le master envoie une rafale de 8 coups d'horloge qui s'accompagne de la rception de 8 bits de donnes. o A la fin de la rception, le module I2C master ramne le bit SSPCON2.RCEN 0, transfert loctet reu dans SSPBUF, lindicateur BF passe 1 ainsi que le drapeau dinterruption PIR1.SSPIF. Ensuite Il force l'horloge 0 (pause) pour donner le temps au programme d'envoyer l' Acknowledge,

Le programme utilisateur du master vide le buffer SSPBUF, BF repasse 0. Ensuite il envoie l'

Acknowledge en plaant ACK/NOACK (0/1) dans la bit SSPCON2.ACKDT et en validant le bit


SSPCON2.ACKEN. Le bit ACKDT est plac sur la ligne SDA, et ACKEN est r.a.z. automatiquement. L'horloge est libre juste le temps d'un coup d'horloge (le 9me) pour que le slave puisse prendre l' Acknowledge en compte. Elle est remise en pause aprs. Le drapeau dinterruption SSPIF est aussi positionn aprs lenvoi du ACK Si on a envoy ACK, a veut dire quon veut recevoir dautres donnes, alors notre programme peut initier la rception dun nouvel octet en validant SSPCON2.RCEN. A la rception du ACK, le slave met l'horloge en mode pose pour donner le temps son programme de placer une donne dans le registre SSPBUF et de librer ensuite l'horloge l'aide du bit CKP. Si on a envoy NOACK, (on ne veut plus de donne), Le slave qui le reoit rinitialise sa logique comme s'il a reu un STOP.

65

PIC Master - rception Configuration du module I2C Envoyer START Envoyer adresse avec R/W=1 Teste Acquittement Envoyer R-START

non

OK ?

oui
Lancer la rception d'un octet en activant RCEN Attendre la fin de rception en scrutant RCEN

Traiter l'octet reu

oui
Envoyer ACK

Dsire-t-on d'autres donnes?

non
Envoyer NOACK fin

66

X.2.5
X.2.5.1

MSCP en mode I2C Slave


Slave en Rception de donnes (venant du master)
ACK envoy par le slave S Slave adress 0 R/W A Data byte A Data byte A P

Le PIC dtecte le START sur la ligne SDA, il positionne le bit SSPSTAT.S et se prpare recevoir l'adresse, Le PIC dtecte la fin de rception de ladresse, il vrifie si elle correspond son adresse. Si cest ladresse dun autre slave, il ne ragit pas, il se met attendre le stoP_bit, Si ladresse reue correspond celle de notre PIC : o o o o Le LSB R/W est recopi dans SSPSTAT.R_W Le bit SSPSTAT.D_A passe 0 cest une adresse qui est arrive la suite dpend de l'tat de BF et SSPOV (voir tableau ci-dessus pour plus de dtail) : Si BF=0 et SSPOV=0 (tout est OK) SSPSR (l'adresse) est transfr dans SSPBUF BF passe 1 Un ACK (0) est plac sur la ligne SDA pendant le 9me coup d'horloge. Cest le PIC qui le fait, notre programme ne sen occupe pas Le drapeau PIR1.SSPIF passe 1 ce qui peut dclencher une interruption. Il doit tre r.a.z par soft. o Si BF=1 (Buffer SSPBUF plein) L'adresse ne sera pas transfre dans SSPBUF SSPOV sera positionn L'ACK ne sera pas transmis (NoAck) Le drapeau PIR1.SSPIF passe 1 ce qui peut dclencher une interruption, Il doit tre r.a.z par soft o Si BF=0 et SSPOV=1 (Buffer SSPBUF vide mais il y'a eu un overflow avant) SSPSR (l'adresse) est transfre dans SSPBUF SSPOV reste positionn L'ACK ne sera pas transmis (NoAck) Le drapeau PIR1.SSPIF passe 1 ce qui peut dclencher une interruption

67 Dans le cas "tout est OK" , notre programme doit : o o Vider SSPBUF pour que BF passe 0 et qu'on soit prt pour la suite. On vrifie le bit R_W, on trouve 0, on sait quon va recevoir un octet

Le PIC attend la rception du 8me bit, vrifie BF et SSPOV (on suppose que tout est OK), il transfert loctet arriv dans SSPBUF, BF et D_A passent 1. Le PIC envoie l'acquittement pendant le 9me bit et positionne SSPIF 1. Notre programme vide SSPBUF, BF repasse 0 Maintenant on peut soit recevoir, une autre donne, soit un stoP_condition, soit un Repeat_Start_Condition. Il faut donc avoir lil, sur les indicateurs, BF, SSPIF, P et S pour dcider de la suite des oprations

PIC Slave - Rception

Configuration du module I2C Attendre l'adresse en scrutant BF Vider SSPBUF pour baisser BF Attendre une donne en scrutant BF Vider SSPBUF pour baisser BF

Traiter la donne reue

BF

0
P

0 1

fin

68

X.2.5.2

Slave en transmission de donnes (vers le master)


ACK du slave S Slave adress reu R/W 1 A Data byte transmis A ACK du master Data byte transmis A P

Remarquons que le slave en transmission ne fait que prparer la donne transmettre dans son buffer SSPBUF. C'est le master qui dcide du dbut de l'change puisque c'est lui qui gre l'horloge. Toutefois, le slave peut bloquer un change en bloquant l'horloge 0. Clock Stretching. Le drapeau BF passe 1 quand le programme utilisateur crit un octet dans SSPBUF et revient 0 aprs la transmission du 8 bit de cet octet. Quand au dbut de l'change, on reoit l'adresse, celleci est transfre dans SSPBUF et BF reste 0 dans ce cas. Le PIC dtecte le Start_bit sur la ligne SDA, positionne le bit SSPSTAT.S et se prpare recevoir l'adresse, Le PIC dtecte la fin de rception de ladresse, il vrifie si elle correspond son adresse. Si cest ladresse dun autre slave, il ne ragit pas, il se met attendre le stoP_condition, Si ladresse reue correspond notre PIC. Le module I2C Slave recopie le bit R/W (1 dans ce cas) dans le bit R_W du registre SSPSTAT , puis vrifie les bits BF et SSPOV pour savoir si le contenu prcdent du registre SSPBUF t lu ou non o Supposons que tout est OK, BF=0 et SSPOV=0 Il recopie SSPSR (l'adresse) dans SSPBUF BF ne passe pas 1 Il place un ACK (0) sur la ligne SDA pendant le 9me coup d'hologe. Cest le PIC qui le fait, notre programme ne sen occupe pas Il place le bit CKP 0 ce qui force l'horloge 0.(Mode pause : Clock Stretching) Le drapeau PIR1.SSPIF passe 1 ce qui peut dclencher une interruption, il doit tre r.a.z par soft Le bit SSPSTAT.D_A passe 0 cest une adresse qui est arrive Notre programme dtecte que SSPIF est pass 1 : o o o o o o Si on vrifie le bit R_W, on trouve 1, on sait quon va envoyer un octet On na pas besoin de lire SSPBUF car BF est gal 0 On copie un octet de donne dans SSPBUF. L'indicateur SSPSTAT.BF passe 1 On replace le bit CKP 1 pour librer l'horloge. C'est le moyen d'informer le master que la donne est prte. Le master dtecte, la libration de lhorloge, envoie une rafale de coup dhorloge, loctet est transmis. Lindicateur SSPSTAT.BF repasse 0 aprs le 8me Maintenant le master peut renvoyer soit un ACK, soit NoACK : Si c'est un ACK, le PIC (slave) positionne le drapeau SSPIF et r.a.z le bit CKP pour mettre l'horloge en pause. Ceci donne au programme du slave le temps de prparer une nouvelle donne dans SSPBUF et librer l'horloge ensuite. Si le master envoie un STOP aprs le ACK, le slave ne le dtecte pas.

69 Si c'est un NOACK, le PIC (slave) positionne le drapeau SSPIF, le bit CKP reste 1 et le bit R_W passe 0. L'lectronique du slave est rinitialise, il est prt recevoir un nouveau START. Normalement, le master n'a pas besoin d'envoyer un STOP dans ce cas. S'il le fait quand mme, le slave le dtecte et positionne l'indicateur P.

PIC Slave - Transmission

Configuration du module I2C Attendre l'adresse en scrutant SSPIF Placer une donne dans SSPBUF Librer l'horloge l'aide de CKP Attendre fin transmission en scrutant SSPIF

CKP=0 ACK

Tester CKP pour dterminer la nature de l'ACK envoy par le maitre

CKP=1
fin

NoACK

70

X.2.5.3

Utilisation des interruptions

Voici les 5 vnements qui dclenchent l'interruption SSPI sur un PIC Slave. Evnement On a reu une adresse avec R/W=0 On a reu une donne On a reu une adresse avec R/W=1. L'horloge est force en pause On a fini la transmission d'un octet et reu un ACK. L'horloge est force en pause On dirait qu'on a reu une donne mais le buffer reste vide et l'horloge n'est pas pause: anormal. C'est un NOACK qui a t reu R/W 0 0 1 D/A 0 1 0 BF 1 1 0 CKP NU NU 0 Action Il faut vider SSPBUF pour baisser le drapeau BF et attendre une donne Il faut vider SSPBUF et attendre un vnement (qui peut tre un STOP) Il faut placer une donne dans SSPBUF et librer l'horloge en positionnant le bit CKP Il faut placer une donne dans SSPBUF et librer l'horloge en positionnant le bit CKP La squence d'change est finie

SSPIF 0 0 Reu NOACK CKP=1 0 Reu adresse avec R/W=0 BF 1 D/A On reu une donne 1 0 D/A 1

R/W

Reu adresse avec R/W=1, horloge=pause

On a envoy donne et reu ACK, horloge=pause

71

X.3

Le module MSSP en mode SPI

Ce mode (Serial Peripheral Interface) permet de transmettre et recevoir simultanment des mots de 8bits. Il utilise les broches : RC4/SDI : Serial Data Input (doit tre configure en entre) RC5/SDO : Serial Data Output (doit tre configure en sortie) RC3/SCK : Serial Clock (doit tre configure en sortie) RA4/SS : Slave Select : Utilise optionnellement en mode slave soit comme entre de synchronisation soit comme Chip Select en mode esclave multiples. Elle doit tre configure en E/S numrique laide du registre ADCON1 et comme entre laide du registre TRISA Le contrle du port se fait par les bits 0 5 du registre SSPCON et les bits 6 et 7 du registre SSPSTAT. Deux modes de fonctionnement sont possibles : Mode master : C'est le PIC qui gnre et gre l'horloge de synchronisation SCK. C'est donc lui qui dcide du moment de dmarrage d'une transmission rception. Mode slave : L'horloge est gnre par le circuit (master) avec lequel on communique. Notre Pic dmarre une mission/rception au moment ou il commence recevoir l'horloge venant du matre. L'mission et la rception se font simultanment par le mme registre dcalage SSPSR. Un cycle d'mission/rception commence au moment o on crit un octet dans le registre SSPBUF, cet octet est copi par le PIC dans le registre dcalage SSPSR auquel il applique ensuite une rafale de 8 coups d'horloges. L'octet est alors transmis bit par bit sur la sortie SDO et il est remplac par les bits qui arrivent sur l'entre SDI. A la fin, le contenu de SSPSR (c.a.d loctet reu) est copi dans SSPBUF. Cette action est annonce par la mise 1 du bit BF et du drapeau dinterruption SSPIF. Le bit BF est un bit en lecture seule, la seule faon de le remettre zro est de lire le contenu du registre SSPBUF. Le drapeau SSPIF doit tre remis zro laide de linstruction BCF par exemple. SSPBUF

SDO SDI

SSPSR

72

X.3.1

Le mode SPI master


SDO

PIC (master)

SDI SCK

Circuit quelconque (slave)

SDO

Slave 1 RX Tx horloge slection Slave 2 RX

PIC (master)

SDI SCK

Ri Rj

Le PIC fonctionne en master, il gnre et gre l'horloge de synchronisation. C'est lui qui dcide du moment o dmarrer une mission/rception. Le PIC peut communiquer avec plusieurs slaves, dans ce cas il faut dsigner le slave avec lequel on dsire communiquer, il faut que les slaves disposent d'une entre de slection CS qu'on peut contrler avec une sortie quelconque d'un port d'E/S. Dans le cas ou les slaves sont des PIC, l'entre de slection est RA4/SS

Le cycle mission/rception d'un octet dmarre au moment o on crit dans le registre horloge SSPBUF. A la fin du cycle, les bits SSPSTAT.BF et PIR1.SSPIF sont slection positionns pour nous informer quun octet a t transmis et que l'octet reu attend d'tre lu dans le registre SSPBUF. Ces deux bits doivent tre remis zro par nos soins, il faut juste remarquer que BF est un bit en lecture seule, pour le remettre zro il faut lire le registre SSPBUF
Tx

Le registre SSPCON en mode master : SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0

SSPEN : Validation du module MSSP (1 = valid) CKP : Clock Polarity : dfinit l'tat de repos de l'horloge (idle state) 0 : Bas au repos, 1 : Haut au repos SSPM3:SSPM0 : Ces bits dfinissent le mode de fonctionnement du module 0000 : SPI Master : dbit = Fosc/4 0001 : SPI Master : dbit = Fosc/16 0010 : SPI Master : dbit = Fosc/64 0011 : SPI Master : dbit = Ftmr2/2 Le registre SSPSTAT en mode master : SMP CKE BF

Seuls les bits utiliss par le mode SPI master sont reprsents ici. SMP : Sample bit : front d'horloge SCK sur lequel on lit le bit prsent sur l'entre SDI 0 : milieu de priode d'horloge 1 : fin de la priode d'horloge

73

CKE : Clock Edge Select : front de l'horloge SCK sur lequel on place un bit sur la sortie SDO. Ceci va dpendre du bit CKP. Si on dsigne le niveau actif de l'horloge comme le niveau oppos du niveau de repos dfini par CKP : 0 : Les bits sont transmis au moment o l'horloge passe au niveau actif 1 : Les bits sont transmis au moment o l'horloge passe au niveau de repos BF : Indicateur qui indique quand il passe 1 que le registre SSPBUF contient l'octet qui vient d'tre reu. Ce bit est remis automatiquement zro au moment de la lecture du registre SSPBUF. Le dessin ci-dessous montre la configuration la plus frquemment utilise. Le Master crit au dbut de la priode dhorloge et lit aux milieux. Le Slave en fait de mme.

CKP=1 CKE=0

Le slave doit lire ici B7 B6 B5 B4 B3 B2 B1 B0

SDO
SMP=0 SDI

B7

B6

B5

B4

B3

B2

B1

B0

Le master lit ici

X.3.1.1

Rcapitulation mode master

En rsum, les tapes suivre pour utiliser MSSP en mode SPI master sont : Configurer la direction des lignes RC4/SDI, RC5/SDO et RC3/SCK Dfinir la polarit de l'horloge par le bit SSPCON.CKP Dfinir la frquence de l'horloge l'aide des bits SSPCON.SSPMx Dfinir le moment de lecture des bits entrant l'aide du bit SSPSTAT.SMP Dfinir le moment decriture des bits sortants l'aide du bit SSPSTAT.CKE Valider le port par le bit SSPCON.SSPEN Une fois cette initialisation ralise, l'mission/rception se fait comme suit : Copier un octet dans SSPBUF pour dmarrer lmission/rception attendre la fin en surveillant SSPSTAT.BF ou PIR1.SSPIF La lecture de SSPBUF est la seule faon de r..z le bit SSPSTAT.BF Si on lutilise, le drapeau PIR1.SSPIF doit tre remis 0

74

X.3.2

Le mode SPI slave

En mode slave, le module MSSP fonctionne d'une faon similaire au mode master part qu'ici, ce n'est pas notre PIC qui gnre l'horloge et dcide des moments de communication. Il se contente de raliser une mission/rception chaque fois qu'il reoit une rafale d'horloge sur la broche SCK qui est devenue une entre. Le registre SSPSTAT en mode slave : SMP CKE BF

SMP : doit tre mis 0 : la lecture sur SDI doit toujours se faire au milieu du cycle horloge. CKE : Clock Edge Select : ce bit fonctionne comme en mode master 0 : Les bits sont transmis au moment o l'horloge passe au niveau actif 1 : Les bits sont transmis au moment o l'horloge passe au niveau de repos. Dans ce cas le mode Slection de slave soit tre obligatoirement utilis BF : Indicateur qui indique quand il passe 1 que le registre SSPBUF contient l'octet qui vient d'tre reu. Ce bit est remis automatiquement zro au moment de la lecture du registre SSPBUF.

Le registre SSPCON en mode slave : WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0

WCOL : Write Collision Detect bit : Cet indicateur d'erreur est positionn quand on crit une valeur dans SSBUF alors que la valeur prcdente n'est pas encore transmise. Il doit tre remis zro par programme SSPOV : Receive Overflow Indicator bit : Cet indicateur d'erreur est positionn quand une nouvelle donne est reue alors que le registre SSBUF n'est pas encore lu. Dans ce cas la nouvelle donne est perdue. Ce bit doit tre remis zro par programme SSPEN : Validation du module SSP (1 = valid) SKP : Clock Polarity : dfinit l'tat de repos de l'horloge (idle state) 0 : Bas au repos, 1 : Haut au repos (doit concider avec le choix du master) SSPM3:SSPM0 : Ces bits dfinissent le mode de fonctionnement du module 0100 : SPI Slave : mode Slave Select, l'entre SS est valide, il faut la placer 0 quand on veut communiquer avec ce slave (chip select) 0100 : SPI Slave : l'entre SS est inhibe (fonctionne en E/S normale) Dans le cas ou l'entre SS est utilise, elle doit tre configure en entre par TRISA.5 et elle doit tre configure comme entre numrique l'aide du registre ADCON1 car elle est multiplexe avec une entre analogique du module CAN.

X.3.2.1

Les chronogrammes de fonctionnement :

Un cycle d'mission/rception dmarre au moment du dmarrage de l'horloge externe. Si on ne dsire raliser que des rceptions, on n'a pas besoin d'crire chaque fois dans SSPBUF du moment que ce n'est pas nous qui dmarrons le cycle Tx/Rx

75 Si on ne dsire raliser que des transmissions, il va de soi que nous devons crire les donnes transmettre dans SSPBUF, mais il va falloir aussi lire ce registre la fin de chaque cycle Tx/Rx pour baisser l'indicateur BF, sinon une erreur d' Overflow sera dclenche (SSPOV) Le chronogramme ci-dessous illustre la configuration la plus courante, CKP=1, CKE=0, CMP=0(obligatoire). Les bits sont transmis au dbut de la priode dhorloge et lu au milieu de celle ci. Il n'est pas ncessaire d'utiliser l'entre SS dans ce cas.

CKP=1 CKE=0 SDI


B7 B6 B5 B4 B3 B2 B1 B0

moment de lecture (SMP=0) SDO


B7 B6 B5 B4 B3 B2 B1 B0

Moment dcriture : CKE=0

76

XI

Annexe : Gestion du Programme Counter,


Le PC est un registre de 13 bits, il peut donc adresser 8 k de mmoire programme. PCH PCL

PCL (8 bits) est la partie basse de PC, il est accessible en lecture criture PCH (5 bits) est la partie haute de PC, il n'est pas accessible directement. On peut toutefois le modifier indirectement l'aide du registre PCLATH qui est une registre SFR o seuls 5 bits sont utilis.

XI.1 GOTO calcul : modification de la valeur de PCL


Quand on crit quelque chose dans PCL, alors le contenu de PCLATH est automatiquement copi dans PCH. Donc, avant d'crire dans PCL s'assurer que la valeur contenue dans PCLATH est correcte. PCH PCL

PCLATH Ecriture dans PCL

XI.2 Instruction de branchement


Un branchement consiste modifier la valeur de PC. Mais dans les instructions de branchement, seulement 11 bits sont utiliss pour coder l'adresse de destination, ce qui donne au maximum un intervalle de 2 k alors que nous avons une mmoire programme de 8k. Pour remdier ce problme, les deux bits manquants pour complter les 13 bits de PC sont pris dans PCLATH : PC

PCLATH 11 bits venant de l'instruction

La mmoire programme apparat donc comme organise en 4 page de 2 k chacune. Lors d'un saut, l'adresse instruction prcise la destination l'intrieur d'une page et les deux bits 3 et 4 de PCLATH dsignent la page Attention, en assembleur on ne prcise pas les adresses mais on utilise des tiquettes qui correspondent des adresses compltes (13 bits). Cela ne change rient car seuls 11 bits de l'tiquette seront envoys dans le PC et c'est nous de grer les deux bits de PCLATH pour complter l'adresse de destination.

77
PCLATH

00 01 10 11

Page 0 Page 1 Page 2 Page 3

0 2k 4k 6k 8k

mmoire programme
Fig. XI.1 : gestion de la mmoire programme lors d'une instruction de saut

XII Rfrences
1) 2) 3) 4) 5) 6) 7) http://www.multimania.com/pmorphe/bienvenuechez_atm.htm La programmation des PICs, Premire partie PIC16F84, Rev 5, Bigonff La programmation des PICs, Secode partie-PIC16F876/877, Rev 7, Bigonff PIC 16F87X Data Sheet (DS30292C) , Microchip PICmicro Mid-Range MCU Family Reference Manual (DS33023A), Microchip La page web de Jacques Weiss sur les PIC La page web d'Offset sur les PIC