Année Universitaire
: 2016 - 2017
Section GEC 1ère Année
Matière Microcontrôleur
Correction TD N°1
Correction EX 1
BSF STATUS, RP0
BCF STATUS, RP1 ; sélection du Bank 1
MOVLW b'00000000'
MOVWF TRISB ; toutes les lignes du port B sont des sorties
BSF TRISA, 0 ; la ligne 0 du port A est une entrée
BCF STATUS, RP0 ; sélection du Bank 0
CLRF PORTB ; met à 0 toutes les lignes du port B.
retour BTFSS PORTA, 0 ; si le bit 0 du port A est à 1 le programme saute une instruction
GOTO retour
MOVLW FF
XORWF PORTB, f ; inverse les bits du port B ( [1111 1111] XOR port B = NOT(port B))
GOTO retour
END
Correction EX 2
ORG 0X00
BCF STATUS, RP1 ; BANK 0 OU 1
BCF STATUS, RP0 ; BANK 0
MOVLW 12
MOVWF 0X20
BSF STATUS, RP0 ; BANK 1
MOVLW 0XF
MOVWF 0XA0
BSF STATUS, RP1 ; BANK 2OU 3
BCF STATUS, RP0 ; BANK 2
MOVLW –5
MOVWF 0X110
BSF STATUS, RP0 ; BANK 3
MOVLW 0X20
MOVWF 0X190
END
Correction EX 3
ORG 0x00
Debut BCF STATUS, RP1 ; bank 0 ou 1
BCF STATUS, RP0 ; bank 0
MOVF 0x6F,W ; chargement de la première valeur dans le registre de travail W
BSF STATUS, RP0 ; bank 1
SUBWF 0xEF,w ;F=F-W
BTFSS STATUS, Z ; F - W= 0 => Z=1 donc les deux valeurs sont égales
; => saut de l’instruction suivante (pas de branchement vers different)
; sinon Z= 0 donc les deux valeurs sont différentes
; =>pas de saut de l’instruction suivante (branchement vers different),
GOTO different ; l’instruction suivante n’est pas forcément un branchement vers
; une étiquette où on traite le cas d’égalité on passe directement pour
; traiter le cas de l’égalité
BSF STATUS, RP1 ; bank 2 ou 3
BCF STATUS, RP0 ; bank 2
MOVLW 0x00 ; les deux instructions peuvent être remplacé par une seule instruction :
2ème Semestre 2016-2017/ ENET’COM / Page 1 sur 4
Année Universitaire : 2016 - 2017
Section GEC 1ère Année
Matière Microcontrôleur
MOVWF 0x16F ; CLRF 0x16F
GOTO debut
different BSF STATUS, RP1 ; bank 2 ou 3
BSF STATUS, RP0 ; bank 3
MOVLW 0xFF ; charger tous les bits de W par “1”
MOVWF 0x1EF
END
Correction EX 4
Ss. Prg. d’addition Ss. Prg. complément à 2 Ss. Prg. de soustraction
sur 16 bits sur 16 bits sur 16 bits
D_addMOVFh’11, W D_negCOMFh’11, f D_subCALLD_neg
ADDWFh’21, f INCFh’11, f CALLD_add
BTFSCSTATUS, C BTFSCSTATUS, Z RETURN
INCFh’20, f DECFh’10, f
MOVFh’10,W COMFh’10, f
ADDWFh’20, f RETURN
RETURN
Autres solutions pour D_neg
Ss. Prg. complément à 2 Ss. Prg. complément à 2
sur 16 bits sur 16 bits
D_negCOMFh’11, f D_negCOMFh’11, f
COMFh’10, f INCFh’11, f
INCFh’11, f BTFSCSTATUS, Z
BTFSCSTATUS, Z GOTO Sinon
INCFh’10, f GOTOAlors
RETURN SinonCOMFh’10, f
INCFh’10, f
RETURN
AlorsCOMFh’10, f
RETURN
Correction EX 5
list p=16F877A
include <[Link]>
org 0x00
bcf STATUS, RP1 ; on sélectionne banque 0 ou 1
bsf STATUS, RP0 ; on passe en banque 1
bcf OPTION_REG, NOT_RBPU ; résistance de rappel en service,
; pas besoin de résistance externe
bcf TRISA, 2 ; bit 2 de TRISA à 0 => RA2 configurée comme sortie
; inutile de configurer TRISB, car il est en entrée par défaut au reset du PIC
bcf STATUS , RP0 ; on repasse en banque 0
boucle btfss PORTB, 2 ; tester RB2, sauter si vaut 1
bsf PORTA, 2 ; RB2 vaut 0, donc on allume la LED (RA2=1)
btfsc PORTB, 2 ; tester RB2, sauter si vaut 0
bcf PORTA, 2 ; RB2 vaut 1, donc LED éteinte (RA2=0)
goto boucle ; et on recommence
end
2ème Semestre 2016-2017/ ENET’COM / Page 2 sur 4
Année Universitaire : 2016 - 2017
Section GEC 1ère Année
Matière Microcontrôleur
Correction EX 6
list p=16F877A
include <[Link]>
org 0x00
Debut MOVLW h'0c'
MOVWF FSR ; 0C dans FSR
Boucle CLRF INDF ; met zéro à l'adresse pointée par FSR
INCF FSR, F ; passe à FSR + 1
BTFSS FSR, 7 ; tester si on détecte la valeur 0x80 qui est égale à 0x7F+1
GOTO Boucle ; boucler si FSR < 7F
GOTO Debut
end
Correction EX 7
Début
Direction des données :
PORTB sortie
Initialisation
PORTA Digital
RA1 entrée
RA1 Non RA3 sortie
Oui
RA3 = 0 RA3 = 1
PORTB = 0XF0 PORTB = 0X0F
Les pins des ports A et E constituent un ensemble de 8 pins Analogique Numérique (AN7 .. AN0) qui peuvent
être utilisés en trois modes différents (entrée analogique, entrée/sortie standard, ou tension de référence). Le
registre ADCON1 permet de sélectionner la configuration adéquate selon la valeur de ses 4 premiers bits
(PCFG3 .. PCFG0). Le bit 7 n’a pas d’importance dans notre cas, c’est pour la configuration du décalage des 10
bits correspondants à la valeur Analogique convertie dans le cas « entrée analogique ».
Registre ADCON1
2ème Semestre 2016-2017/ ENET’COM / Page 3 sur 4
Année Universitaire : 2016 - 2017
Section GEC 1ère Année
Matière Microcontrôleur
Les différentes combinaisons possibles sont données par le tableau suivant :
La valeur de ADCON1 par défaut est 0---0000 ce qui active la configuration « tous les pins sont des entrées
analogique » ce qui ne correspond pas à ce qui est demandé dans cet exercice. Dans notre cas on a besoin de
configurer RA1=AN1 comme entrée standard (Digitale) et RA3=AN3 comme sortie standard (Digitale aussi).
Entrée ou sortie c’est avec TRISA, mais I/O Standard c’est avec ADCON1 ayant la valeur 0110=(0x06) ou
0111=(0x07) qui donne la même configuration ( tous les pins sont des I/O Standard « Digital ») ou aussi avec la
valeur 1110=(0x0E). Dans ce qui suit, on a choisi la valeur 0x06.
list p=16F877
Include <[Link]>
Org 0x00
BCF STATUS, RP1 ; préparation de la sélection banque 0 ou 1
BSF STATUS, RP0 ; on passe en banque 1
BSF TRISA, 1
BCF TRISA, 3
MOVLW 0x06
MOVWF ADCON1 ; les pin AN7.. AN0 sont des I/O digitales
CLRF TRISB ; PORTB en mode sortie
BCF STATUS, RP0 ; on passe en banque 0
test BTFSS PORTA, 1
GOTO case0
BCF PORTA, 3 ; RA3=0
MOVLW 0XF0
MOVWF PORTB ; portB <- 0XF0
GOTO test
case0 BSF PORTA, 3 ; RA3=1
MOVLW 0X0F
MOVWF PORTB ; portB <- 0X0F
GOTO test
end
2ème Semestre 2016-2017/ ENET’COM / Page 4 sur 4