Académique Documents
Professionnel Documents
Culture Documents
Les microcontrôleurs
Exercice 1
- Ecrire un programme avec l’instruction ADDWF permettant l’addition du contenu de l’adresse
mémoire 1C avec le contenu de l’adresse mémoire 1D et stocker le résultat de l’addition dans la mémoire
d’adresse 1F - déterminer le code machine du programme.
Exercice 3
- Ecrire un programme qui met à zéro 32 cases mémoires de l’adresse 10 à 2F
- Ecrire un programme qui fait le transfert du contenu de 16 cases mémoires de l’adresse 10 à 1F
vers les cases mémoires de l’adresse 20 à 2F
Exercice 4
Dans cet exercice on utilise le port A en entrée et le port B en sortie ( le port A est relié à 5
interrupteurs I4 … I0 et le port B à 8 Leds L7 … L0 ).
1- Allumer L0 si I2 actionné.
2- Allumer L4 si I0 et I1 actionnés.
3- Allumer L5 si I3 ou I4 actionné.
4- Ecrire un programme qui réalise une temporisation d’une seconde.
5- Allumer alternativement L0 et L2 toutes les secondes.
6- Ecrire un programme qui réalise un chenillard (allumage successif des leds à la cadence d’une
seconde)
Exercice 5
5-1- Donner l'organigramme et écrire un programme permettant d'allumer une Led (RB0=1) à la
1ère action sur un bouton (RA4 passe de 0 à 1) et éteindre la Led (RB0=0) au 2ème appui sur le bouton
poussoir (RA4 passe de 0 à 1).
Page : 1/9
5-2- En utilisant le mode compteur des impulsions sur RA4, Donner l'organigramme et écrire un
programme permettant d'afficher en binaire sur le portB (RB7…RB0) le nombre d'impulsions reçues sur
l'entrée RA4 (on utilise le front descendant pour le comptage des impulsions; et on suppose que le nombre
des impulsions ne dépassent pas 255).
Tableau des instructions du PIC16F84
Page : 2/9
Tableau des registres du PIC16F84
Page : 3/9
UNIVERSITE DE TUNIS
Les microcontrôleurs
Exercice 1
Org 0x100
……….. BCF STATUS,RP0 ; Sélection du Bank 0
……….. MOVF 0x1C,W ; W←[0x1C]
……….. ADDWF 0x1D,W ; W←W+[0x1D]
……….. MOVWF 0x1F ; [0x1F]←W
……….. End.
Exercice 2
Comparer le contenu de la mémoire d’adresses 1E Hex avec le contenu de la mémoire d’adresses 1F Hex et,
• si le contenu est le même, mettre 0 dans la mémoire d’adresses 1E Hex et mettre FF Hex dans la mémoire
d’adresses 1F Hex,
• et si le contenu est différent, échanger les données, c’est-à-dire : le contenu de la mémoire d’adresses 1E
Hex dans la mémoire d’adresses 1F Hex et inversement.
Org 0x100
……….. BCF STATUS,RP0 ; Sélection du Bank 0
……….. MOVF 0x1E,w ; W←[0x1E]
……….. SUBWF 0x1F,w ; W←[0x1F]-W
……….. BTFSZ STATUS, Z ; Si flag Z=1 sauter l’instruction suivante
……….. GOTO ADR1 ; Aller à l’adresse Adr1 ([0x1E]≠ [0x1F])
……….. CLRF 0x1E ; [0x1E]← 0
……….. CLRF 0x1F ; [0x1F]← 0
……….. COMF 0x1F,f ̅̅̅̅̅̅̅̅̅
; [0x1F]← [0𝑥1𝐹]
……….. GOTO end ; sauter vers la fin du programme
ADR1 : MOVF 0x1E,w ; W←[0x1E]
……….. MOVWF 0x1D ; Sauvegarder une copie de [0x1E]
……….. MOVF 0x1F,w ; W←[0x1F]
……….. MOVWF 0x1E ; [0x1E] ←W
……….. MOVF 0x1D,w ; W←[0x1D] : restauration de la copie de 1E
……….. MOVWF 0x1F ; [0x1F] ←W
……….. End.
Page : 4/9
Exercice 3
Rappelle :
Adressage indirect est réalisé par deux registres :
- FSR : pour pointer l’adresse, on dit que FSR est un "pointeur".
- INDF : Mémoire du registre pointé par le registre FSR
Exemple 1:
On cherche à récupérer une information sauvegardée dans la mémoire, l’adresse de
cette information est donnée par le registre d’adresse 1Eh. Après avoir récupérer
l’information, on va la sauvegarder à l’adresse 1Fh.
Org 0x100
……….. BCF STATUS,RP0 ; Sélection du Bank 0
……….. MOVF 0x1E,w ; W←[0x1E]
……….. MOVWF FSR ; FSR ←W
……….. MOVF INDF,w ; W← INDF : charger w par le
contenu ; du registre pointé par FSR
……….. MOVWF 0x1F ; [0x1F] ←W
……….. End.
Exemple 2:
Sauvegarder l’état logique du port B dans l’adresse donnée par le registre d’adresse 1Eh.
Org 0x100
……….. BCF STATUS,RP0 ; Sélection du Bank 0
……….. MOVF 0x1E,w ; W←[0x1E]
……….. MOVWF FSR ; FSR ←W : pointer le registre cible
……….. MOVF PORTB,w ; W← PORTB
……….. MOVWF INDF ; INDF ←W : charger le registre pointé
; par le contenu de l'accumulateur W
……….. End.
Page : 5/9
• Ecrire un programme qui fait le transfert du contenu de 16 cases mémoires de l’adresse 10 à 1F vers les
cases mémoires de l’adresse 20 à 2F.
Exercice 4
Dans cet exercice on utilise le port A en entrée et le port B en sortie ( le port A est relié à 5 interrupteurs I4 … I0 et
le port B à 8 Leds L7 … L0 ).
4.1- Allumer L0 si I2 actionné.
Org 0x100
……….. BCF STATUS,RP0 ; Sélection du Bank 0
……….. CLRF TRISB ; Configuration du port B en sortie
……….. MOVLW 0xFF ; W←FFh
……….. MOVWF TRISA ; Configuration du port A en entrée
Page : 6/9
4.2- Allumer L4 si I0 et I1 actionnés.
Org 0x100
……….. BCF STATUS,RP0 ; Sélection du Bank 0
……….. CLRF TRISB ; Configuration du port B en sortie
……….. MOVLW 0xFF ; W←FFh
……….. MOVWF TRISA ; Configuration du port A en entrée
CLRF PORTB ; Initialisation du port B : PORTB←0
Page : 7/9
Loop NOP ; Ne rien faire : 1 cycle
……….. NOP ; Ne rien faire : 1 cycle
……….. DECFSZ CMP1,f ; CMP1 ← CMP1-1 et test si égale à 0 : 1 cycle
……….. GOTO Loop ; Si non sauter vers Loop : 2 cycles
; Total boucle 1 : 5 cycles
; Si oui
……….. MOVLW 99 ; W←99 : Rechargement du compteur 1 :1 cycle
……….. MOVWF CMP1 ; 1 cycle
……….. DECFSZ CMP2,f ; CMP2 ← CMP2-1 et test si égale à 0 :1 cycle
……….. GOTO Loop ; Si non sauter vers Loop : 2 cycles
; Total boucle 2 : 5 cycles + 1 cycle de DECFSZ CMP1,f
; Si oui
……….. MOVLW 40 ; W←40 : Rechargement du compteur 2 :1 cycle
……….. MOVWF CMP2 ; 1 cycle
……….. DECFSZ CMP3,f ; Si oui CMP3 ← CMP3-1 et test si égale à 0 :1 cycle
……….. GOTO Loop ; Si non sauter vers Loop : 2 cycles
; Total boucle 3 : 5 cycles + 1 cycle de DECFSZ CMP2,f
……….. RETURN ; 2 cycles + 1 cycle de DECFSZ CMP3,f
Donc si on initialise CMP1 par 99, CMP2 par 40 et CMP3 par 50, on aura une temporisation de :
Page : 8/9
4.6- Ecrire un programme qui réalise un chenillard (allumage successif des leds à la cadence d’une seconde).
Org 0x100
……….. BCF STATUS,RP0 ; Sélection du Bank 0
……….. CLRF TRISB ; Configuration du port B en sortie
……….. CLRF PORTB ; Initialisation du port B : PORTB←0
BSF STATUS,C ; Set du flag C
Loop RLF PORTB,f ; Rotation de contenu du port B avec le flag C
……….. CALL Delay_1s ; Appelle de sous-programme Delay_1s
……….. GOTO Loop ; Reboucler
……….. End. ; fin
Exercice 5
5-1- Donner l'organigramme et écrire un programme permettant d'allumer une Led (RB0=1) à la 1ère action sur un
bouton (RA4 passe de 0 à 1) et éteindre la Led (RB0=0) au 2ème appui sur le bouton poussoir (RA4 passe de 0 à 1).
5-2- En utilisant le mode compteur des impulsions sur RA4, Donner l'organigramme et écrire un programme
permettant d'afficher en binaire sur le portB (RB7…RB0) le nombre d'impulsions reçues sur l'entrée RA4 (on utilise
le front descendant pour le comptage des impulsions; et on suppose que le nombre des impulsions ne dépassent
pas 255).
Page : 9/9