0% ont trouvé ce document utile (0 vote)
59 vues3 pages

TD2 mcPIC18

Transféré par

yabouki2009
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
59 vues3 pages

TD2 mcPIC18

Transféré par

yabouki2009
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TD2_bis Microcontrôleur Valeurs initiales Instructions

Exercice 1 Adresse Contenu subwf 0x5C,f


1. Donner la signification de chaque instruction et son mode d’adressage dans le deux cas 0x5A 0x3B movlw 0x5C
a) et b). 0x5B 0xA2 addwf 0x5C,f
a) Movlw 0x55
0x5C 0xF4 addwf 0x5A,f
Movwf 0x40
Movwf 0x41 incf 0x5B,w
Movwf 0x42
Movwf 0x43 13. Traduire en assembleur le fragment du code suivant :
Char i,j ;
b) Movlw 0x55
If(i>j)
Lfsr 0x40
Movwf INDF0 i=j;
Incf FSR0L,f
Movwf INDF0 Exercice 3
Incf FSR0L,f
On considère des nombres signés codés sur 8 bits, le 8ème bit est un bit de signe.
Movwf INDF0
Incf FSR0L,f Donner le résultat ainsi que l’état des indicateurs N, Z, et C dans les cas suivants :
Movwf INDF0 0x01 + 0xFF ; 0x80 + 0x7F ; 0xF2 – 0x20
2. Que réalisent les séquences a) et b) ?
Exercice 4
Exercice 2 Soit le programme suivant :
1. Quel est le rôle du registre BSR ?
signed char MyNum[]={+1, -1, +2, -2, +3, -3, +4, -4} ;
2. Ecrire le fragment de code assembleur permettant de charger la valeur 0x99 dans la case
mémoire d’adresse 0x202 ; char z ;
3. Ecrire le fragment de code assembleur permettant de copier la contenu de la case mémoire void main()
d’adresse 0x202 dans la case mémoire d’adresse 0x203 ; { TRISD =0 ;
4. Ecrire la séquence assembleur qui permet de transférer le contenu du PORTB dans
for(z =0 ; z < 8 ; z++)
WREG.
5. Quel est le registre qu’on utilise comme pointeur de données en adressage indirect ? PORTD = MyNum[z] ;
6. Donner les capacités des mémoires RAM et Flash du microcontrôleur PIC18F4520. while(1) ;
7. Quel est l’avantage de mettre des données dans la mémoire Flash ? }
8. Quels sont les registres à utiliser pour accéder à une donnée chargée dans la mémoire
Donner dans un tableau les valeurs (en binaire) à la sortie du PORTD en fonction de z.
Flash ?
9. Donner les étapes nécessaires pour lire une information située dans la mémoire Flash à Exercice 5
l’adresse 0x2000. Donner les valeurs des ports B, C et D après exécution.
10. Dans quel mémoire (RAM ou Flash) doit-on sauvegarder les données suivantes :
void main()
a) Température
b) Date et heure { TRISB =0 ; TRISC = 0 ; TRISD = 0 ;
c) Version du programme PORTB = 0x35 & 0x0F ; PORTC = 0x04 | 0x68 ; PORTD = 0x54 ^0x78 ;
11. Ecrire le code assembleur qui calcule l’expression : k = i –j . les variables i, j et k ont pour PORTB = ~0x55 ; PORTC |= (0x9A>> 3) ; PORTD &= 0x06 ;
adresses 0x400, 0x401 et 0x402.
While(1) ;
12. Donner la valeur de la case mémoire affectée après exécution de chaque instruction. En
prend pour états initiales : }
WREG = 0x3D ; BSR = 0x00 ;

-1- -2-
3. Donner pour les cas suivants les valeurs possibles de BPs en Hexadécimal.
Exercice 6
char MyDATA[] = {0x25, 0x62, 0x3F, 0x52} ;
char sum =0 ;
char z, Checksum ;
void main() 4. En utilisant l’instruction à choix multiples « switch … case », écrire le programme C
{ TRISC = 0 ; permettant d’allumer une LED lorsque le bouton correspondant est enfoncé.
For(z = 0 ; z < 4 ; z++) Exercice 8
{ PORTC = MyDATA[z] ; 1. En utilisant les masques, écrire l’instruction qui permet :
Sum = sum +MyDATA[z] ; - De mettre à 1 les bits RB3 et RB5 du PORTB
- De mettre à 0 les bits RB1 et TB7 du PORTB
}
- D’inverser le bit RB6 du PORTB
Checksum = ~sum+1 ; PORTC = Checksum ; - De mettre le bit RB2 à 1 et RB6 à 0.
While(1) ; 2. Ecrire les expressions booléennes sur les tests suivants : Expression vraie si,
} - RB2 à 1 et RB0 à 0
- RB3 à 1 ou RB1 à 0
Donner les valeurs des variables « sum » et « Checksum » après exécution du programme.
3. Donner les valeurs possibles de l’expression suivante :
A quoi sert la variable Checksum ? ((p1 & 0x80) >>3)^(p1 & 0x10)
Exercice 7 Exercice 9
On donne le schéma du montage suivant : 1. Traduire en langage C l’algorithme suivant :
Début
PORTC  0x81 ;
Répéter toujours
PORTC  (PORTC << 1)|(PORTC >> 7));
Attente_1000ms;
Fin répéter
fin
2. Donner dans un tableau, les états possibles du PORTC
RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
1 0 0 0 0 0 0 1


1. Comment configurer le PORTB, sachant les bits RB7, RB6, RB3 et RB0 seront 3. Quelle est la fonction réalisée par l’instruction :
considérés comme des entrées. PORTC  (PORTC << 1)|(PORTC >> 7));
2. Dans le programme C, on trouve l’instruction suivante : BPs = PORTB & 0x30.
Exercice 10
Quel doit être le type de la variable BPs ?
1. Ecrire un programme permettant de faire clignoter la LED connectée à la broche RC0 au
rythme de 500ms allumée; 500ms éteinte.
On utilisera la fonction prédéfinie delay_ms().
2. Modifier le programme pour faire clignoter toutes les LEDs du PORTC en même temps
au rythme de 500ms allumée; 500ms éteinte.

-3- -4-
3. Modifier le programme pour faire clignoter les 8 leds par paquet de 4 au rythme de
500ms allumée ; 500ms éteinte.
4. Modifier le programme pour faire le décalage à gauche puis à droite. Vous pouvez utiliser
l’algorithme suivant :
Debut
PORTC  0x01
Tant que (1) Faire
Pour i allant de 0 à 6 Faire
PORTC  PORTC << 1
Attente 500ms
FinFaire
Pour i allant de 0 à 6 Faire
PORTC  PORTC >> 1
Attente 500ms
FinFaire
Fin Tant que
fin
Exercice 11
Ecrire un programme C permettant d’allumer la Led (RC2) selon le tableau suivant :
RB1 RB0 Led
0 0 Led  0
0 1 Led  1
1 0 Led clignote à une fréq. De 1 Hz
1 1 Led clignote à une fréq. De 0,5 Hz

Ali Hmidene
ISET Sousse 2014

-5-

Vous aimerez peut-être aussi