Telechargé par You Nes

tp2 microprecesseur

publicité
RÉPUBLIQUE ALGÉRIENNE DÉMOCRATIQUE ET POPULAIRE
MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEURE ET DE LA RECHERCHE
SCIENTIFIQUE
ÉCOLE NATIONALE POLYTECHNIQUE D’ORAN
DÉPARTEMENT DE GÉNIE ÉLECTRIQUE
TP: 02
PROGRAMMATION DES TIMERS
Année universitaire : 2018/2019.
Introduction :
Les timers sont en fait des compteurs formés généralement d’un pré-diviseur suivi
d’un registre compteur de 8 ou 16 bits. L’entrée d’horloge peut être interne (mode
timer) ou externe (mode compteur d’évènements). Lorsque le registre compteur
atteint sa valeur maximale et repasse à 0, un bit indicateur (flag) sera positionné et
une interruption pourra être générée, informant aussi la CPU du débordement devra
être remis à 0 après chaque debordement.
Objectifs de ce TP :
 Comprendre les modes de fonctionnement des Timers.
 Mettre en œuvre les interruptions des Timers en assembleur et en MikroC .
Travail demandé :
 Préparation:
La fréquence de Quartez est : Fosc = 8 MHz.
1- Les fréquences maximales de débordement des différents Timers :
1
4
On a Fosc = 8MHZ  TH =
=
= 0.5 × 10−6 s = 0.5 µs.
6
𝐹𝑜𝑠𝑐 /4
8×10
 Pour le Timer 0 :
TF0 = (256 − 𝑁)(𝐷𝐼𝑉 × 𝑇𝐻 )
Avec: DIV = 256  (PS2 PS1 PS0 =111).
N=0.
TF0 = 3.27 ms
 Pour le Timer 1 :
TF1 = (65536 − 𝑁)(𝐷𝐼𝑉 × 𝑇𝐻 )
Avec: DIV = 8 (T1CKPS1 T1CKPS0 =11).
N=0.
TF1 = 262.144 ms
1
 Pour le Timer 2 :
TF2=DIV1× (𝑃 + 1) × 𝐷𝐼𝑉2 × 𝑇𝑠𝑦
Avec: DIV1=16  (T2CKPS1 T2CKPS0 =1x) .
DIV2=16  (TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 =1111).
P : valeur placé dans le registre PR2 (P= 255).
Tsy : période de l’horloge système (Tsy =0.5µs).
TF2 = 32.76 ms
2- On veut configurer l’un des Timers pour qu’il déborde toutes les 20 ms.
2.1. Le mode de fonctionnement à choisir est : le mode Timer.
2.2. Les valeurs à charger dans les registres :
 Timer 0 :
Prediv= 256 (PS2 PS1 PS0 =111).
TMR0 = (0X64).
OPTION_REG= 00000111 = 0X07.
 Timer 1 :
Prediv= 1 (T1CKPS1 T1CKPS0 =00).
TMR1L= 0XC0 .
TMR1H= 0X63 .
T1CON= 0X31 .
 Timer 2 :
Prediv=DIV1=16 .
Postdiv=DIV2=16.
PR2 = P = 0X9B.
T2CON = 0x7E.
2
 Manipulation:
Le mode Timer :
schéma sous proteus
3
1. Le programme assembleur qui permet de clignoter la LED RB2 toutes les
20ms en utilisant le Timer0 en mode scrutation :
;====================================================================
#include p16f877a.inc
; Include register definition file
__config 0x3F3A
;====================================================================
; VARIABLES
;====================================================================
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
RST code 0x0
goto Start
;====================================================================
; CODE SEGMENT
;====================================================================
PGM code
Start
BANKSEL TRISB
BCF TRISB,2
CLRF INTCON
MOVLW 0x07
MOVWF OPTION_REG
BANKSEL PORTB
CLRF PORTB
MOVLW 0X64
MOVWF TMR0
; Write your code here
Loop
MOVLW 0X64
MOVWF TMR0
A1 BTFSS INTCON,2
goto A1
COMF PORTB,1
BCF INTCON,2
goto Loop
;====================================================================
END
4
2. Le programme assembleur qui permet de clignoter la LED RB2 toutes les
20ms en utilisant le Timer0 en mode interruption :
;====================================================================
#include p16f877a.inc
; Include register definition file
__config3F3A
;====================================================================
; VARIABLES
;====================================================================
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
RST code 0x0
goto Start
ORG 04
goto int
;====================================================================
; CODE SEGMENT
;====================================================================
PGM code
Start
BANKSEL TRISB
BCF TRISB,2
MOVLW 0xA0
MOVWF INTCON ; INTCON =10100000
MOVLW 0x07
MOVWF OPTION_REG ; OPTION_REG = 00000111
BANKSEL PORTB
CLRF PORTB
MOVLW 0X64 ;N=100
MOVWF TMR0
; Write your code here
Loop
goto Loop
int MOVLW 0X64
MOVWF TMR0
COMF PORTB,1
BCF INTCON,2
RETFIE
;====================================================================
END
5
3. Le programme Mikroc qui permet de clignoter la LED RB2 toutes les 20ms
en utilisant le Timer0 en mode interruption :
void interrupt(){
TMR0=0X64;
PORTB=~PORTB;
INTCON.B2=0;
}
void main() {
TRISB = 0;
OPTION_REG=0X07;
INTCON=0XA0;
PORTB=0;
TMR0= 0X64;
for(;;){}
}
4. Le programme Mikroc qui permet de clignoter la LED RB2 toutes les 20ms
en utilisant le Timer1 en mode interruption :
void interrupt() {
TMR1L=0xC0;
TMR1H=0x63;
PORTB=~PORTB;
PIR1=0;
}
void main() {
TRISB=0x00;
INTCON=0xC0;
PIE1=0x01;
T1CON=0x01;
PIR1=0;
PORTB=0;
for( ; ; ) { }
}
6
5. Le programme pour que la LED clignote à 2Hz :
20× 10−3 × 25 = 0.5𝑠 25d=19h
;====================================================================
#include p16f877a.inc
; Include register definition file
__config 0X3F3A
;====================================================================
; VARIABLES
;====================================================================
A EQU 0X20
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
RST code 0x0
goto Start
ORG 04
goto int
;====================================================================
; CODE SEGMENT
;====================================================================
PGM code
Start
BANKSEL TRISB
BCF TRISB,2
MOVLW 0xA0
MOVWF INTCON;INTCON =10100000
MOVLW 07
MOVWF OPTION_REG ;OPTION_REG = 00000111
BANKSEL PORTB
CLRF PORTB
MOVLW 0X64 ; N=100
MOVWF TMR0
MOVLW 0X19
MOVWF A
; Write your code here
Loop goto Loop
int MOVLW 0X64
MOVWF TMR0
DECFSZ A,1
goto A1
COMF PORTB,1
MOVLW 0X19
MOVWF A
RETFIE
A1 BCF INTCON,2
RETFIE
;====================================================================
END
7
Le mode Compteur :
1. Le programme qui incrémente le contenu du registre TMR0 à chaque appui
sur le bouton RA4 et affiche le compte sur les LEDs connectées au PORTB :
;====================================================================
#include p16f877a.inc
; Include register definition file
__config 0X3F3A
;====================================================================
; VARIABLES
;====================================================================
A EQU 0X20
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
RST code 0x0
goto Start
;====================================================================
; CODE SEGMENT
;====================================================================
PGM code
Start
BANKSEL TRISB
CLRF TRISB
MOVLW 0X10
MOVWF PORTA
MOVLW 0X28
MOVWF OPTION_REG ;OPTION_REG = 00000111
BANKSEL PORTB
CLRF PORTB
CLRF TMR0
; Write your code here
Loop
MOVF TMR0,0
MOVWF PORTB
goto Loop
;====================================================================
END

2. programme pour que le registre TMR0 s’incrémente après 4 appuis sur le
bouton RA4 :
on change la valeur de option _reg
;====================================================================
#include p16f877a.inc
; Include register definition file
__config 0X3F3A
;====================================================================
; VARIABLES
;====================================================================
A EQU 0X20
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
8
RST code 0x0
goto Start
;====================================================================
; CODE SEGMENT
;====================================================================
PGM code
Start
BANKSEL TRISB
CLRF TRISB
MOVLW 0X10
MOVWF PORTA
MOVLW 0X21
MOVWF OPTION_REG ;OPTION_REG = 00000111
BANKSEL PORTB
CLRF PORTB
CLRF TMR0
; Write your code here
Loop
MOVF TMR0,0
MOVWF PORTB
goto Loop
;====================================================================
END
9
Téléchargement