Академический Документы
Профессиональный Документы
Культура Документы
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
- 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
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
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.
Donnes 8 bits
Donnes 8 bits
Adresses 20 bits
Adresses 11 bits
4.1.
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.
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.
cours PICs
11 / 53
PIC18Fxxxx - ressources
4.4.
4.5.
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
cours PICs
12 / 53
PIC18Fxxxx - ressources
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
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
OSCCON LVDCON WDTCON RCON TMR1H TMR1L T1CON TMR2 PR2 T2CON SSPBUF
IPEN
IRVST
LVDEN RI
LVDL3 TO
LVDL2 PD
LVDL1 POR
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
Timer2 Register Timer2 Period Register TOUTPS TOUTPS2 TOUTPS1 3 SSP Receive Buffer/Transmit Register TMR2O T2CKPS1 N
TOUTPS0
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
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
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
ADON PCFG0
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
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
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
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
65, 68 68 65, 68
xx-0 x000
66
81 77 79 80 76 78
IBF
OBF
IBOV
PSPMODE
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
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
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
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
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
cours PICs
17 / 53
PIC18Fxxxx - ressources
CCP2IE: CCP2 Interrupt Enable bit Autorise linterruption CCP2 (pour capture ou compare)
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
tictac --
tictac = 0
tictac=125 (125*4ms)
PB0=/PB0
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
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
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
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
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
; 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
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)
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
// 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
//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
//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
cours PICs
30 / 53
PIC18Fxxxx - ressources
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
(N)
TMR1IE
&
Division par 1, 4, 16
TMR1IF
Dbordement
Interruption
CCP
Dtection de front
CCPI
&
Interruption
T=D*E/N
D=CCPR-N N=CCPR
D=CCPR-N N=CCPR
D=CCPR-N N=CCPR
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
E
E= Q/4
&
TMR1IF
Dbordement
Interruption
CCPF
&
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
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
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)
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
cours PICs
41 / 53
PIC18Fxxxx - ressources
cours PICs
42 / 53
PIC18Fxxxx - ressources
cours PICs
43 / 53
PIC18Fxxxx - ressources
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
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
cours PICs
46 / 53
PIC18Fxxxx - ressources
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
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
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
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
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
cours PICs
52 / 53
PIC18Fxxxx - ressources
Notes personnelles
cours PICs
53 / 53