Sie sind auf Seite 1von 53

PIC18Fxxxx

Christian Dupaty Professeur de gnie lectrique Acadmie dAix-Marseille christian.dupaty@ac-aix-marseille.fr

PIC18Fxxxx - ressources Table des matires 1. Famille et constitution (exemple famille 18FX62X) .......................................................................... 3 2. Choix de lhorloge............................................................................................................................. 5 3. RESET ............................................................................................................................................. 8 4. Organisation mmoire ...................................................................................................................... 9 4.1. PIC18Fxx2x, Mmoire programme.............................................................................................. 9 4.2. Lecture / Ecriture FLASH ........................................................................................................... 10 4.3. PIC18Fx620, Mmoire RAM...................................................................................................... 11 4.4. Adressage direct en RAM.......................................................................................................... 12 4.5. Adressage indirect en RAM ....................................................................................................... 12 5. Acces EEPROM / FLASH .............................................................................................................. 13 6. Registres internes .......................................................................................................................... 14 7. Interruptions ................................................................................................................................... 16 8. Jeu dinstructions ............................................................................................................................ 20 9. Ports parallles ............................................................................................................................... 24 10. CAN 10bits................................................................................................................................. 25 11. Detection de faible tension (LVD) .............................................................................................. 26 12. TIMER0...................................................................................................................................... 27 13. TIMER1...................................................................................................................................... 28 14. TIMER2...................................................................................................................................... 29 15. TIMER3...................................................................................................................................... 30 16. Capture/Compare/PWM ............................................................................................................ 31 16.1. CAPTURE ............................................................................................................................... 31 16.2. COMPARE .............................................................................................................................. 33 16.3. PWM ....................................................................................................................................... 35 17. Chien de garde .......................................................................................................................... 36 18. Communications sries asynchrones ........................................................................................ 37 19. Communications sries synchrones : bus SPI .......................................................................... 44 20. Communications sries synchrones : bus I2C (IIC) .................................................................. 47

cours PICs

2 / 53

PIC18Fxxxx - ressources

1. Famille et constitution (exemple famille 18FX62X)


Caractristiques Frquence Horloge MHz Mmoire programme FLASH Programme (Instructions) Mmoire donnes Mmoire EEPROM Interruptions Ports parallles Timers Capture/Compare/PWM Communications sries CAN 10-bit RESETS PIC18F2xxxx DC-40 MHz 64KO 32768 3968 Octets 1024 Octets 17 25 4 2 SPI / I2C / USART 10 entres POR, BOR,RESET Instruction,Stack Full,Stack Underflow (PWRT, OST) oui 75 28-pin DIP 28-pin SOIC PIC18F4xxxx DC-40 MHz 64KO 32768 3968 Octets 1024 Octets 18 36 4 2 SPI / I2C / USART 13 entres POR, BOR,RESET Instruction,Stack Full,Stack Underflow (PWRT, OST oui 75 40-pin DIP 44-pin PLCC, 44-pin TQFP

Dtection de VDD faible programmable Instructions Boitiers

- Architecture HARVARD - Horloge max de 40 MHz par multiplication interne avec PLL (avec quartz 10MHz) - PIC18F avec rom programme FLASH - Programmation et debug sur cible (In-Circuit Serial Programming, In-Circuit debug, perte de RB6, RB7) - Chaque instruction sur 2 octets - Mmoire EEPROM accs alatoire (sauvegarde de donnes) - TIMERS : Microchip appelle TIMER des compteurs - Capture : permet la mesure de temps - Compare : permet la production de signaux rectangulaires - SPI : communications sries synchrones sans protocole logiciel - I2C : standard Philips, communications sries synchrones avec protocole logiciel - USART : communication sries asynchrones (RS232 et RS485) - CAN : convertisseur analogique numrique 10 entres multiplexes Le PIC18 possde une multiplication 8x8 matrielle, extrmement rapide (100nS 1uS) ce qui lui confre des possiblits de DSP particulirement utiles pour le traitement numrique du signal

cours PICs

3 / 53

PIC18Fxxxx - ressources

Le principe du flux de donnes en pipeline permet un temps dexcution sur 1 cycle dhorloge Exemple : T CY0 TCY1 TCY2 TCY3 TCY4 TCY5 1. MOVLW 55h Fetch 1 Execute 1 2. MOVWF PORTB Fetch 2 Execute 2 3. BRA SUB_1 Fetch 3 Execute 3 4. BSF PORTA, BIT3 (force un NOP) Fetch 4 vide (NOP) 5. Instruction @ laddresse SUB_1 Fetch SUB_1 Execute SUB_1

cours PICs

4 / 53

PIC18Fxxxx - ressources

2. Choix de lhorloge
1. LP Quartz faible puissance 2. XT Quartz ou oscillateur externe 3. HS Quartz ou oscillateur externe rapide 4. HS + PLL (F x 4)
Types Frquences LP 200kHz XT 200 kHz 1.0MHz 4.0MHz HS 4.0 MHz 8.0MHz 20.0MHz C1 15 pF 47-68pF 15 pF 15 pF 15 pF 15-33 pF 15-33pF C2 15 pF 47-68 pF 15 pF 15 pF 15 pF 15-33 pF 15-33 pF

5. RC Rsistance/capacit externe (Fosc/4 sortie sur OSC2) 6. RCIO Rsistance/capacit externe (RA6 est un port //)

7. EC Source dhorloge externe (Fosc/4 sortie sur OSC2) 8. ECIO Source dhorloge externe (RA6 est un port //)

Remarque : le type doscillateur doit tre dclar dans la MPLAB dans le menu configure-> configuration bits

cours PICs

5 / 53

PIC18Fxxxx - ressources

Configuration de lhorloge interne


Dans MPLAB :

INT RC-CLOCKOUT on RA6, PORT on RA7 : lhorloge interne sort sur RA6, RA7 est un port // INT RC-Port on RA6, Port on RA7 : RA6 et RA7 sont des ports // Il est possible de ne pas utiliser MPLAB pour grer les bits de configuration mais une directive du C18 (dans ce cas cocher Configuration Bits set in code ) En C18 : #pragma config OSC = INTIO7 //pour INTRC-OSC2 as Clock Out, OSC1 as RA7 #pragma config OSC = INTIO67 //pour INTRC-OSC2 as RA6, OSC1 as RA7 #pragma config WDT = OFF //pour watch dog timer disable #pragma config LVP = OFF //pour low voltage program disable Pour plus dinformations consulter : PIC18 CONFIGURATION SETTINGS ADDENDUM.pdf

cours PICs

6 / 53

PIC18Fxxxx - ressources Aprs dmarrage du programme il est possible de modifier la frquence et la source de lhorloge grce aux registres OSCCON et OSCTUNE.

Configuration de lhorloge interne (DOC PIC18F4620) , on suppose que les bits de configuration active la base de temps de 8MHz :

Les bits IRCF de OSCCON permettent de choisir la frquence de base (31KHz 8MHz). (1MHz par dfaut) Les bits TUN de OSCTUNE permettent dajuster la frquence interne (en cas de variation de temprature par exemple) Le bit PLLEN de OSCTUNE permet dactiver la PLL qui multipliera par quatre la frquence de base (donc max 32MHz), dsactive par dfaut) Les bits SCS de OSCCON permettre de choisir la source de lhorloge des priphriques et du CPU du PIC. (Interne par dfaut) Les bits OSTS et IOFC de OSCCON permettent de connatre ltat de lhorloge (active, stable )

cours PICs

7 / 53

PIC18Fxxxx - ressources

3. RESET
Les diffrentes sources de linterruption RESET

RESET EXTERNE

D permet une dcharge plus rapide de C lorsque VDD descend. R<40KO, C=01uF 100<R1<1KO, R1 limite I dans /MCLR en cas de dcharge lectrostatique (ESD)

Aprs un RESET lorigine de celui-ci peut tre dtermine en lisant le REGISTRE RCON (0xFD0) 7 6 5 4 3 2 IPEN /RI /TO /PD
Condition Program Counter 0000h 0000h 0000h 0000h 0000h 0000h 0000h PC + 2 0000h PC + 2 RCON Register RI TO PD

1 /POR
POR BOR

0 /BOR
STKFUL STKUNF

Power-on Reset MCLR Reset during normal operation Software Reset during normal operation Stack Full Reset during normal operation Stack Underflow Reset during normal operation MCLR Reset during SLEEP WDT Reset WDT Wake-up Brown-out Reset Interrupt wake-up from SLEEP

0--1 1100 0--u uuuu 0--0 uuuu 0--u uu11 0--u uu11 0--u 10uu 0--u 01uu u--u 00uu 0--1 11u0 u--u 00uu

1 u 0 u u u 1 u 1 u

1 u u u u 1 0 0 1 1

1 u u u u 0 1 0 1 0

0 u u u u u u u 1 u

0 u u u u u u u 0 u

u u u u 1 u u u u u

u u u 1 u u u u u u

IPEN =1 valide les niveaux de priorits des interruptions

cours PICs

8 / 53

PIC18Fxxxx - ressources

4. Organisation mmoire
Les PIC18 sont architecture HAVARD. Les espaces mmoires programmes et donnes (appels registres, les registres des priphriques sont appels registres spciaux) sont distincts. Ceci implique la cration dinstructions et de processus diffrents pour laccs donnes en ROM et en RAM.

ROM FLASH 32 KO sur P18F452 (bus pour 2MO)

Donnes 8 bits

Unit centrale Noyau RISC PIC 18

Donnes 8 bits

RAM 1.5 KO sur P18F452

Adresses 20 bits

Adresses 11 bits

4.1.

PIC18Fxx2x, Mmoire programme

Il existe trois adresses dinterruption : RESET, HPI et LPI. Microchip utilise abusment le mot vecteur pour dsigner ces adresses, en effet ces adresses sont celles des sous programmes excuter et non les vecteurs sur ces adresses. La taille de la pile nest pas modifiable, elle contient 31 niveaux Lespace mmoire va de 0x0000 0x200000 (soit 2MO). Sur les PIC18Fx620 seuls 64 KO sont implants.

cours PICs

9 / 53

PIC18Fxxxx - ressources

4.2.

Lecture / Ecriture FLASH

Attention on ne peut crire dans la mmoire FLASH que des blocs de 64 octets, pour cela il faut crire dans une zone de RAM appele Holding Register , puis excuter une procdure dcriture en ROM FLASH relativement complexe. Il est recommand de placer les donnes conserver de manire permanente en EEPROM

cours PICs

10 / 53

PIC18Fxxxx - ressources

4.3.

PIC18Fx620, Mmoire RAM

cours PICs

11 / 53

PIC18Fxxxx - ressources

4.4.

Adressage direct en RAM

BSR contient le numro dune des 8 banques de donnes

4.5.

Adressage indirect en RAM

Il existe 3 registres dindirection (ou pointeurs) FSR (FSR0, FSR1, FSR2)

Exemple : Mise 0 de la BANK 1 LFSR FSR0 ,0x100 CLRF POSTINC0 ;FSR0 pointe sur BANK1 ; Efface le contenu ;de ladresse pointe ;par FSR0 puis ;incrmente FSR0 ; Test si FSR0=0x200 ; Non, efface le ; suivant

NEXT

BTFSS FSR0H, 1 GOTO NEXT CONTINUE ;

cours PICs

12 / 53

PIC18Fxxxx - ressources

5. Acces EEPROM / FLASH


256 octets dEEPROM (0x00 0xFF) La lecture seffectuent en mode index (ladresse doit tre olace dans le pointeur EEADR). La mise 1 du bit RD de EECON1 provoque la lecture de lEEPROM, le rsultat se trouve dans EEDATA. Lcriture seffectuent en mode index, ladresse doit tre olace dans le pointeur EEADR, la danne crire dans le registre EEDATA.. La mise du bit WREN de EECON1 autorise les critures. Un squence dcriture dans EECON2 (0x55 puis 0xAA) est ncessaire. La mise 1 du bit WR de EECON1 provoque lcrite de la donne ladresse point par EEADR. En fin dcriture WR repasse 0. Le drapeau EEIF indique galement la fin de lcriture (possibilit de gestion par IT)

Exemple : Lecture de lEEPROM MOVLW DATA_EE_ADDR ; Adresse lire dans W MOVWF EEADR ; W dans pointeur adresse BCF EECON1,EEPGD ;Sel accs EEPROM (pas FLASH) BSF EECON1,RD ; lecture EEPROM, dans EEDATA MOVF EEDATA,W ; W = EEDATA

Exemple : Ecriture dans l EEPROM MOVLW DATA_EE_ADDR ; MOVWF EEADR ; Data Memory Address to write MOVLW DATA_EE_DATA ; MOVWF EEDATA ; Data Memory Value to write BCF EECON1, EEPGD ; Point to DATA memory BSF EECON1, WREN ; Enable writes BCF INTCON, GIE ; Disable Interrupts MOVLW 55h ; MOVWF EECON2 ; Write 55h MOVLW AAh ; MOVWF EECON2 ; Write AAh BSF EECON1, WR ; Set WR bit to begin write BSF INTCON, GIE ; Enable Interrupts SLEEP ; Wait for interrupt BCF EECON1, WREN ; Disable writes

Registre EECON1 (0xFA6)


7 6 5 4 3 2 1 EEPGD EEFS FREE WRERR WREN WR EEPGD: Choix de la mmoire (FLASH ou EEPROM) 1 = Acces mmoire programme FLASH 0 = Acces mmoire de donnes EEPROM CFGS: Acces mmoire ou configuration 1 = Acces aux registres de configuration ou de calibration 0 = Acces FLASH ou EEPROM FREE: Validation deffacement 64 octets en FLASH 1 = Efface la mmoire FLASH adresse par TBLPTR la prochaine commande WR (RAZ du bit automatique) 0 = Effectue seulement une criture WRERR: Indication derreur en EEPROM 1 = une opration dcriture a t arrte trop tt 0 = lopration dcriture sest termine correctement WREN: autorisation dcriture en EEPROM 1 = cycle dcriture autoris 0 = cycle dcriture interdit WR: Contrle dcriture 1 = commence un cycle dcriture ou deffacement en EEPROM ou en FLASH Initiates a data EEPROM erase/write cycle or a program memory erase cycle or write cycle. Ce bit est mis 0 la fin du cycle 0 = Cycle dcriture termin RD: Contrle de lecture 1 = commence une lecture en EEPROM (1 cycle machine) (RAZ automatique en fin de cycle) 0 = ne pas commencer un cycle de lecture 0 RD

cours PICs

13 / 53

PIC18Fxxxx - ressources

6. Registres internes
ADR REGISTRE Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Value on POR page FFFh Top-of-Stack upper Byte (TOS<20:16>) ---0 0000 37 TOSU FFEh Top-of-Stack High Byte (TOS<15:8>) 0000 0000 37 TOSH FFDh Top-of-Stack Low Byte (TOS<7:0>) 0000 0000 37 TOSL FFCh STKFUL STKUNF Return Stack Pointer 00-0 0000 38 STKPTR FFBh Holding Register for PC<20:16> 0 0000 39 PCLATU FFAh Holding Register for PC<15:8> 0000 0000 39 PCLATH FF9h PC Low Byte (PC<7:0>) 0000 0000 39 PCL FF8h bit21 Program Memory Table Pointer Upper Byte (TBLPTR<20:16>) --00 0000 58 TBLPTRU FF7h 0000 0000 58 TBLPTRH Program Memory Table Pointer High Byte (TBLPTR<15:8>) FF6h 0000 0000 58 TBLPTRL Program Memory Table Pointer Low Byte (TBLPTR<7:0>) FF5h Program Memory Table Latch 0000 0000 58 TABLAT FF4h Product Register High Byte xxxx xxxx 69 PRODH FF3h Product Register Low Byte xxxx xxxx 69 PRODL PEIE/GI FF2h GIE/GIEH TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 73 INTCON EL
FF1h FF0h FEFh FEEh FEDh FECh FEBh FEAh FE9h FE8h FE7h FE6h FE5h FE4h FE3h FE2h FE1h FE0h FDFh FDEh FDDh FDCh FDBh FDAh FD9h FD8h FD7h FD6h FD5h FD4h FD3h FD2h FD1h FD0h FCFh FCEh FCDh FCCh FCBh FCAh FC9h INTEDG1 INTEDG2 TMR0IP RBIP 1111 -1-1 INTCON2 RBPU G0 INT1IP INT2IE INT1IE INT2IF INT1IF 11-0 0-00 INTCON3 INT2IP Uses contents of FSR0 to address data memory - value of FSR0 not changed n/a INDF0 n/a POSTINC0 Uses contents of FSR0 to address data memory - value of FSR0 post-incremented n/a POSTDEC0 Uses contents of FSR0 to address data memory - value of FSR0 post-decremented n/a PREINC0 Uses contents of FSR0 to address data memory - value of FSR0 pre-incremented n/a PLUSW0 value of FSR0 offset by value in WREG Indirect Data Memory Address Pointer 0 High Byte xxxx FSR0H Indirect Data Memory Address Pointer 0 Low Byte xxxx xxxx FSR0L Working Register xxxx xxxx WREG Uses contents of FSR1 to address data memory - value of FSR1 not changed n/a INDF1 n/a POSTINC1 Uses contents of FSR1 to address data memory - value of FSR1 post-incremented n/a POSTDEC1 Uses contents of FSR1 to address data memory - value of FSR1 post-decremented n/a PREINC1 Uses contents of FSR1 to address data memory - value of FSR1 pre-incremented PLUSW1 value of FSR1 offset by value in WREG Indirect Data Memory Address Pointer 1 High Byte xxxx FSR1H Indirect Data Memory Address Pointer 1 Low Byte xxxx xxxx FSR1L Bank Select Register 0000 BSR Uses contents of FSR2 to address data memory - value of FSR2 not changed n/a INDF2 n/a POSTINC2 Uses contents of FSR2 to address data memory - value of FSR2 post-incremented n/a POSTDEC2 Uses contents of FSR2 to address data memory - value of FSR2 post-decremented n/a PREINC2 Uses contents of FSR2 to address data memory - value of FSR2 pre-incremented n/a PLUSW2 value of FSR2 offset by value in WREG Indirect Data Memory Address Pointer 2 High Byte xxxx FSR2H Indirect Data Memory Address Pointer 2 Low Byte xxxx xxxx FSR2L N OV Z DC C x xxxx STATUS Timer0 Register High Byte 0000 0000 TMR0H Timer0 Register Low Byte xxxx xxxx TMR0L TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 T0CON INTED 74 75 50 50 50 50 50 50 50 n/a 50 50 50 50

50 50 49 50 50 50 50 50 50 50 52 103 103 101

OSCCON LVDCON WDTCON RCON TMR1H TMR1L T1CON TMR2 PR2 T2CON SSPBUF

IPEN

IRVST

LVDEN RI

LVDL3 TO

LVDL2 PD

LVDL1 POR

SCS LVDL0 SWDTE BOR

0 --00 0101 0 0--1 11qq xxxx xxxx xxxx xxxx

21 189 201 53, 28, 105 105 105 109 110 109 123

Timer1 Register High Byte Timer1 Register Low Byte RD16 T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS

TMR1ON 0-00 0000 0000 0000 1111 1111

Timer2 Register Timer2 Period Register TOUTPS TOUTPS2 TOUTPS1 3 SSP Receive Buffer/Transmit Register TMR2O T2CKPS1 N

TOUTPS0

T2CKPS0 -000 0000 xxxx xxxx

cours PICs

14 / 53

PIC18Fxxxx - ressources

FC8h FC7h FC6h FC5h FC4h FC3h FC2h FC1h FC0h FBFh FBEh FBDh FBCh FBBh

SSPADD SSPSTAT SSPCON1 SSPCON2 ADRESH ADRESL ADCON0 ADCON1 CCPR1H CCPR1L CCP1CON CCPR2H

SSP Address Register in I2 SMP CKE WCOL

C Slave Mode. SSP Baud Rate Reload Register in I2C Master Mode. D/A P S R/W UA CKP ACKEN SSPM3 RCEN SSPM2 PEN SSPM1 RSEN

0000 0000 BF SSPM0 SEN 0000 0000 0000 0000 0000 0000 xxxx xxxx xxxx xxxx

132 124 125 135 185 185 179 180

SSPOV SSPEN ACKSTA GCEN ACKDT T A/D Result Register High Byte A/D Result Register Low Byte ADCS1 ADFM ADCS0 ADCS2 CHS2

CHS1

CHS0 PCFG3

GO/DONE PCFG2 PCFG1

ADON PCFG0

0000 00-0 00-- 0000

Capture/Compare/PWM Register1 High Byte Capture/Compare/PWM Register1 Low Byte DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0

xxxx xxxx xxxx xxxx --00 0000 xxxx xxxx xxxx xxxx CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000

119 119, 115 119, 121 119, 121 115

Capture/Compare/PWM Register2 High Byte Capture/Compare/PWM Register2 Low Byte DC2B1 DC2B0

CCPR2L FBAh CCP2CON FB4h FB9h FB3h TMR3H FB2h TMR3L FB1h T3CON
FB0h FAFh FAEh FADh FACh FABh FAAh

Timer3 Register High Byte Timer3 Register Low Byte RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS

xxxx xxxx xxxx xxxx TMR3ON 0000 0000

111 111 111

SPBRG RCREG TXREG TXSTA RCSTA

USART1 Baud Rate Generator USART1 Receive Register USART1 Transmit Register CSRC SPEN TX9 RX9 TXEN SREN SYNC CREN ADDEN BRGH FERR TRMT OERR TX9D RX9D

0000 0000 0000 0000 0000 0000 0000 -010 0000 000x

166, 172 170, 164 165

EEADR EEDATA FA7h EECON2 FA6h EECON1 FA3h FA5h FA2h IPR2 FA1h PIR2 FA0h PIE2 F9Fh IPR1 F9Eh PIR1 F9Dh PIE1 F97h F9Ch F96h TRISE F95h TRISD F94h TRISC F93h TRISB F92h TRISA F8Eh F91h F8Dh LATE F8Ch LATD F8Bh LATC F8Ah LATB F89h LATA F85h F88h F84h PORTE F83h PORTD F82h PORTC F81h PORTB F80h PORTA
FA9h FA8h

Data EEPROM Address Register Data EEPROM Data Register Data EEPROM Control Register 2 (not a physical register) EEPGD CFGS FREE WRERR WREN WR RD

0000 0000 0000 0000

65, 68 68 65, 68

xx-0 x000

66

PSPIP PSPIF PSPIE

ADIP ADIF ADIE

RCIP RCIF RCIE

EEIP EEIF EEIE TXIP TXIF TXIE

BCLIP BCLIF BCLIE SSPIP SSPIF SSPIE

LVDIP LVDIF LVDIE CCP1IP CCP1IF CCP1IE

TMR3IP TMR3IF TMR3IE TMR2IP TMR2IF TMR2IE

CCP2IP CCP2IF CCP2IE TMR1IP TMR1IF TMR1IE

1 1111 0 0000 0 0000 1111 1111 0000 0000 0000 0000

81 77 79 80 76 78

IBF

OBF

IBOV

PSPMODE

Data Direction bits for PORTE

0000 -111 1111 1111 1111 1111 1111 1111 -111 1111

96 94 91 88 85

Data Direction Control Register for PORTD Data Direction Control Register for PORTC Data Direction Control Register for PORTB TRISA6 Data Direction Control Register for PORTA Read PORTE Data Latch, Write PORTE Data Latch

-xxx xxxx xxxx xxxx xxxx xxxx xxxx -xxx xxxx

97 93 91 88 85

Read PORTD Data Latch, Write PORTD Data Latch Read PORTC Data Latch, Write PORTC Data Latch Read PORTB Data Latch, Write PORTB Data Latch LATA6 Read PORTA Data Latch, Write PORTA Data Latch

Read PORTE pins, Write PORTE Data Latch Read PORTD pins, Write PORTD Data Latch Read PORTC pins, Write PORTC Data Latch Read PORTB pins, Write PORTB Data Latch RA6 Read PORTA pins, Write PORTA Data Latch

-000 xxxx xxxx xxxx xxxx xxxx xxxx -x0x 0000

97 93 91 88 85

cours PICs

15 / 53

PIC18Fxxxx - ressources

7. Interruptions
IPEN : interrupt priority enable. Cette fonction peut tre dsactive pour avoir une compatibilit logicielle avec lunit centrale PIC16. Si IPEN est 1, chaque source dinterruption peut tre configure comme prioritaire ou non (entre autres : registres IPR1 et IPR2). Si elle est prioritaire, une autre source dinterruption sera prise en compte seulement la fin de linterruption prioritaire. GEIH : global interrupt enable high (validation des interruptions prioritaires, adresse 0x0008) GEIL : global interrupt enable low (validation des interruptions non prioritaires, adresse 0x0018) Chaque source dinterruption possde -un bit dautorisation E (enable) ce bit doit tre 1 pour valider linterruption -un bit dtat F (flag) qui indique sil y a eu ou non un vnement Exemple : Pour utiliser linterruption gnre lors du dbordement du TIMER0 il faut -mettre INT0IE 1 -mettre GEIH ou GEIL 1 Linterruption est dclanche lors du dbordement, il faut OBLIGATOIREMENT remettre INT0IF 0 avant de ressortir de linterruption, sinon elle reste active. Dbordement (Overflow) CLK TIMER 0 16 bits RAZ par logiciel INTOIF 1 INTOIE 1 TMR0IP 1 GIEH & & Interruption vers adresse 0x0008n

INTCON (0xFF2): un 1 valide lit concerne


GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF GIE/GIEH: Global Interrupt Enable bit Valide toutes les interruptions non masques si IPEN = 0 Valide toutes les interruptions prioritaires si IPEN = 1 PEIE/GIEL: Peripheral Interrupt Enable bit Valide toutes les interruptions de priphriques si IPEN = 0 Valide toutes les interruptions non prioritaires si IPEN = 1 TMR0IE: TMR0 Overflow Interrupt Enable bit Valide linterruption de dbordement de TMR01 INT0IE: INT0 External Interrupt Enable bit Valide linterruption externe INTOI RBIE: RB Port Change Interrupt Enable bit Valide linterruption sur un changement sur PB4-PB7 TMR0IF: TMR0 Overflow Interrupt Flag bit Drapeau dindication dIT TMR0 INT0IF: INT0 External Interrupt Flag bit Drapeau dindication dIT INT0 RBIF: RB Port Change Interrupt Flag bit Drapeau dindication dIT RBI (au moins une ligne RB4-RB7 a chang) INT0IF RBIF

INTCON2 (0xFF1): Dtection de front / Dbordement TIMER0 / PORTB


RBPU INTEDG0 INTEDG1 INTEDG2 TMR0IP RBPU: PORTB Pull-up Enable bit Pas de pull up sur PORB INTEDG0:External Interrupt0 Edge Select bit 1 pour front montant 0 INTEDG1: External Interrupt1 Edge Select bit pour front descandant INTEDG2: External Interrupt2 Edge Select bit TMR0IP: TMR0 Overflow Interrupt Priority bit 1 pour haute priorit. RBIP: RB Port Change Interrupt Priority bit RBIP

INTCON3 (0xFF0): Interruptions externes


INT2IP INT1IP INT2IE INT1IE INT2IP: INT2 External Interrupt Priority bit 1 pour haute priorit. INT2IF INT1IF

cours PICs

16 / 53

PIC18Fxxxx - ressources
INT1IP: INT1 External Interrupt Priority INT2IE: INT2 External Interrupt Enable INT1IE: INT1 External Interrupt Enable bit INT2IF: INT2 External Interrupt Flag bit INT1IF: INT1 External Interrupt Flag bit bit bit

1 valide linterruption

1 signal quune linterruption a eu lieu

PIR1 (0xF9E): ADC / USART / CCP1 / TIMER1 et 2


PSPIF ADIF RCIF TXIF SSPIF CCP1IF PSPIF: Parallel Slave Port Read/Write Interrupt Flag bit Drapeau indiquant quune opration de lecture/cruture a eu lieu ADIF: A/D Converter Interrupt Flag bit 1 indique une fin de conversion RCIF: USART Receive Interrupt Flag bit 1 indique qur RCREG est plein (une donne a t reue) TXIF: USART Transmit Interrupt Flag bit 1 indique que TXREG, is vide SSPIF: Master Synchronous Serial Port Interrupt Flag bit 1 indique que la transmission est termine CCP1IF: CCP1 Interrupt Flag bit Mode capture : 1 indique quune capture a eu lieu dans TMR1 Mode comparaison : 1 indique quune galit de comparaison a eu lieu dans TMR1 Mode PWM : inutilis TMR2IF: TMR2 to PR2 Match Interrupt Flag bit 1 indique que TMR2 a t gale PR2 TMR1IF: TMR1 Overflow Interrupt Flag bit 1 indique un dbordement sur TMR1 TMR2IF TMR1IF

PIR2 (0xFA1): Ecriture EEPROM / Bus collision / Faible VDD / TIMER3/ CCP2
EEIF BCLIF EEIF: Data EEPROM/FLASH Write Operation Interrupt Flag bit 1 indique une fin dcriture BCLIF: Bus Collision Interrupt Flag bit 1 indique quune collision sest produite LVDIF: Low Voltage Detect Interrupt Flag bit 1 indique une dtection de faible tension TMR3IF: TMR3 Overflow Interrupt Flag bit 1 indique un dbordement sur TMR3 CCP2IF: CCPx Interrupt Flag bit Idem PIR1 ci dessus LVDIF TMR3IF CCP2IF

PIE1 (0xF9D) : ADC / USART / I2C/ SPI / CCP1 / TIMER 1 et 2


PSPIE(1) ADIE RCIE TXIE SSPIE PSPIE(1): Parallel Slave Port Read/Write Interrupt Enable bit Autorise linterruption PSP ADIE: A/D Converter Interrupt Enable bit Autorise linterruption ADC (fin de conversion) RCIE: USART Receive Interrupt Enable bit Autorise linterruption en rception sur lUSART TXIE: USART Transmit Interrupt Enable bit Autorise linterruption en mission sur lUSART SSPIE: Master Synchronous Serial Port Interrupt Enable bit Autorise linterruption SPI CCP1IE: CCP1 Interrupt Enable bit Autorise linterruption CCP1 (pour capture ou compare) TMR2IE: TMR2 to PR2 Match Interrupt Enable bit Autorise linterruption lors dune galit entre TMR2 et PR2 TMR1IE: TMR1 Overflow Interrupt Enable bit Autorise linterruption en cas de dbordement de TMR1 CCP1IE TMR2IE TMR1IE

PIE2 (0xFA0): EEPROM / BUS collision / Faible VDD / TIMER 2 / CPP2


EEIE BCLIE EEIE: Data EEPROM/FLASH Write Operation Interrupt Enable bit Autorise linterruption de fin dcriture BCLIE: Bus Collision Interrupt Enable bit Autorise linterruption lors dun collision LVDIE: Low Voltage Detect Interrupt Enable bit Autorise linterruption lors de la dtection dun tension faible TMR3IE: TMR3 Overflow Interrupt Enable bit Autorise linterruption lors du dbordement de TMR3 LVDIE TMR3IE CCP2IE

cours PICs

17 / 53

PIC18Fxxxx - ressources
CCP2IE: CCP2 Interrupt Enable bit Autorise linterruption CCP2 (pour capture ou compare)

IPR1 (0xF9F) : Priorits


PSPIP ADIP RCIP TXIP SSPIP CCP1IP PSPIP: Parallel Slave Port Read/Write Interrupt Priority bit ADIP: A/D Converter Interrupt Priority bit RCIP: USART Receive Interrupt Priority bit TXIP: USART Transmit Interrupt Priority bit 1 haute priorit SSPIP: Master Synchronous Serial Port Interrupt Priority bit 0 basse priorit CCP1IP: CCP1 Interrupt Priority bit TMR2IP: TMR2 to PR2 Match Interrupt Priority bit TMR1IP: TMR1 Overflow Interrupt Priority bit TMR2IP TMR1IP

IPR2 (0xFA2) : Priorits


EEIP BCLIP EEIP: Data EEPROM/FLASH Write Operation Interrupt Priority bit BCLIP: Bus Collision Interrupt Priority bit LVDIP: Low Voltage Detect Interrupt Priority bit TMR3IP: TMR3 Overflow Interrupt Priority bit CCP2IP: CCP2 Interrupt Priority bit LVDIP 1 haute priorit 0 basse priorit TMR3IP CCP2IP

RCON (0xFD0) : RESET Control


IPEN RI IPEN active les priorits entre les interruptions TO PD POR BOR

cours PICs

18 / 53

PIC18Fxxxx - ressources

cours PICs

19 / 53

PIC18Fxxxx - ressources

8. Jeu dinstructions
Toutes les oprations arithmtiques et logiques et les changes de donnes entre registre passent par le registre de travail W. Exemple : ADDWF, cette instruction ajoute le contenu W un registre F. ADDWF 50h,0,0 ; ajoute W au registre 50h, le rsultat est dans W, ACCES RAM uniquement ADDWF 50h,0,0 ; ajoute W au registre 50h, le rsultat est dans 50h ADDWF 50h,0,1 ; ajoute W au registre 50h, le rsultat est dans W, Bank spcifie par BSR Le PIC18 possde une multiplication 8x8 matrielle, extrmement rapide et particulirement utile pour le traitement numrique du signal, cette fonction est appelle par linstruction MULWF f,a. Lassembleur : En plus du jeux dinstruction lassembleur Microchip possde de nombreuses directives, une directive ne gnre pas de code machine. Exemples : List : permet de dfinir le processeur cible ex : list p=18F452 #include : ajouter un fichier ex : #include <p18F452.inc> (<> indique le rpertoire par dfaut) #define : comme en C cest une dfinition, remplacement dun texte par un autre avant assemblage equ : quivalence entre un texte et une valeur numrique cblock / endc : pour la rservation mmoire de donnes org : origine pour spcifier ladresse dassemblage end : fin du programme Exemple de programme assembleur
RESET (DEBUT) SP IT TIMER2

RB0 en sortie, push-pull initialise tictac

tictac --

CONFIG TIMER2 PRE, POST diviseur , PR2 pour IT 4ms

tictac = 0

tictac=125 (125*4ms)

Aurise IT TIMER2 et globale

PB0=/PB0

Nerien faire efface drapeau IT TIMER2

retour d'IT

;************************************************************************ ;Clignotement dune LED sur PB0 (tempo par IT avec TIMER2 :(daprs Bigonoff) Q=4Mhz, t=1uS ;************************************************************************ list p=18F452 ; Dfinition de processeur pour l'assembleur #include <p18F452.inc> ; fichier de dfintion pour PIC18 #define LED TRISB,0 ; LED de sortie tictac equ d'124' ;VARIABLES cblock 0x20 ; Dbut de la zone (0x20 0x6F) compteur : 1 ; compteur de passages dans tmr2 (1 octet) endc ; Fin de la zone ;DEMARRAGE SUR RESET org 0x000 goto init ; SOUS PROGRAMME DINTERRUPTION TMR2 ; Un passage dans cette routine tous les 32*125*1s = 4ms. org 0x0008 ; adresse d'interruption prioritaire decfsz compteur,f ; dcrmenter compteur d'IT goto attend ; pas 0, ne rien faire movlw tictac ; recharge le compteur d'IT movwf compteur movlw B'00000001' ; inverser LED xorwf PORTB,f attend bcf PIR1,TMR2IF ; effacer flag interupt tmr2 retfie ; retour d'interruption ; INITIALISATIONS init bcf LED ; RB0 en sortie bsf INTCON2,7 ; Pas de R pull up sur PORTB movlw tictac ; le tmr2 compte jusque (124+1)*32*1s = 4ms movwf PR2 ; dans PR2 movlw B'00101110' ; postdiviseur 2,prdiviseur 16,timer ON movwf T2CON ; dans registre de contrle TIMER2 movlw tictac+1 ; pour 125 passages dans tmr2 = 125*4ms = 500ms movwf compteur ; dans compteur de passage interruption bsf PIE1,TMR2IE ; autorise IT sur TIMER2 bsf INTCON,GIE ; valider interruptions bsf INTCON,GIEL ; PROGRAMME PRINCIPAL debut goto debut ; boucle sans fin (l'IT est asynchrone) END ; fin de programme

cours PICs

20 / 53

PIC18Fxxxx - ressources Le registre STATUS (0xFD8) 7 6 5 4 N 3 OV 2 Z 1 DC 0 C

Trs important ce registre indique quel a t le type de rsultat de linstruction prcdente. Il est utilis entre autre par les instructions de branchement cionditionnel. N si ngatif OV sil y a eu un dbordement dans une opration en complment 2 Z : si le rsultat est nul DC : demi retenue (le bit4 est pass 1) C : sil y a eu une retenue (rsultat suprieur 0xFF) Le jeux dinstructions
Champ a Description RAM access bit a = 0: RAM location in Access RAM (BSR register is ignored) a = 1: RAM bank is specified by BSR register Bit address within an 8-bit file register (0 to 7) Bank Select Register. Used to select the current RAM bank. Destination select bit; d = 0: store result in WREG, d = 1: store result in file register f. Destination either the WREG register or the specified register file location 8-bit Register file address (0x00 to 0xFF) 12-bit Register file address (0x000 to 0xFFF). This is the source address. 12-bit Register file address (0x000 to 0xFFF). This is the destination address. Literal field, constant data or label (may be either an 8-bit, 12-bit or a 20-bit value) Label name The mode of the TBLPTR register for the Table Read and Table Write instructions Only used with Table Read and Table Write instructions: No Change to register (such as TBLPTR with Table reads and writes) Post-Increment register (such as TBLPTR with Table reads and writes) Post-Decrement register (such as TBLPTR with Table reads and writes) Pre-Increment register (such as TBLPTR with Table reads and writes) The relative address (2s complement number) for relative branch instructions, or the direct address for Call/ Branch and Return instructions Product of Multiply high byte Product of Multiply low byte Fast Call / Return mode select bit. s = 0: do not update into/from shadow registers s = 1: certain registers loaded into/from shadow registers (Fast mode) Unused or Unchanged Working register (accumulator) The assembler will generate code with x = 0. It is the recommended form of use for compatibility with all 21-bit Table Pointer (points to a Program Memory location) 8-bit Table Latch Top-of-Stack Program Counter Program Counter Low Byte Program Counter High Byte Program Counter High Byte Latch Program Counter Upper Byte Latch Global Interrupt Enable bit Watchdog Timer Time-out bit Power-down bit ALU status bits Carry, Digit Carry, Zero, Overflow, Negative Optional Contents Assigned to Register bit field User defined term (font is courier)

bbb BSR d

dest f fs fd k label mm * *+ *+* n PRODH PRODL *

u WREG x Microchip software tools. TBLPTR TABLAT TOS PC PCL PCH PCLATH PCLATU GIE WDT TO PD C, DC, Z, OV, N [] () <> In the set of italics

cours PICs

21 / 53

PIC18Fxxxx - ressources

Mnemonic,

Op

Description

Cycles 1 1 1 1 1 1 (2 or 3) 1 (2 or 3) 1 (2 or 3) 1 1 (2 or 3) 1 (2 or 3) 1 1 (2 or 3) 1 (2 or 3) 1 1 2 1 1 1 1 1 1 1 1 1 1 1

16-Bit Instruction Word MSb LSb 0010 0010 0001 0110 0001 0110 0110 0110 0000 0010 0100 0010 0011 0100 0001 0101 1100 1111 0110 0000 0110 0011 0100 0011 0100 0110 0101 01da 00da 01da 101a 11da 001a 010a 000a 01da 11da 11da 10da 11da 10da 00da 00da ffff ffff 111a 001a 110a 01da 01da 00da 00da 100a 01da ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff nnnn nnnn nnnn nnnn nnnn nnnn nnnn nnnn nnnn kkkk kkkk 0100 0111 kkkk kkkk 0000 xxxx 0110 0101 nnnn 1111

Status Affected C, DC, Z, OV, N C, DC, Z, OV, N Z, N Z Z, N None None None C, DC, Z, OV, N None None C, DC, Z, OV, N None None Z, N Z, N None None None C, DC, Z, OV, N C, Z, N Z, N C, Z, N Z, N None C, DC, Z, OV, N C, DC, Z, OV, N C, DC, Z, OV, N None None Z, N None None None None None None None None None None None None None None None TO, PD C None None None None None None All

BYTE-ORIENTED FILE REGISTER OPERATIONS ADDWF f, d, a Add WREG and f ADDWFC f, d, a Add WREG and Carry bit to f ANDWF f, d, a AND WREG with f CLRF f, a Clear f COMF f, d, a Complement f CPFSEQ f, a Compare f with WREG, skip = CPFSGT f, a Compare f with WREG, skip > CPFSLT f, a Compare f with WREG, skip < DECF f, d, a Decrement f DECFSZ f, d, a Decrement f, Skip if 0 DCFSNZ f, d, a Decrement f, Skip if Not 0 INCF f, d, a Increment f INCFSZ f, d, a Increment f, Skip if 0 INFSNZ f, d, a Increment f, Skip if Not 0 IORWF f, d, a Inclusive OR WREG with f MOVF f, d, a Move f f ,f Move f s d MOVFF s (source) to 1st word f d (destination)2nd word MOVWF f, a Move WREG to f MULWF f, a Multiply WREG with f NEGF f, a Negate f RLCF f, d, a Rotate Left f through Carry RLNCF f, d, a Rotate Left f (No Carry) RRCF f, d, a Rotate Right f through Carry RRNCF f, d, a Rotate Right f (No Carry) SETF f, a Set f SUBFWB f, d, a Subtract f from WREG with borrow SUBWF f, d, a Subtract WREG from f SUBWFB f, d, a Subtract WREG from f with borrow SWAPF f, d, a Swap nibbles in f TSTFSZ f, a Test f, skip if 0 XORWF f, d, a Exclusive OR WREG with f BIT-ORIENTED FILE REGISTER OPERATIONS BCF f, b, a Bit Clear f BSF f, b, a Bit Set f BTFSC f, b, a Bit Test f, Skip if Clear BTFSS f, b, a Bit Test f, Skip if Set BTG f, d, a Bit Toggle f CONTROL OPERATIONS BC n Branch if Carry BN n Branch if Negative BNC n Branch if Not Carry BNN n Branch if Not Negative BNOV n Branch if Not Overflow BNZ n Branch if Not Zero BOV n Branch if Overflow BRA n Branch Unconditionally BZ n Branch if Zero CALL n, s Call subroutine1st word 2nd word CLRWDT Clear Watchdog Timer DAW Decimal Adjust WREG GOTO n Go to address1st word 2nd word NOP No Operation NOP No Operation (Note 4) POP Pop top of return stack (TOS) PUSH Push top of return stack (TOS) RCALL n Relative Call RESET Software device RESET

0101 11da ffff 0101 10da ffff

1 0011 10da ffff 1 (2 or 3) 0110 011a ffff 1 0001 10da ffff 1 1 1 (2 or 3) 1 (2 or 3) 1 1 (2) 1 (2) 1 (2) 1 (2) 1 (2) 2 1 (2) 1 (2) 1 (2) 2 1 1 2 1 1 1 1 2 1 1001 1000 1011 1010 0111 1110 1110 1110 1110 1110 1110 1110 1101 1110 1110 1111 0000 0000 1110 1111 0000 1111 0000 0000 1101 0000 bbba bbba bbba bbba bbba 0010 0110 0011 0111 0101 0001 0100 0nnn 0000 110s kkkk 0000 0000 1111 kkkk 0000 xxxx 0000 0000 1nnn 0000 ffff ffff ffff ffff ffff nnnn nnnn nnnn nnnn nnnn nnnn nnnn nnnn nnnn kkkk kkkk 0000 0000 kkkk kkkk 0000 xxxx 0000 0000 nnnn 1111

cours PICs

22 / 53

PIC18Fxxxx - ressources

RETFIE

Return from interrupt enable

RETLW k Return with literal in WREG 2 RETURN s Return from Subroutine 2 SLEEP Go into standby mode 1 LITERAL OPERATIONS ADDLW k Add literal and WREG 1 ANDLW k AND literal with WREG 1 IORLW k Inclusive OR literal with WREG 1 LFSR f, k Move literal (12-bit) 2nd word 2 to FSRx 1st word MOVLB k Move literal to BSR<3:0> 1 MOVLW k Move literal to WREG 1 MULLW k Multiply literal with WREG 1 RETLW k Return with literal in WREG 2 SUBLW k Subtract WREG from literal 1 XORLW k Exclusive OR literal with WREG 1 DATA MEMORY PROGRAM MEMORY OPERATIONS TBLRD* Table Read 2 TBLRD*+ Table Read with post-increment TBLRD*Table Read with post-decrement TBLRD+* Table Read with pre-increment TBLWT* Table Write 2 (5) TBLWT*+ Table Write with post-increment TBLWT*Table Write with post-decrement TBLWT+* Table Write with pre-increment

0000 0000 0001 000s GIE/GIEH, PEIE/GIEL 0000 1100 kkkk kkkk None 0000 0000 0001 001s None 0000 0000 0000 0011 TO, PD 0000 0000 0000 1110 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 1011 1001 1110 0000 0001 1110 1101 1100 1000 1010 0000 0000 0000 0000 0000 0000 0000 0000 kkkk kkkk kkkk 00ff kkkk 0000 kkkk kkkk kkkk kkkk kkkk 0000 0000 0000 0000 0000 0000 0000 0000 kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk 1000 1001 1010 1011 1100 1101 1110 1111 C, DC, Z, OV, N Z, N Z, N None None None None None C, DC, Z, OV, N Z, N None None None None None None None None

cours PICs

23 / 53

PIC18Fxxxx - ressources

9. Ports parallles
Exemple : PORTB

Exemple CLRF PORTB CLRF LATB MOVLW 0xCF MOVWF TRISB

; Initialize PORTB by ; clearing output ; data latches ;Alternate method ; to clear output ; data latches ; Value used to ; initialize data ; direction ; Set RB<3:0> as inputs ; RB<5:4> as outputs ; RB<7:6> as inputs

#include <p18f452.h> void main(void) { char a=0,b=0x55 ; PORTB=0 ; TRISB=0b11110000 ; a=PORTB ; PORTB=b ; While(1) ; }

Chaque port ses particularits, seules celle du PORTB sont dtailles ici. (voir data sheet) Particularits du PORTB Les broches peuvent tre configures en Drain-Ouvert RBPU INTCON2<7> (INTCON2bits.RBPU) Un changement sur lun des bits PB4 PB7 peut dclancher une interruption (gestion dun clavier par exemple) RBIF (INTCON<0>). (INTCONbits.RBIF), ce drapeau DOIT tre effac dans le sous programme dinterruption.

cours PICs

24 / 53

PIC18Fxxxx - ressources

10. CAN 10bits

// Demo pour ADC #include <p18f452.h> #define q 4.8828e-3

//pour LCD // quantum

void main(void) { float res; // CAN on. CLOCK=FOSC/2. CANAL0 (RA) // seul AN0 est activ // VREF+=VDD VREF-=VSS ADCON0=1; ADCON1=0x8E; while(1){ // dclenche SOC ADCON0bits.GO_DONE=1; // attend EOC while(ADCON0bits.GO_DONE); // calcule la tension res=(float)ADRES*q; } }

REGISTRE ADCON0
7 ADCS1
ADCON1 <ADCS2> 0 0 0 0 1 1 1 1

6 ADCS0
ADCON0 <ADCS1:ADCS0> 00 01 10 11 00 01 10 11

5 CHS2

4 CHS1

3 CHS0

2 GO/DONE

0 ADON
Canal slectionn

Horloge de conversion FOSC/2 FOSC/8 FOSC/32 FRC (Provient de loscillateur RC interne) FOSC/4 FOSC/16 FOSC/64 FRC (Provient de loscillateur RC interne)

CHS2:CHS0 000 001 010 011 100 101 110 111

canal 0, (AN0) canal 1, (AN1) canal 2, (AN2) canal 3, (AN3) canal 4, (AN4) canal 5, (AN5) canal 6, (AN6) canal 7, (AN7)

REGISTRE ADCON1
7 6 5 4 3 2 ADFM ADCS2 PCFG3 PCFG2 ADFM: Format du rsultat (sur 16 bits) 1 = justification droite, les 6 bits de poids fort dADRESH sont 0. 0 = justification gauche, les 6 bits de poids faible dADRESL sont 0. ADCS2: selection de lhorloge (voir tableau) AN6 AN5 AN4 AN3 AN2 AN1 AN0 VREF+ PCFG<3:0> AN7
0000 0001 0010 0011 0100 0101 011x 1000 1001 1010 1011 1100 1101 1110 1111 A A D D D D D A D D D D D D D A A D D D D D A D D D D D D D A A D D D D D A A A A D D D D A A A A D D D A A A A A D D D A VREF+ A VREF+ A VREF+ D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+ A A A A D D D VREFA A VREFVREFVREFD VREFA A A A A A D A A A A A A D D A A A A A A D A A A A A A A A VDD AN3 VDD AN3 VDD AN3 AN3 VDD AN3 AN3 AN3 AN3 VDD AN3

1 PCFG1

0 PCFG0

VREFVSS VSS VSS VSS VSS VSS AN2 VSS VSS AN2 AN2 AN2 VSS AN2

C/R 8/00 7/1 5/0 4/1 3/0 2/1 0/0 6/2 6/0 5/1 4/2 3/2 2/2 1/0 1/2

cours PICs

25 / 53

PIC18Fxxxx - ressources

11. Detection de faible tension (LVD)


Fonction low voltage detect

REGISTRE LVDCON (0xFD2)


7 6 5 4 3 IRVST LVDEN LVDL3 IRVST: Internal Reference Voltage Stable Flag bit 1 = Indique que la rfrence de tension interne est stable LVDEN: Low Voltage Detect 1 = Active la fonction LVD 0 = Fonction LVD dsactive LVDL3:LVDL0: Choix de la tension limite avant dtection 1111 = Tension externe (sur la broche LVDIN) 1110 = 4.5V - 4.77V 1101 = 4.2V - 4.45V 1100 = 4.0V - 4.24V 1011 = 3.8V - 4.03V 1010 = 3.6V - 3.82V 1001 = 3.5V - 3.71V 1000 = 3.3V - 3.50V 0111 = 3.0V - 3.18V 0110 = 2.8V - 2.97V 0101 = 2.7V - 2.86V 0100 = 2.5V - 2.65V 0011 = 2.4V - 2.54V 0010 = 2.2V - 2.33V 0001 = 2.0V - 2.12V 0000 = Reserv 2 LVDL2 1 LVDL1 0 LVDL0

// Demo pour LVD #include <p18f452.h> //pour LCD char test=0; void main(void) { // LVD active, pas dIT // detection VDD<3.5v PIE2bits.LVDIE=0; LVDCON=0b00011001; While(!LVDCONbits.IRVST); //attend while(1){ if (PIR2bits.LVDIF) { PIR2bits.LVDIF=0 test=1; } else test=0; } }

Pour utiliser linterruption : LVDIF dans PIR2<2> (drapeau dinterruption) LVDIE dans PIE2<2> (validation de linterruption) LVDIP dans IPR2<2> (priorit de linterruption)

cours PICs

26 / 53

PIC18Fxxxx - ressources

12. TIMER0
Mode 8 bits

Mode 16 bits

REGISTRE T0CON
7 6 5 4 TMR0ON T08BIT T0CS T0SE TMR0ON: activation 1 = Active Timer0 0 = Stoppe Timer0 T08BIT: 8/16 bits 1 = Timer0 est un compteur 8-bits 0 = Timer0 est un compteur 16-bits T0CS: slection de lhorloge 1 = compte les fronts sur T0CKI 0 = compte les fronts sur lhorloge interne (CLKOUT) T0SE: front dtect 1 = compte sur front descendant sur T0CKI 0 = compte sur front montant sur T0CKI PSA: Pr diviser 1 = pas de pr diviseur. 0 = Le pr diviseur est activ T0PS2:T0PS0: Pr Division de lhorloge 111 = 1:256 110 = 1:128 101 = 1:64 100 = 1:32 011 = 1:16 010 = 1:8 001 = 1:4 000 = 1:2 3 PSA 2 T0PS2 1 T0PS1 0 T0PS0

// Demo pour TMER0 #include <p18f452.h>

//pour LCD

// sous programme d'interruption #pragma interrupt itcomp #pragma code interruption=0x8 void itcomp(void) { PORTB^=0x01; // bascule PB0 INTCONbits.TMR0IF=0; } #pragma code void main(void) { TRISB=0xFE; // PB0 en sortie // active Timer 16bits sur CLKOUT // prediviseur 1/8 // avec Q=4MHz, CLK=1uS // IT toutes les 1*8*65536= 524mS T0CON=0b10000010; INTCONbits.TMR0IE=1;// autorise IT dbordement RCONbits.IPEN=1;// Interruption prioritaires INTCONbits.GIE=1; While(1); // ne rien faire }

Pour utiliser linterruption : TMR0F dans INTCON <5> (drapeau dinterruption) TMR0E dans INTCON <2> (validation de linterruption)

cours PICs

27 / 53

PIC18Fxxxx - ressources

13. TIMER1

REGISTRE T1CON
7 RD16 6 5 T1CKPS1 4 T1CKPS0 3 T1OSCEN 2 T1SYNC 1 TMR1CS 0 TMR1ON

RD16: 16-bit Read/Write Mode Enable bit 1 = Acces TMR1 par 16 bits 0 = Acces TMR1 en 2 fois 8 bits T1CKPS1:T1CKPS0: Valeur du prdiviseur 11 = 1:8 10 = 1:4 01 = 1:2 00 = 1:1 T1OSCEN: Validation de loscillateur (entres sur T1OSO et T1OSI) 1 = activ 0 = dsactiv T1SYNC: Synchronisation avec lhorloge externe (pour le mode sleep) Quand TMR1CS = 1: 1 = Ne pas synchroniser lhorloge externe 0 = Synchroniser lhorloge externe TMR1CS: Choix de lhorloge 1 = Horloge externe 0 = Horloge interne (FOSC/4) TMR1ON: Validation du TIMER1 1 = TIMER1 activ 0 = TIMER1 arrt

Remarques : En plaant un quartz de 32.768KHz sur T1OS, il est possible dobtenir une base de temps de 1S. Validation de lIT de dbordement par PIE1 <TMR1IE> Drapeau dIT PIR1<TMR1IF>

cours PICs

28 / 53

PIC18Fxxxx - ressources

14. TIMER2

REGISTRE TCON2
7 6 TOUTPS3 5 TOUTPS2 4 TOUTPS1 3 TOUTPS0 2 TMR2ON 1 T2CKPS1 0 T2CKPS0

TOUTPS3:TOUTPS0: Postdiviseur 0000 = 1:1 0001 = 1:2 1111 = 1:16 TMR2ON: Validation Timer2 1 = Timer2 activ 0 = Timer2 dsactiv T2CKPS1:T2CKPS0: Prdiviseur 00 = 1:1 01 = 1:4 1x = 1 :16

// Demo pour TMR2 #include <p18f452.h>

//pour LCD

Validation de lIT de dbordement par PIE1 <TMR2IE> Drapeau dIT PIR1<TMR2IF> TMR2 et PR2 sont des registres 8 bits. Lorsquil y a galit TMR2IF est mis 1 et TMR2 0x00 TM2R peut servir dhorloge pour le mode PWM ou pour les communications synchrones (TMR2 output).

// sous programme d'interruption #pragma interrupt itcomp #pragma code interruption=0x8 void itcomp(void) {static char tictac=7; if (!tictac--) { tictac=15; // environ 500mS PORTB^=0x01; // bascule PB0 ] PIR1.TMR2IF=0; } #pragma code void main(void) { TRISB=0xFE; // PB0 en sortie // active Timer2 // prediviseur 1/16 post 1/16 // avec Q=4MHz, CLK=1uS // IT toutes les T=1*16*16*125 = 32 mS PR2=125; TCON2=0b01111110; PIE1.TMR2IE=1;// autorise IT dbordement RCONbits.IPEN=1;// Interruption prioritaires INTCONbits.GIE=1; While(1); // ne rien faire }

cours PICs

29 / 53

PIC18Fxxxx - ressources

15. TIMER3

REGISTRE TCON3
7 RD16 6 T3CCP2 5 T3CKPS1 4 T3CKPS0 3 T3CCP1 2 T3SYNC 1 TMR3CS 0 TMR3ON

RD16: Lecture/ ecriture 16-bit Read/Write 1 = Accs TMR3 sur 16 bits 0 = Accs TMR3 sur 2x8 bits T3CCP2:T3CCP1: Liaisons Timer3 et Timer1 et CCPx 1x = Timer3 est lhorloge du module compare/capture CCP 01 = Timer3 est lhorloge du module compare/capture CCP2, Timer1 est lhorloge du module compare/capture CCP1 00 = Timer1 est lhorloge du module compare/capture CCP T3CKPS1:T3CKPS0: Prdiviseur 11 = 1:8 10 = 1:4 01 = 1:2 00 = 1:1 T3SYNC: Synchronisation avec lhorloge externe (pour le mode sleep) Quand TMR1CS = 1: 1 = Ne pas synchroniser lhorloge externe 0 = Synchroniser lhorloge externe TMR3CS: Choix de lhorloge 1 = Horloge externe 0 = Horloge interne (FOSC/4) TMR3ON: Validation du TIMER1 1 = TIMER1 activ 0 = TIMER1 arrt

Validation de lIT de dbordement par PIE2 <TMR3IE> Drapeau dIT PIR2<TMR3IF>

cours PICs

30 / 53

PIC18Fxxxx - ressources

16. Capture/Compare/PWM 16.1. CAPTURE


La fonction capture permet de mesurer la dure dune impulsion haute ou basse ou la priode dun signa rectangulaire. Le rsultat est le nombre dimpulsions dhorloge entre deux fronts. Connaissant la priode de lhorloge on en dduit un temps. Il existe deux modules de capture CCP1 et CCP2. Lorsque que lvnement asynchrone attendu sur la broche CCP se produit un TIMER est recopi dans le registre CCPR

REGISTRE CCP1CON/CCP2CON
7 6 5 4 3 2 1 0 DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0 DCxB1:DCxB0: PWM rapport cyclique bit1 et bit0 Ces bits ne sont pas utiliss en mode capture/compare. Ils reprsentent les deux LSB du rapport cyclique (10bits) de la fonction PWM, les bits de poids forts se trouve dans CCPRxL. Ces bits ne sont pas utiliss en mode capture/compare CCPxM3:CCPxM0: Choix du mode CCPx 0000 = Capture/Compare/PWM dsactiv 0001 = Rserv 0010 = comparaison , la sortie bascule lors de lgalit (CCPxIF is 1) 0011 = Rserv 0100 = capture sur front descendant 0101 = capture sur front montant 0110 = capture les 4 fronts descendants 0111 = capture tous les 4 front montants 1000 = comparaison, CCPx est initialise 0 et passe 1 lors de lgalit TMRx / CCPRx, CCPIF est mis 1 1001 = comparaison, CCPx est initialise 1 et passe 0 lors de lgalit TMRx / CCPRx, CCPIF est mis 1 1010 = comparaison, lors de lgalit TMRx / CCPRx, CCPIF est mis 1, CCPx nest pas modifi 1011 = comparaison, dclenche un special event CCPIF est mis 1 11xx = mode PWM

Validation de lIT de capture pour CCP1 par PIE1 <CCP1IE> Drapeau dIT PIR1<CCP1IF> Validation de lIT de capture pour CCP2 par PIE2 <CCP2IE> Drapeau dIT PIR2<CCP2IF>

cours PICs

31 / 53

PIC18Fxxxx - ressources Division par E


E= Q/4 1, 2, 4, 8

(N)

Compteur 16 bits (TIMER1)

TMR1IE

&
Division par 1, 4, 16
TMR1IF
Dbordement

Interruption

CCP

RAZ logiciel RAZ logiciel CCPF Registre 16 bits CCPR

Dtection de front

CCPI

&

Interruption

T=D*E/N

D=CCPR-N N=CCPR

D=CCPR-N N=CCPR

D=CCPR-N N=CCPR

Exemple mesure de priode avec le TIMER1 en CCP

A chaque front montant TIMER1 est recopi dans CCPR, une interruption est gnre, le sous programme dIT calcul D=CCPR-N puis N=CCPR. D reprsente la priode du signal dentre
// Programme test de la fonction capture. Le nombre dimpulsions comptes // entre deux fronts montants de CCPR1 est range dans la variable duree #include <p18f452.h> unsigned int duree; // reprsente le comptage entre 2 fronts // sous programme d'interruption #pragma interrupt itcomp void itcomp(void) {unsigned static int ancien; if(PIR1bits.CCP1IF) // l'IT provient d'une capture {duree=CCPR1-ancien; // comptage entre les deux front ancien=CCPR1; } PIR1bits.CCP1IF=0; //efface le drapeau d'IT } #pragma code interruption=0x8 void fontion (void) {_asm goto itcomp _endasm} #pragma code void main(void) {// configure PORTC CCP1 DDRCbits.RC2=1; // RC2/CCP1 en entree // configure le TIMER1 T1CONbits.RD16=0; // TMR1 mode simple (pas de RW) T1CONbits.TMR1CS=0; // compte les impulsions sur internal clock T1CONbits.T1CKPS1=1; // prdiviseur =1/8 periode sortie = 8uS T1CONbits.T1CKPS0=1; T1CONbits.T1SYNC=1; // pas de synchronisation sur sleep/Reset T1CONbits.TMR1ON=1; // TMR1 Activ // configure le mode capture sur le TIMER1 avec IT sur CCP1 T3CONbits.T3CCP2=0; // mode comparaison entre TMR1 et CCPR1 CCP1CON=0x05; // capture mode sur fronts montants PIE1bits.CCP1IE=1; // active IT sur mode capture/comparaison CCP1 RCONbits.IPEN=1; // Interruption prioritaires actives INTCONbits.GIE=1; // Toutes les IT dmasques autorises while(1) ; }

cours PICs

32 / 53

PIC18Fxxxx - ressources

16.2.

COMPARE

La fonction compare permet de produire des dures , impulsions hautes ou basses calibres ou des signaux rectangulaires priodiques. On place dans CCPR le nombre dimpulsions compter par TIMER. A chaque concidence TIMER/CCPR la broche CCP volue en fonction de la configuration, une interruption est gnre, TIMER est remis zro. Il existe deux modules de comparaison CCP1 et CCP2 Lors de lgalit entre un compteur TMR et un registre CCPR, une action est dclanche sur la broche CCP correspondante

REGISTRE CCP1CON/CCP2CON
7 6 5 4 3 2 1 0 DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0 DCxB1:DCxB0: PWM rapport cyclique bit1 et bit0 Ces bits ne sont pas utiliss en mode capture/compare. Ils reprsentent les deux LSB du rapport cyclique (10bits) de la fonction PWM, les bits de poids forts se trouve dans CCPRxL. Ces bits ne sont pas utiliss en mode capture/compare CCPxM3:CCPxM0: Choix du mode CCPx 0000 = Capture/Compare/PWM dsactiv 0001 = Rserv 0010 = comparaison , la sortie bascule lors de lgalit (CCPxIF is 1) 0011 = Rserv 0100 = capture sur front descendant 0101 = capture sur front montant 0110 = capture les 4 fronts descendants 0111 = capture tous les 4 front montants 1000 = comparaison, CCPx est initialise 0 et passe 1 lors de lgalit TMRx / CCPRx, CCPIF est mis 1 1001 = comparaison, CCPx est initialise 1 et passe 0 lors de lgalit TMRx / CCPRx, CCPIF est mis 1 1010 = comparaison, lors de lgalit TMRx / CCPRx, CCPIF est mis 1, CCPx nest pas modifi 1011 = comparaison, dclenche un special event CCPIF est mis 1 11xx = mode PWM

Validation de lIT de comparaison pour CCP1 par PIE1 <CCP1IE> Drapeau dIT PIR1<CCP1IF> Validation de lIT de comparaison pour CCP2 par PIE2 <CCP2IE> Drapeau dIT PIR2<CCP2IF>

cours PICs

33 / 53

PIC18Fxxxx - ressources Division par 1, 2,4,8 (N)

E
E= Q/4

E/N Compteur 16 bits RAZ TIMER1 TMR1IE

&
TMR1IF
Dbordement

Interruption

RAZ logiciel RAZ logiciel Comparateur 16 bits TMER1=CCPR Action pr configure


Broche CCPx

CCPF

Registre 16 bits CCPR

&
CCPI

Interruption

Valuer ajoute CCPR entre deux venements : D = dure ExN Exemple de production de signaux avec TIMER1 Lors de chaque concidence la broche CCP volue. Une interruption est gnre, CCPR est incrment de la dure voulue.

cours PICs

34 / 53

PIC18Fxxxx - ressources

16.3.

PWM

La modulation de largeur dimpulsion (ou de rapport cyclique) est courement utilise dans la commande des hacheurs (pour commander un moteur courant continu par exemple). La sortie CPP1 peut tre configure en PWM (TRISC<2> =0). TMR2 cadence le processus, CCPR1 reprsente la dure de ltat haut et PR2 la priode voir configuration de CCP1CON/CCP2CON (page 22) th Rapport cyclique = th/T

CCP1=0 Lorsque TMR2=PR2 CCP1=1 TMR2=0 CCPR1H=CCPR1L Lorsque TMR2=CCPR1H CCP1=0 Lorsque TMR2=PR2 Etc PR2 reprsente la priode T CCPR1L reprsente th

Exemples :
Frquence PWM Prdiviseur (1,4,16) Valeur PR2 Rsolution Max bits) 2.44kHz 16 0xFF 14 9.77kHz 4 0xFF 12 39.06kHz 1 0xFF 10 156.25kHz 1 0x3F 8 312.50kHz 1 0x1F 7 416.67kHz 1 0x17 6.58

Priode PWM = (PR2) + 1] 4 TOSC (TMR2 valeur du prdiviseur) Rapport cyclique PWM= (CCPR1L:CCP1CON<5:4>) TOSC (TMR2 valeur du prdiviseur) FOSC log --------FPWM Rsolution(PWM) en bits = ------------------log(2)

cours PICs

35 / 53

PIC18Fxxxx - ressources

17. Chien de garde


Watch Dog Timer, cette fonction peut tre active automatiquement par configuration dans MPLAB

Le chien de garde est activ en mettant 1 le bit 0 du registre WDTCON (SWDTEN) ou par WDTEN de CONFIG2H si la configuration de dpart na pas active le chien de garde (voir configuration sur MPLAB). REGISTRE CONFIG2H
7 6 5 4 3 WDTPS2 2 WDTPS1 1 WDTPS0 0 WDTEN

Les bits WDTPS2-WDTPS0 reprsente le rapport de division de la sortie WDT TIMER (1 8) Aprs activation le chien de garde doit tre rinitialis avant la gnration du Time-Out qui provoque un RESET. Les instructions assembleur clrwdt et sleep remettent le TIMER 0. Dure de comptage avant Time-Out et sans prdiviseur 7mS < T < 33 mS Avec un prdiviseur de 5 : 35mS < T < 165mS

cours PICs

36 / 53

PIC18Fxxxx - ressources

18. Communications sries asynchrones


Les communications sries asynchrones suivent le format NZR (No Return to Zero). Ils communiquent avec le microprocesseur par lintermdiaire du bus de donnes et en srie avec lextrieur par une liaison srie asynchrone (sans horloge). Ils peuvent par ailleurs piloter un modem. Exemple de trame : asynchrone 1start, 8 bits, parit paire, 1 stop : nombre 10010001

Start

D7

D6

D5

D4

D3

D2

D1

D0

Stop

Parit paire : le bit de parit est positionn pour que lensemble des bits de donne et le bit de parit reprsente un nombre de bits 1 pair Parit impaire : le bit de parit est positionn pour que lensemble des bits de donne et le bit de parit reprsente un nombre de bits 1 impair Dans ce type de transmission lhorloge de transmission est comprise dans le signal, le bit de start est utilis par le rcepteur pour se synchroniser avec lmetteur. Cependant les deux horloges de transmission et de rception sont au dpart trs proche Lhorloge de rception possde une frquence multiple de celle de transmission (en gnral x16 ou x64) Dans le cas dune division par 16 : Lors de la rception du front descendant du bit de start, lUSART attend 8 tops dhorloge, le circuit reoit alors thoriquement le milieu du bit de start, lUSART attend ensuite 16 tops dhorloge, le circuit reoit alors le milieu de D7 et lit ce bit, lUSART attend ensuite 16 tops etc. Lhorloge du rcepteur est donc resynchronise lors de la rception de chaque caractre. Lecture de D7 (ici 1)

Le milieu du bit de start est trouv aprs 8 tops Signal TX START

D7 16 tops dhorloge

Horloge RX rcepteur 1 2 3 4 5 6 7

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Lhorloge RX (rception) doit donc toujours tre suprieure celle de TX (transmission). En ralit les deux horloges sont identiques et TX est divis dans lUSART pour produire la vitesse de transmission souhait.

cours PICs

37 / 53

PIC18Fxxxx - ressources

USART : Transmission

TXREG : registre de transmission (tampon) SPBRG : dfinit la vitesse de transmission (BAUD) TXEN : valide lhorloge ime TX9 : valide le 9 bit ime bit (donne, adresse ou parit) TX9D :9 TXIE : autorise linterruption TXIF : drapeau dinterruption, indique que TXREG est vide SPEN : configure TX/RX pin pour USART TMRT : indique si TSR est vide USART : Rception

CREN : active le rcepteur asynchrone SPBRG : dfinit la vitesse de transmission (BAUD) SPEN : configure TX/RX pin pour USART RCIE : autorise linterruption en rception RCIF : drapeau dinterruption de rception dune donne RX9 : valide la prise en compte de D8 (adresse, donne ou parit, traitement par logiciel) OERR, FERR : indicateurs derreurs de rception

cours PICs

38 / 53

PIC18Fxxxx - ressources Registres gnraux TXSTA : Registre dtat et de contrle des missions
7 6 5 4 3 2 CSRC TX9 TXEN SYNC SENDB BRGH CSRC: Clock Source Select bit Non utilis en mode asynchrone 1 = mode maitre (horloge gnre en interne depuis BRG) 0 = mode esclave (horloge externe) TX9: 1 = transmission sur 9 bits 0 = transmission sur 8 bits TXEN: 1 = transmissions actives 0 = transmissions dsactives SYNC: USART Mode Select bit 1 = mode synchrone 0 = mode asynchrone SENDB : Send Break Character bit Mode asynchrone : 1 = Emet le caractre Break lors de la prochaine transmission (RAZ automatique) 0 = Fin de transmission du caractre Break Inutilis en mode synchrone BRGH: High Baud Rate Select bit Mode asynchrone : 1 = grande vitesse 0 = petite vitesse Inutilis en mode synchrone TRMT: Transmit Shift Register Status bit 1 = registre de transmission TSR vide 0 = registre de transmission TSR plein TX9D: 9th bit of Transmit Data 1 TRMT 0 TX9D

Peut tre une adresse, une donne ou un bit de parit RCSTA: RECEIVE Registre dtat et de contrle des rceptions
7 6 5 4 3 2 1 0 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D SPEN: Serial Port Enable bit 1 = Active le port srie (configure RX/DT et TX/CK comme des broches de port srie) 0 = Dsactive le port srie RX9: 9-bit Receive Enable bit 1 = Rception sur 9 bits, 0 = Rception sur 9 bits SREN: Single Receive Enable bit Inutilis en modes asynchrones et en mode synchrone esclave En mde synchrone et maitre 1 = Autorise une rception unique (effac aprs la rception) 0 = interdit la rception CREN: Continuous Receive Enable bit En mode asnchrone 1 = Active le rcepteur 0 = Dsactive le rcepteur En mode synchrone 1 = Active la rception (CREN est prioritaire sur SREN) 0 = Dsactive la rception ADDEN: Address Detect Enable bit En mode asynchrone sur 9bits (RX9 = 1): 1 = Active la dtection dadresse, autorise linterruption et ne charge pas la donne dans le buffer de rception quand RSR<8> =1 ime 0 = Dsactive la dtection dadresse, tous les bits sont envoys dans le buffer de rception et le 9 bit peut tre utilis comme bit de parit FERR: Framing Error bit (erreur de trame, gnralement le bit de start ou stop na pas t dtect correctement) 1 = Framing error (mis jour par une lecture de de RCREG et la rception du prochain octet) 0 = No framing error OERR: Overrun Error bit - Indique quun caractre a t perdu 1 = Overrun error (effac en effacant CREN), 0 = No overrun error RX9D: 9th bit of Received Data Peut tre un bit dadresse ou de donne ou de parit et doit tre gr par logiciel

cours PICs

39 / 53

PIC18Fxxxx - ressources
Exemple en C18 : Emetteur activ, transmission sur 8bits mode asynchrone, pas de Break. Active le port srie, rcepteur activ sur 8 bits, TXSTA = 0b00100000; RCSTA = 0b10010000; PIE1bits.TXIE=0; // IT en emission dsactive PIE1bits.RCIE=1; // IT en reception active (si ncessaire) PIR1bits.TXIF=0; // efface drapeau transmission PIR1bits.RCIF=0; // efface drapeau reception

Gnrateur de BAUD. Le gnrateur de BAUD (BRG) repose sur un comptage de lhorloge Fosc ( ne pas confondre avec Fcycle=Fosc/4) BRG peut tre un compteur 8 bits ou 16 bits BAUDCONbits.BRG16=1 ; // compteur 16 bits Le bit BRGH (TXSTA) permet dactiver ou non le pre-divideur sur BRG TXSTAbits.BRGH=0; // BRG lent La vitesse de transmission dpend de loscillateur de BRG16 de BRGH et de la valeur dans SPBRGH:SPBRG. Un choix judicieux de BRGH et BRG16 permettra de rduire lerreur sur la vitesse de transmission en fonction de la frquence de loscillateur et la vitesse en BAUD souhaite
BRG16 BRGH Mode BRG/EUSART Formule de calcul de la vitesse en Baud (n = ([SPBRGH:SPBRG]) FOSC/[64 (n + 1)] FOSC/[16 (n + 1)] FOSC/[4 (n + 1)]

0 0 1 1

0 1 0 1

8-bit/Asynchronous
8-bit/Asynchronous 16- bit/Asynchronous 16-bit/Asynchronous

Exemple : Pour un PIC avec FOSC=32Mhz et une vitesse de transmission souhaite de 9600 Bauds, mode 8 bits (BRG16=0) , avec prediviseur (BRGH=0) Vitesse recherche en BAUD= FOSC/(64 ([SPBRGH:SPBRG] + 1)) On recherche X= SPBRGH:SPBRG: X = ((FOSC/Desired Baud Rate)/64) 1= ((32000000/9600)/64) 1= [51.08] = 51 (arrondi) La vitesse relle en BAUD sera = 32000000/(64 (51 + 1)) = 9615.38 Lerreur est donc : (BAUDcalcul BAUDdsir)/ BAUDdsir = (9615.38 9600)/9600 = 0.16% La configuration du gnrateur de BAUD (BRG) scrira : BAUDCONbits.BRG16=0; TXSTAbits.BRGH=0; SPBRGH= 0x00; // ligne inutile ici puisque BRG est sur 8 bits SPBRG = 51;

cours PICs

40 / 53

PIC18Fxxxx - ressources BAUDCON: BAUD RATE CONTROL REGISTER


7 6 5 4 3 2 1 0 ABDOVF RCIDL RXDTP TXCKP BRG16 WUE ABDEN ABDOVF: Auto-Baud Acquisition Rollover Status bit 1 = BRG a t mis jour durant le mode Auto-Baud Rate Detect (RAZ par logiciel) 0 = BRG na pas t mis jour RCIDL: Receive Operation Idle Status bit 1 = Une opration de rception est en attente 0 = Une opration de rception est active RXDTP: Received Data Polarity Select bit (Asyncnronous mode only) Asynchronous mode: 1 = la donne en RX est inverse (0-1) 0 = la donne en RX nest pas inverse (1-0) TXCKP: Clock and Data Polarity Select bit Asynchronous mode: 1 = Ltat de repos pour une transmission est 0 0 = Ltat de repos pour une transmission est 1 Synchronous mode: 1 = Ltat de repos pour lhorloge est 1 0 = Ltat de repos pour lhorloge est 0 BRG16: 16-Bit Baud Rate Register Enable bit 1 = 16-bit Baud Rate Generator SPBRGH et SPBRG forment SPBRG sur 16 BITS 0 = 8-bit Baud Rate Generator SPBRG seulement (Compatible avec les anciens PIC), SPBRGH est ignor bit 2 Unimplemented: Read as 0 WUE: Wake-up Enable bit Asynchronous mode: 1 = EUSART echantillonne la broche RX en continu, une interruption est gnre sur front descendnat, ce bit est effac automatiquement lors du prochain front montant 0 = RX nest pas surveill Synchronous mode: Unused in this mode. ABDEN: Auto-Baud Detect Enable bit Asynchronous mode: 1 = Active la mesure automatique de la vitesse de rception au prochain caractre. (Ncessite la rception du caractre 55h) . Effac automatiquement aprs la mesure 0 = La mesure de la vitesse de reception est desactiv.

Exemple : programme echo (PIC PC) : Fosc=32MHz , comm : 9600,n,8,1


#include <p18f4620.h> rom char mess[]="\nLes communications sont ouvertes\nTapez une touche ...\n\n"; // indique qu'un caractre est dans RCREG de l'USART char data_recue(void) // reception d'une interruption { if (PIR1bits.RCIF) /* char recu en reception*/ { PIR1bits.RCIF=0; // efface drapeau return (1); // indique qu'un nouveau caractre est dans RCREG } else return (0); // pas de nouveau caractre reu } // envoie un caractre sur USART void putch(unsigned char c) //putch est dfini sur le port srie { while(!TXSTAbits.TRMT); // pas de transmission en cours ? TXREG=c; /* envoie un caractre */ while(!PIR1bits.TXIF); } // envoie une chaine en ROM void putchaine(rom char* chaine) { while (*chaine) putch(*chaine++); } void main(void) { TXSTA = 0b00100000; RCSTA = 0b10010000; PIE1bits.TXIE=0; // IT en emission dsactive PIE1bits.RCIE=0; // IT en reception dactive BAUDCONbits.BRG16=0; TXSTAbits.BRGH=0; SPBRG = 51; putchaine(mess); // intro while(1) // echo +1 ex: si a est transmis b est envoy en echo { if (data_recue()) putch(RCREG+1); } }

cours PICs

41 / 53

PIC18Fxxxx - ressources

Tableaux exemples pour quelques Fosc

cours PICs

42 / 53

PIC18Fxxxx - ressources

cours PICs

43 / 53

PIC18Fxxxx - ressources

19. Communications sries synchrones : bus SPI

En mode SPI, (Srial Peripherical Interface) les donnes sont changes entre deux registres dcalage. Cest le maitre qui cadence lchange avec son horloge. Il ny a pas de protocole. Lhorloge peut tre programme Fosc/4. Lechange est alors extrmement rapide, des prcautins sont prendre quant au cablage sur circuit imprim. Ce type de communication est gnralement rserv lchange de donnes entre deux circuits intgrs sur un mme circuit imprim (ex : avec CAN, CNA) Lors de la configuration de lemetteur, il faut sassurer de la bonne synchronisation avec le rcepteur (voir page 45)

cours PICs

44 / 53

PIC18Fxxxx - ressources Modes SPI (Maitre)

Ces chronogrammes permettent de configurer CKP et CKE en fonction du rcepteur (voir doc de celui ci) ainsi que SMP qui dfinit linstant dchantillonage de la donne en entre. Toutes les possibilits dchange sont ainsi possible rendant la fonction compatible avec nimporte quel circuit fonctionnant en transmission de donnes synchrone (SPI et MICROWIRE).

Exemple : timing dun CNA MAXIM 12bits MAX539, les bits sont transmis lors du front montant de SCLK (horloge du maitre, ici un P18Fxx2). Le CNA attend deux octets conscutifs avant de les placer dans son tampion de sortie (4 bits de poid fort 0)

cours PICs

45 / 53

PIC18Fxxxx - ressources SSPSTAT: MSSP STATUS REGISTER (SPI MODE)


7 6 5 4 3 2 SMP CKE D/A P S R/W SMP: Sample bit (chantillonage) SPI Maitre: 1 = La donne en entre est saisie la fin du temps de la donne en sortie 0 = La donne en entre est saisie au milieu du temps de la donne en sortie SPI Esclave: doit tre mis 0 CKE: SPI Clock Edge Select Avec CKP = 0: 1 = La donne est transmise sur le front montant de SCK 0 = La donne est transmise sur le front descandant de SCK Avec CKP = 1: 1 = La donne est transmise sur le front descandant de SCK 0 = La donne est transmise sur le front montant de SCK D/A: Data/Address bit (inutilis en mode SPI) Ces 5 bits sont P: STOP bit (inutilis en mode SPI) rservs au S: START bit (inutilis en mode SPI) mode I2C R/W: Read/Write bit information (inutilis en mode SPI) UA: Update Address (inutilis en mode SPI) BF: Buffer Full Status bit (pour le mode rception) 1 = rception termine , SSPBUF est plein 0 = rception en cours , SSPBUF is vide 1 UA 0 BF

SSPCON1: MSSP CONTROL REGISTER1 (SPI MODE)


7 6 5 4 3 2 1 0 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 WCOL: Write Collision Detect bit (pour le mode mission seulement) 1 = Une criture a eu lieu dans SSPBUF durant une transmission (le bit doit tre effac par logiciel) 0 = pas de collision SSPOV: Receive Overflow Indicator bit SPI Esclave: 1 = Une donne est arrive avant la lecture de SSPBUF (la donne dans SSPSR est perdue) (le bit doit tre effac par logiciel) 0 = pas dcrassement SSPEN: Synchronous Serial Port Enable bit 1 = Active le port srie et configure SCK, SDO, SDI, et SS comme des broches de port srie SPI attention, les broches doivent tre correctement configure en entre ou en sortie (TRISA et TRISC) 0 = Dsactive la fonction SPI CKP: Clock Polarity Select bit 1 = au repos lhorloge est ltat haut 0 = au repos lhorloge est ltat bas SSPM3:SSPM0: Synchronous Serial Port Mode Select bits 0101 = SPI mode esclave , horloge = SCK , /SS est dsactiv et peut tre utilise en E/S 0100 = SPI mode esclave , horloge = SCK , un niveau bas sur /SS est necessaire pour autoriser la rception 0011 = SPI mode maitre , horloge = sortie de TMR2 /2 0010 = SPI mode maitre , horloge = FOSC/64 0001 = SPI mode maitre , horloge = FOSC/16 0000 = SPI mode maitre , horloge = FOSC/4

cours PICs

46 / 53

PIC18Fxxxx - ressources

20. Communications sries synchrones : bus I2C (IIC)

SDA : Serial Data SCL : Serial Clock Les communications en mode I2C contrairement au mode SPI nutilise que deux fils (SCL et SDA pour horloge et donnes), lhorloge est unique (donc synchrone) et gnre par un maitre . Les donnes transitent sur un seul fil en mission et en rception. Il peut y avoir plusieurs interfaces I2C sur un mme fil de donne avec une hologe synchrone commune. La contrepartie est la necessit dun protocole de communication. Ce protocole est proprit de Philips (voir les spcifications ici : http://www.semiconductors.philips.com/buses/i2c/ ) Interface lectrique :

Au repos donnes et hologe (SDA et SCL) sont ltat haut grce deux rsistances de rappel (Rp) . Un tat actif est donc un zro lectrique. Ce procd permet dviter les courts circuits lectriques au cas ou deux priphriques voudraient prendre le ligne de donne en mme temps.

Le protocole I2C :
Emission dun bit

cours PICs

47 / 53

PIC18Fxxxx - ressources

Condition de dbut (start) et de fin (stop) de trame

Transmission dune tramme de donne sur bus I2C A la fin de la transmission de chaque octet cest lesclave qui place sur la ligne de donne un 0 dacquitement (ack)

Exemple : un maitre lit un esclave S : start, P : stop, RW=1 pour une demande de lecture, A : ACK de lesclave, /A : ACK du maitre

cours PICs

48 / 53

PIC18Fxxxx - ressources Exemple de transmission en mode maitre avec un P18Fxx2

Interface I2C en mode maitre du P18Fxx2 : structure

cours PICs

49 / 53

PIC18Fxxxx - ressources

Le module MSSP (ci contre) utilise 6 registre pour contrler les opration communues aux mode I2C maitre et esclave (le registre SSPSR nest pas accssible) SSPBUF contient la donne emttre ou la donne reue. SSPADD contient ladresse I2C du P18Fxx2

La vitesse de transmission en mode maitre dpende du registre BRG

FCY 10 MHz 10 MHz 10 MHz 4 MHz 4 MHz 4 MHz 1 MHz 1 MHz 1 MHz

FCY*2 20 MHz 20 MHz 20 MHz 8 MHz 8 MHz 8 MHz 2 MHz 2 MHz 2 MHz

BRG Value 19h 20h 3Fh 0Ah 0Dh 28h 03h 0Ah 00h

FSCL(2) (2 Rollovers of BRG) (1) 400 kHz 312.5 kHz 100 kHz (1) 400 kHz 308 kHz 100 kHz (1) 333 kHz 100kHz (1) 1 MHz

cours PICs

50 / 53

PIC18Fxxxx - ressources Registres de contrle en mode I2C SSPSTAT: MSSP STATUS REGISTER (I2C MODE)
7 6 5 4 3 2 SMP CKE D/A P S R/W SMP: Slew Rate Control bit 1 = Slew rate control disabled for Standard Speed mode (100 kHz and 1 MHz) 0 = Slew rate control enabled for High Speed mode (400 kHz) CKE: SMBus Select bit 1 = active le mode particulier SMBus 0 = dsactiv D/A: Data/Address bit en mode esclave: 1 = indique que le dernier octet reu tait une donne 0 = indique que le dernier octet reu tait une adresse P: STOP bit 1 = indique quun bit de stop a t dtect 0 = pas de dtecxtion de bit de stop Note: ffac par RESET ou quand SSPEN est effac S: START bit 1 = indique quun bit de start a t dtect 0 = pas de dtecxtion de bit de start Note: ffac par RESET ou quand SSPEN est effac R/W: Read/Write bit Information En mode esclave indique une opration de 1 = lecture 0 = criture En mode maitre indique : 1 = une transmission en cours 0 = pas de transmission UA: Update Address (pour le mode esclave avec adresse sur 10-bit) 1 = indique quil faut mettre jour ladresse dans le registre SSPADD (2 bits) 0 = rien faire BF: Buffer Full Status bit En mode transmission 1 = Fin de rception, SSPBUF est plein 0 = Rception en cours, SSPBUF est vide En mode rception 1 = Transmission en cours, SSPBUF est plein 0 = Transmission termine, SSPBUF est vide 1 UA 0 BF

SSPCON1: MSSP CONTROL REGISTER1 (I2C MODE)


7 6 5 4 3 2 1 0 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 WCOL: Write Collision Detect bit En mode maitre 1 = Une criture dans SSPBUF a eu lieu alors que les conditions de transfert ntaient pas valide (doit tre effac par logiciel) 0 = pas de collision En mode esclave 1 = Une criture a eu lieu dans SSPBUF durant une transmission valide (doit tre effac par logiciel) 0 = pas de collision SSPOV: Receive Overflow Indicator bit En mode rception 1 = Un octet a t reu alors que SSPBUF tait plein (doit tre effac par logiciel) 0 = pas de dbordement SSPEN: Synchronous Serial Port Enable bit 1 = Active le port srie et configure les broches SDA et SCL 0 = Dsactive le port srie I2C Note : SCL et SDA doivent tre doivent tre correctement configures en entre ou en sortie CKP: SCK Release Control bit En mode esclave 1 = horloge libre 0 = Horloge bloque ltat bas SSPM3:SSPM0: Synchronous Serial Port Mode Select bits 1111 = I2C mode esclave, adresse sur 10-bit avec interruptions sur START et STOP 1110 = I2C mode esclave, adresse sur 7-bit avec interruptions sur START et STOP 1011 = I2C Firmware Controlled Master mode (Slave IDLE)

cours PICs

51 / 53

PIC18Fxxxx - ressources
1000 = I2C mode maitre, horloge = FOSC / (4 * (SSPADD+1)) 0111 = I2C mode esclave, adresse sur 10-bit 0110 = I2C mode esclave, adresse sur 7-bit

SSPCON2: MSSP CONTROL REGISTER 2 (I2C MODE)


7 6 5 4 3 2 1 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN GCEN: General Call Enable bit (seulement en mode esclave) 1 = Autorise linterruption quand une adresse dappelle (0x0000) est reue dans SSPSR 0 = interdit linterruption ACKSTAT: Acknowledge Status bit (pour les transmissions en mode maitre) 1 = pas dacquitement reu de lesclave 0 = acquitement reu de lesclave ACKDT: Acknowledge Data bit (pour les rceptions en mode maitre) 1 = pas dacquitement 0 = acquitement ACKEN: Acknowledge Sequence Enable bit (pour les transmissions en mode maitre) 1 = envoie un acquitement Effacement automatique 0 = pas dacquitement RCEN: Receive Enable bit (mode maitre) 1 = active le mode rception en I2C 0 = rception dsactive PEN: STOP Condition Enable bit (mode maitre) 1 = effectue une condion stop sur SDA et SCL pins. Effacement automatique 0 = pas de stop RSEN: Repeated START Condition Enabled bit (mode maitre) 1 = effectue une condion start sur SDA et SCL pins. Effacement automatique 0 = pas de start SEN: START Condition Enabled/Stretch Enabled bit En mode maitre 1 = effectue une condion start sur SDA et SCL pins. Effacement automatique 0 = pas de start En mode esclave 1 = Clock stretching active pour les modes transmission et rception 0 = Clock stretching active pour le mode transmission uniquement (Legacy mode) 0 SEN

cours PICs

52 / 53

PIC18Fxxxx - ressources

Notes personnelles

cours PICs

53 / 53