Vous êtes sur la page 1sur 4

Correction EX EN5.

1 2020

Ex1 :
1/ TMR0 est un registre compteur de 8 bit.
2/ TOCS Clock source select bit
= 1 : fonctionnement en mode compteur (horloge externe)
= 0 : fonctionnement en mode Timer (horloge interne Fosc/4)
3/ PSA Prescaler Assignment bit.
= 1 : Prédiviseur assigné au Watchdog (WDT)
= 0 : Prédiviseur assigné au Timer0
4/ T1CON, TMR1H, et TMR1L.
5/
- Il est formé d’une paire de registres de 8 bits TMR1H et TMR1L montés en
cascade formant ainsi un registre compteur 16 bits.
- Le pré diviseur programmable permet la division de fréquence par 1, 2, 4 ou 8.
- Le timer 1 peut, tout comme le timer 0, fonctionner en mode Timer ou en mode
compteur avec la possibilité de connecter un Quartz entre les broches RC0 et
RC1.
- Fonctionnement en mode synchrone ou asynchrone. Le mode asynchrone
permet au timer 1 de compter en mde veille (Sleep).
- Possibilité de bloquer le comptage.
6/
- - TCKPS1 TCKPS0 T1OSCEN T1 Synch\ TMR1CS TMR1ON

Ex2 : (4 pts)
1/

Tcalc = th x Pred x ( 256 – TMR0) avec th = = ×


= 0.25 us

AN : Tcalc = 0.25 x 10 x 4 x (256-16) = 240 x 10 0.24 ms


2/
OPTON_REG
- - TOCS TOSE PSA PS2 PS1 PS0
0 0 1 1 0 0 0 1

OPTION_REG= 0b00110001
3/
#int_rtcc
GIE=1
TOIE=1
OPTION_REG= 0b00110001

EX 3 : (13.5 pts)
1/ (0.5 pts)
Tdes = 0.5 ms

2/ (6.75 pts)
Tcalc= × × (65536 − 1)

1 ère étape : = × 8 × (65536 ) avec = = $%&' = 1 )*


(

= 10 × 8 × (65536 ) = 524.288 .*
2 éme étape : / = 0.5 .* < 1 21 524.288 .*
3 éme étape : 1 21 = 0.5 .* = × × (65536 − 1)
3'45' .: × ;<
TMR1 = 65536 − = 65536 − ;
3 × 6789 × × =
On doit changer le prediviseur pred =4 Pour cela on va refaire tous les étapes

Tcalc= × × (65536 − 1)

1 ère étape : = × 4 × (65536 ) avec = = $%&' = 1 )*


(

= 10 × 4 × (65536 ) = 262.144 .*
2 éme étape : / = 0.5 .* < 1 21 262.144 .*
3 éme étape : 1 21 = 0.5 .* = × × (65536 − 1)
3'45' .: × ;<
TMR1 = 65536 − 3 = 65536 − ;
= 65536 − 125
× 6789 × ×
1 = 65411

>?@ :
TMR1H = = = 255
A: A:
TMR1L = 1 − ( 256 × 255) = 65411 − (256 × 255 ) = 131
T1CON
- - TCKPS1 TCKPS0 T1OSCEN T1 Synch\ TMR1CS TMR1ON
0 0 1 0 0 1 0 1
T1CON = 0b00100101

3/ (6.25 pts)
#include <16f877.h>
#use delay (clock=4M)
#fuses Xt, Nowdt
#byte INTCON= 0x0B
#bit GIE=INTCON.7
#byte PIE1= 0x8C
#bit TMR1IE=PIE1.0
#byte T1CON=0x81
#byte TMR1H=0x0F
#byte TMR1L=0x0E
#byte PORTC = 0x07
#byte TRISC= 0x87
#bit RC0=PORTC.0
#bit PEIE=INTCON.6

#int_timer1
void F()
{ TMR1L=131;
TMR1H=255;
t++ ;
if((t>=0) && (t<2))
{RC0=1 ;}
if((t>=2) && (t<40))
{RC0=0 ;}
if((t>=40) && (t<43))
{RC0=1 ;}
if((t>=43) && (t<80))
{RC0=0 ;}
if((t>=80) && (t<84))
{RC0=1 ;}
if((t>=84) && (t<120))
{RC0=0 ;}
If (t==120 )
{ t=0 ;}
}
void main()
{
TRISC=0x00 ;
T1CON=0b00100101;
RC0=0 ;
while(1)
{GIE=1;
T1CON=1;
PEIE=1 ;
}
}

Vous aimerez peut-être aussi