IUP SI 1 Examen Architecture des calculateurs 26 Avril 2004
3. Ecrire la fonction mesure.
int mesure(int canal)
{
int M;
ADCON=canal;
SET_SFRBIT(ADST);
WAIT_UNTIL_BIT_SET(ADCIR);
CLR_SFRBIT(ADCIR);
M=(ADDAT & 0x3F)*5./1024.; // conversion en mV
return M;
}
4. Ecrire la fonction emission sachant que l’on envoie d’abord les bits de poids faible de l’entier.
void emission()
{
S0TBUF=valeur & 0x00FF;
WAIT_UNTIL_BIT_SET(S0TBIR);
CLR_SFRBIT(S0TBIR);
S0TBUF=(valeur >> 8) & 0x00FF;
WAIT_UNTIL_BIT_SET(S0TBIR);
CLR_SFRBIT(S0TBIR);
}
3 Mesure de p´eriode
On utilise l’unit´e CAPCOM1 en mode capture pour mesurer la p´eriode d’un signal TTL. Le
signal est connect´e `a la broche CC4IO du C167 et le timer T1 est utilis´e sans rechargement (T1REL=0).
La mesure de la p´eriode se fait entre deux fronts descendants du signal. Apr`es la capture permettant
de d´eterminer la p´eriode, T1 est r´einitialis´e `a 0 pour la capture suivante.
3.1 Initialisations
1. On choisit la r´esolution de T1 permettant d’obtenir la meilleure pr´ecision. Quelle est cette
r´esolution? et quelle est la p´eriode maximale que l’on peut mesurer sans d´ebordement de T1?
R´esolution min: 400ns
P´eriode max: 26,2ms
2. Quelle est la p´eriode minimale (et donc la fr´equence maximale) mesurable sachant que l’on
veut une pr´ecision meilleure que 1%?
P´eriode min=100 x 400ns=40 µs
Fr´equence max=1/P´eriode min=25 kHz
3. Quels sont les registres `a programmer pour r´ealiser la capture sachant que l’on veut g´en´erer
une interruption de niveau 5 (groupe 0) sur chaque front descendant du signal `a mesurer?
Quelles sont les initialisations n´ecessaires de ces registres?
CCM1=0x0A
CC4IC=0x54
T01CON=0x4000 (T1R=1)
3.2 Mesure
On suppose que l’interruption provoqu´ee par un front descendant du signal `a mesurer correspond
`a la fois `a la fin d’une p´eriode (et donc `a sa mesure) et au d´ebut d’une nouvelle p´eriode.