Partie 2 : Modification pour la soustraction (Montage n°2)
Travail demandé :
1. Modifier le programme pour soustraire 0x40 de W.
2. Interpréter le résultat selon les conditions :
o Résultat négatif : LED3 (RB1) s’allume.
o Résultat positif : LED2 (RB3) s’allume.
o Résultat nul : LED1 (RB5) s’allume.
Solution :
1. Programme Assembleur :
list p=16F877
#include p16f877.inc
org 0x00
; Configuration des ports
BSF STATUS, RP0
MOVLW 0x00 ; PORTB en sortie
MOVWF TRISB
MOVLW 0xFF ; PORTA en entrée
MOVWF TRISA
BCF STATUS, RP0
BCF PORTB, 5 ; Éteindre LED1 (RB5)
BCF PORTB, 1 ; Éteindre LED3 (RB1)
BCF PORTB, 3 ; Éteindre LED2 (RB3)
; Soustraction
MOVLW 0x40
SUBWF PORTB, W ; Résultat = PORTB - 0x40
BTFSS STATUS, Z ; Si résultat nul
GOTO Test1
BSF PORTB, 5 ; Allumer LED1 (RB5)
GOTO FIN
Test1 BTFSC STATUS, C ; Si résultat négatif
GOTO Test2
BSF PORTB, 1 ; Allumer LED3 (RB1)
GOTO fin
Test2 BTFSC STATUS, C ; Si résultat positif
BSF PORTB, 3 ; Allumer LED2 (RB3)
FIN nop
END
2. Interprétation des résultats :
o La LED correspondante s'allume selon la condition du résultat.
3. Solution pour le montage 3 :
Voici le code après la modification :
list p=16F877
#include p16f877.inc
org 0x00
; Configuration des ports
BSF STATUS, RP0
MOVLW 0x00 ; PORTA en sortie
MOVWF TRISA
MOVLW 0xFF ; PORTB en entrée
MOVWF TRISB
BCF STATUS, RP0
; Soustraction
MOVLW 0x40
SUBWF PORTB, W ; Résultat = PORTB - 0x40
BTFSS STATUS, Z ; Si résultat nul
GOTO Test1
BSF PORTA, 2 ; Allumer LED1 (RA2)
GOTO FIN
Test1 BTFSC STATUS, C ; Si résultat négatif
GOTO Test2
BSF PORTA, 0 ; Allumer LED3 (RA0)
GOTO FIN
Test2 BTFSC STATUS, C ; Si résultat positif
BSF PORTA, 1 ; Allumer LED2 (RA1)
FIN nop
END
Le montage 02 (de la fiche de TP) c’est le même de la question
précédente et aussi il a le même programme.
L’organisme :
MONTAGE 04 :
list p=16F877
#include p16f877.inc
org 0x00
; Configuration des ports
BSF STATUS, RP0
MOVLW 0x00 ; PORTA en sortie
MOVWF TRISA
MOVLW 0xFF ; PORTB en entrée
MOVWF TRISB
BCF STATUS, RP0
; Soustraction
MOVLW 0x40
SUBWF PORTB, W ; Résultat = PORTB - 0x40
BTFSS STATUS, Z ; Si résultat nul
GOTO Test1
BSF PORTA, 5 ; Allumer LED1 (RAB5)
GOTO FIN
Test1 BTFSC STATUS, C ; Si résultat négatif
GOTO Test2
BSF PORTA, 3 ; Allumer LED3 (RA3)
GOTO FIN
Test2 BTFSC STATUS, C ; Si résultat positif
BSF PORTA, 4 ; Allumer LED2 (RA4)
FIN nop
END
*
Dans ce cas, le programme ne fonctionne pas car RA4 n'est pas une broche analogique et
ne peut pas être utilisée comme entrée/sortie numérique.
Les principales modifications à apporter sont les suivantes : changer le bit 4 dans le
registre TRISA.
Exemple 2 : Décodeur à LEDs
1. Programme Assembleur :
list p=16F877
#include p16f877.inc
org 0x00
bsf STATUS, RP0
movlw 0xFF
movwf TRISB
clrf TRISA
bcf STATUS, RP0
test
movf PORTB, w
btfsc PORTB, 0
movlw 0x00
goto fin
btfsc PORTB, 1
movlw 0x01
goto fin
btfsc PORTB, 2
movlw 0x02
goto fin
btfsc PORTB, 3
movlw 0x03
goto fin
btfsc PORTB, 4
movlw 0x04
goto fin
btfsc PORTB, 5
movlw 0x05
goto fin
btfsc PORTB, 6
movlw 0x06
goto fin
btfsc PORTB, 7
movlw 0x07
goto fin
clrf PORTA
goto test
fin
movwf PORTA
goto test
end
Les résistances placées entre les boutons poussoirs (BP) et l'alimentation (power) sont
appelées des résistances pull-up.
Leur rôle :
a. Stabilisation du signal logique
b. Éviter les signaux parasites
c. Simplification du câblage
PARTIE 4 : Compteur/Décompteur à LEDs (Montage n°6)
1. Programme Assembleur :
; Configuration des ports
BSF STATUS, RP0
MOVLW 0x00 ; PORTA en sortie
MOVWF TRISA
MOVLW 0xFF ; PORTB en entrée
MOVWF TRISB
BCF STATUS, RP0
; Initialisation
CLRF PORTA ; Effacer PORTA
CLRF COUNT ; Initialiser le compteur
; Boucle principale
Main:
BTFSC PORTB, 0 ; Si BP1 (RB0) appuyé
INCF COUNT, F ; Incrémenter
BTFSC PORTB, 1 ; Si BP2 (RB1) appuyé
DECF COUNT, F ; Décrémenter
MOVF COUNT, W ; Charger COUNT
MOVWF PORTA ; Afficher COUNT sur PORTA
GOTO Main ; Reboucler
END
2. Problème dû aux rebonds des boutons :
o Ajouter un délai (dé-bounce) pour éviter plusieurs incréments/décréments par
pression.
République Algérienne Démocratique et Populaire
Ministère de l'Enseignement Supérieur et de la Recherche
Scientifique
Université des Sciences et de la Technologie d'Oran
Mohamed BOUDIAF
FACULTE DE GENIE
ELECTRIQUE
SPECIALITE : Automatique
Présentée par :
Lahrour Yacine Abderrahmene
Boukhari Oussama
TP N°03
Microcontrôleur
Année universitaire :2024/2025