Académique Documents
Professionnel Documents
Culture Documents
PLAN
I. FAMILLE PIC DE MICROCHIP II. ORGANISTION DU 16F84 Description Gnrale Structure interne et externe Organisation de la mmoire III. LE JEU DINSTRUCTIONS IV. LES MODES DADRESSAGE V. LES INTERRUPTIONS SUR LES PICS Mcanisme dinterruption sur les PICs Les sources dinterruptions sur la 16F84 VI. FORME GENERALE DUN PROGRAMME Configuration du PIC Structure dun programme avec interruption VII. EXEMPLES DAPPLICATIONS
2
La famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876);
16 F 84 -04
Catgorie du PIC: PIC Mid-Range
Indique une mmoire de type Flash Le PIC existe aussi en deux versions:
PIC16F 84 : pour une utilisation dans une gamme d'alimentation classique (4.5 5.5V).
PIC16LF84: pour une gamme tendue de l'alimentation (2 6V).
5
Description Gnrale
Le PIC16F84 est un microcontrleur 8 bits qui offre un trs bon rapport qualit/prix. Ses principales caractristiques: seulement 35 mots dinstructions vitesse jusqu' 10Mhz 4 sources d'interruption 1000 cycles effacement/criture possible de la mmoire programme flash 1K mots mmoire programme Flash 68 octets de donnes RAM 64 octets de donnes EEPROM 6
principales caractristiques: (suite) 13 Entre/Sortie 1 Timer/Compteur 4 Sources doscillateur slectionnable Mode sleep (pour une faible consommation) Programmation par ISP (In Serial Programming)
Structure externe
Le PIC16F84 est log dans un botier 18 broches DIL ou SOIC ( version CMS).
PIN 1: 3me bit du PORTA PIN 2: 4me bit du PORTA PIN 3: 5me bit du PORTA / TOCK PIN 4: RESET PIN 5: GND PIN 6: 1er bit du PORTB PIN 7: 2me bit du PORTB PIN 8: 3me bit du PORTB PIN 9: 4me bit du PORTB
Structure interne
Organisation de la mmoire
La mmoire du PIC16F84 est divise en deux parties distinctes:
10
la mmoire programme
La mmoire programme est constitue de 1K mots de 14 bits. RESET le PIC16F84 commence l'adresse 0000H (Vecteur RESET). Interruption le microcontrleur va l'adresse 0004H (Vecteur d'INTERRUPTION). On trouve donc en mmoire programme un mot de 14 bits: Exemple: movlw 10 110000 00001010
11
la mmoire RAM
La mmoire RAM est organise en 2 banques pour la 16F84.La RAM est subdivise de plus en deux parties. Dans chacune des banques nous avons des cases mmoires spciales appeles Registres spciaux et 68 octets de cases mmoires libre pour notre utilisation . - En page 0, des registres fondamentaux - En page 1, des registres associs - Les adresses 00 et 07 ne contiennent aucune mmoire . 01 TMRO: contenu du timer 8 bits, il peut tre Incrment par lhorloge (fosc/4) ou RA4. 02 PCL: 8 bits du poids faible du PC, les 5 bits Du poids fort sont dans PCLATH .
12
03 STATUS: registre dtat contenant: - 5 bits, drapeaux caractrisant le rsultat de l opration ALU; (lecture) - 1 bit de slection de page RP0 (0: page 0). ( lecture /criture)
Carry: retenue sur un octet Digit carry: retenue sur un quartet Zro: rsultat nul pour une opration ALU
04 FSR: contient ladresse dun autre registre (adressage indirect). 05 PORTA et 06 PORTB: registres de donnes des ports parallles. 08 EEDATA: contient un octet lu ou a crire dans lEEPROM de donnes. 09 EEADR: contient ladresse de la donne lue ou crite dans lEEPROM . 0B INTCON: contrle des 4 interruptions.
13
Masques : GIE : (Global Interrupt Enable) : masque global dinter. EEIE : (EEProm Interrupt Enable) T0IE : (Timer 0 Interrupt Enable) INTE: ( Interrupt Enable) Entre dinter sur broche RB0/INT RBIE: (RB Interrupt Enable) Entres dinter sur broches RB4-RB7. Drapeaux : T0IF : (Timer 0 Interrupt Flag) dbordement du timer INTF: ( Interrupt Flag) interruption provoque par la broche RB0/INT RBIF: ( RB Interrupt Flag) interruption provoque par les broches RB4-RB7.
RBPU/: (RB Pull Up) Rsistances de tirage Vdd des entres du port B. INTEDG: (Interrupt Edge) Front actif sur RB0 ( 1 pour front montant). RTS: (Real Timer Source) Signal alimentant timer0 : 0 pour horloge interne, 1 pour RA4/T0CLK RTE (Real Timer Edge) front actif du signal timer ( 0 pour front montant). PSA (Prescaler assignment) 0 pour Timer 0 et 1 pour chien de garde WDT. PS2..0 (Prescaler 210 ) Valeur du Diviseur de frquence pour les timers. 14
85 TRISA: Direction des donnes pour le port A : 0 pour sortir et 1 pour entrer 86 TRISB: Direction des donnes pour le port B : 0 pour sortir et 1 pour entrer 88 EECON1: Contrle le comportement de lEEPROM de donnes.
EEIF: (EEProm Interrupt Flag) passe 1 quand lcriture est termine. WRERR: (Write Error) 1 si erreur dcriture. WREN: (Write Enable) : 0 pour interdire lcriture en EEProm de donnes. WR: (Write) 1 pour crire une donne. Bit remis automatiquement 0 RD: (Read) : 1 pour lire une donne. Bit remis automatiquement 0
15
;dfinition de ladresse
;dfinition de la donne
;) ;) scurit ;) ;) ; criture
16
INCFSZ f,d
IORWF f,d MOVF f,d MOVWF f NOP RLF f,d RRF f,d SUBWF f,d SWAPF f,d XORWF f,d
GOTO k
IORLW k MOVLW k OPTION k RETLW k SLEEP TRIS f XORLW k
Exemple: movlw movwf movlw movwf movf 0x50 mavariable mavariable FSR INDF,w
LE CONTENU DE INDF EST TRADUIT PAR LA PIC COMME ETANT LE CONTENU DE LEMPLACEMENT MEMOIRE POINTE PAR FSR (W) = 0X50
20
Son
equ
Note equ
org
H'00'
Configuration du PIC
__config B'11111111110001' ~ Bit0 et bit1: fixe le type d'oscillateur: 11 => horloge avec un circuit RC 01 => horloge quartz (4Mhz en gnral) ~ Bit2: Le chien de garde est activ lorsqu'il est "1"
~ Bit3: La tempo l'allumage du PIC est utilise lorsqu'il est "0" Cette tempo est utile pour permettre l'oscillateur de se stabiliser. ~ Bit4 Bit 13: lorsqu'ils sont "1", le programme n'est pas protg, on peut toujours le rcuprer du PIC. Dans le cas contraire, on ne peut pas lire le programme contenu dans le PIC, on peut juste l'excuter.
24
org H'04' ; adresse dinterruption { programme dinterruption } retfie ;retour lendroit ou le programme sest interrompu dbut { les instructions du programme } end
25
26
list p=16f84,f=inhx8m __config B'11111111110111' #include "p16f84.inc" bsf STATUS,RP0 movlw B'00001101' movwf OPTION_REG movlw B'11111110' movwf TRISB bcf Boucle sleep comf goto end PORTB,1 Boucle STATUS,RP0
27
movlw B'11111110'
movwf TRISB
bcf STATUS,RP0
clrf temp1
decfsz temp2,1
goto comf goto Boucle PORTB,1 Debut
Debut
Boucle
end
goto Boucle
temps
equ H'0C'
org H'00' goto Debut org H'04' movlw D'012' movwf TMR0 bcf INTCON,T0IF
movlw B'10000111'
movwf OPTION_REG bcf TRISB,0 bcf STATUS,RP0 movlw D'008' movwf temps movlw B'10100000'
decfsz temps,1
retfie comf PORTB,1 movlw D'008' Boucle
movwf INTCON
goto Boucle end
29
30
list p=16f84,f=inhx8m __config B'11111111110001' include "p16f84.inc" bsf STATUS,RP0 movlw B'11100000'
goto Enregistre
comf PORTB,0 movwf EEDATA movwf PORTA call Ecriture incf EEADR,1 return
movwf TRISA
bcf OPTION_REG,7 bcf STATUS,RP0 clrf PORTA clrf EEADR Boucle btfss PORTB,6
Lit
btfss PORTB,7 goto Lit call Lecture movf EEDATA,0 movwf PORTA incf EEADR,1
31
call Enregistre
btfss PORTB,7 call Lit goto Boucle
return
; Lecture EEPROM ;criture EEPROM Ecriture Lecture bsf STATUS,RP0 bsf STATUS,RP0 clrf EECON1 bsf EECON1,RD bsf EECON1,WREN bcf STATUS,RP0 movlw H'55' return movwf EECON2 ;criture des donnes dans la mmoire EEPROM du movlw H'AA' ;PIC l'aide du programmateur movwf EECON2 org H'2100' bsf EECON1,WR de EcritureFin B'00000001',B'00000010',B'00000100',B'00001000' de btfsc EECON1,WR B'00010000',B'00010000',B'00001000',B'00000100' goto EcritureFin de B'00000010',B'00000001',B'00000000' bcf STATUS,RP0 end Return
32
FIN
33