Corrigé TD Microcontrôleurs et CAN
Corrigé TD Microcontrôleurs et CAN
Exercice 1
Le microcontrôleur étant alimenté par 5 V, nous allons essayer de dimensionner la résistances R1 dans les montages ci-
dessous, selon les valeurs normalisées données au tableau suivant :
Une Led verte ( = 565 nm à 10 mA, VD = 2.09 V) est montée sur RA2. Calculer la résistance R1 pour avoir un courant ne
dépassant pas 4 mA.
U = 5-2.09 =[Link]
➔ R1 = 2910/4 = 727,5
En serie E12 680 < R1 < 820
→ 680 en serie E12 car r = 727-680= 47 et r = 820–727 = 93
En serie E24 750 < R1 < 820
→ 750 en serie E24 car r = 820–727 = 93 et r = 750–727 = 23
Exercice 2
Soit un CAN de 8 bits de résolution. Quelle sera la sensibilité (en mV) de ce CAN, pour chacune des plages de
tension :
a ) 0 V à +2,5 V) s1 = V1/28=2.5 / 256 = 09,77 mV
b ) -2,5 V à +2,5 V s2 = V2/28=5 / 256 = 19,53 mV
Exercice 3
1. Avec PORTA = 23 et PORTB = 44, évaluer les expressions suivantes :
▪ PORTA &= PORTB
➔ PORTA = PORTA & PORTB
2310 = (0001 0111)2
4410 = (0010 1100)2
0001 0111
& 0010 1100
===============
0000 0100 = 410
➔ PORTA = 410
➔ PORTB = 4410
▪ PORTA ^= PORTB
➔ PORTA = PORTA ^ PORTB
2310 = (0001 0111)2
4410 = (0010 1100)2
0001 0111
^ 0010 1100
===============
0011 1011 = 5910
➔ PORTA = 5910
➔ PORTB = 4410
1
▪ PORTA = PORTA | PORTB
➔ PORTA = PORTA ^ PORTB
2310 = (0001 0111)2
4410 = (0010 1100)2
0001 0111
Or 0010 1100
===============
0011 1111 = 6310
➔ PORTA = 6310
➔ PORTB = 4410
2. Avec POARTA = 16 et PORTB = 37, évaluer les expressions suivantes :
PORTA = 1610 = (0001 0000)2
PORTB = 3710 = (0010 0101)2
▪ PORTA = PORTA >> 1 (ou PORTA >>= 1)
PORTA = 0 0001 0000
Après 1 décalage DROITE
PORTA = 0000 1000 = 810 et C=0
▪ PORTA = PORTA >> 2 (ou PORTA >>= 2)
PORTA = 00 0001 0000
Après 2 décalages DROITE
PORTA = 0000 0100 = 410 et C=0
▪ PORTB = PORTB << 1 (ou PORTB <<=1)
PORTB = 0010 0101 0
Après 1 décalage GAUCHE
PORTB = 0100 1010 = 7410 et C=0
▪ PORTB = PORTB << 2 (ou PORTB <<=2)
PORTB = 0010 0101 00
Après 2 décalages GAUCHE
PORTB = 1001 0100 = 14810 et C=0
3. Quelles sont alors les opérations arithmétiques réalisées par ces décalages ?
▪ a << 1 (→*2) ; a << 2 (→*4) ; a << 3 (→*8) ; a << n (→*2n) ;
n décal. Droite ==> /2n.
▪ a >> 1 (→/2) ; a >> 2 (→/4) ; a >> 3 (→/8) ; a >> n (→/2n) ;
n décal. Gauche ==> *2n.
Exercice 4
Écrire un programme pour mettre tous les bits du PORTB du PIC16F84 au niveau logique 1, puis à la logique 0, et répéter
ce procédé dix fois avec des retards de ½ s entre les commutations. Nous supposons l'utilisation de l’instruction for pour créer
une boucle qui répète les opérations requises dix fois.
1. Proposer la version standard du programme C.
Mettre tous les bits = Forcer tous les bits ➔ Broches en SORTIE
Par contre si on dire LIRE l’état des bits ➔ Broches en ENTREE
void main ()
{
unsigned char j ;
TRISB = 0 ; //ou 0x00
for (j = 0 ; j < 10 ; j++) // Répéter 10 fois ou (j=1 ; j <=10 ; j++) ou (j = 0 ; j <= 9 ; j++)
{
PORTB = 0xFF ; // Mettre les bits du PORTB à 1 ou PORTB= 0b11111111
Delay_ms(500) ; // Retard de ½ s
PORTB = 0 ; // Mettre les bits du PORTB à 0 ou 0x00 ou 0b00000000
Delay_ms(500) ; // Retard de ½ s
}
}
2
2. Proposer la version du programme C utilisant la complémentation du PORTB.
void main ()
{
unsigned char j ;
TRISB = 0 ; //ou 0x00
PORTB =0xFF ; //valeur initiale du PORTB
for (j = 0 ; j < 20 ; j++) // Répéter 10 fois ou (j=1 ; j <=10 ; j++) ou (j = 0 ; j <= 9 ; j++)
{
PORTB = ~PORTB ; // Complémenter tous les bits du PORTB
Delay_ms(500) ; // Retard de ½ s
}
}