MICROCONTROLEUR ET PROGRAMATION
COMPTE RENDU DU TP N°01
Gestion des afficheurs 7 segments
• Microcontrôleur : pic 16f84A
• Programmation : assembleur sur MPLAB
Plan
I. Affichage hexa d’une variable 8 bits sur 1 afficheur 7 segment
II. Affichage hexa d’une variable 8 bits sur 2 afficheur 7 segment
III.Affichage hexa d’une variable 8 bits sur 4 afficheur 7 segment
IV. un compteur binaire
Groupe : E.I.2.2.2
• LOUSSIF MOUHAMED AMINE
• YAZID HAITHEM
• CHAWKI ZGUIDER
I. Affichage hexa d’une variable 8 bits sur 1 afficheur 7 segment
• Description
Le code suivant permet d’incrémenter et d’afficher une variable hexadécimale de 8 bits sur un
afficheur 7 segment.
Un bouton poussoir liée au pin RB0 est programmé comme étant une interruption, l’appui sur ce
bouton permet d’incrémenter cette variable.
Déclarer une variable
compteur
Compteur = 0
Conversion Hex 7seg
Afficheur
NON
RB0=0 ?
OUI
Compteur++
NON
RB0=0 ?
OUI
• Code assembleur
list p=16F84A ; list goto r3
directive to define processor
decfsz c2
#include <p16F84A.inc> ;
processor specific variable definitions goto r2
__CONFIG _CP_OFF & _WDT_OFF & decfsz c1
_PWRTE_ON & _RC_OSC goto r1
var EQU 0X0C return
c1 EQU 0X0D MAIN bsf STATUS,RP0
c2 EQU 0X0E bcf STATUS,RP1
c3 EQU 0X0F movlw 0x01
org 00h movwf TRISB
goto MAIN ; go to beginning clrf TRISA
of program
bcf STATUS,RP0
hex_2_7seg
clrf var
andlw 0x0F ;MSB DE W =0
debut
addwf PCL,f ;PCL=PCL+W
;conversion et affichage du LSB
retlw B'01111110'
movfw var
retlw B'00001100'
call hex_2_7seg
retlw B'10110110'
bsf PORTA,0 ; RA0=1 AFF0
retlw B'10011110' ON
retlw B'11001100' bcf PORTA,1; RA1= 0 AFF1
retlw B'11011010' OFF
retlw B'11111010' movwf PORTB
retlw B'00001110' call tempo
retlw B'11111110' ;conversion et aff de MSB
retlw B'11011110' swapf var ; MSB<->LSB
retlw B'11101110' movfw var
retlw B'11111000' swapf var
retlw B'01110010' call hex_2_7seg
retlw B'10111100' bcf PORTA,0 ; RA0=0
AFF0 OFF
retlw B'11110010'
bsf PORTA,1 ; RA1=1
retlw B'11100010' AFF1 ON
tempo movwf PORTB
movlw 1 call tempo
• Montage sur ISIS
I. Affichage hexa d’une variable 8 bits sur 2 afficheur 7 segment
• Description
Le programme suivant permet d’incrémenter et d’afficher un variable
hexadécimal de 8 bits sur deux afficheurs 7 segments (affichage multiplexé),
les deux afficheurs sont a cathode commune tels que les deux cathodes sont
liés l’un au pin RA0 et l’autre au pin RA1.Un bouton poussoir liée au pin RB0
est programmé comme étant une interruption, l’appui sur ce bouton permet
d’incrémenter cette variable.
On suit l’organigramme suivant :
Initialisation PORT
(E/S)
Init(V1)
Convertir le
LSB(V1)
Hex7seg
Activer Afficheur 0
Afficheur sur PORT B
Temporisation
(25ms/s)
Convertir
MSB(V1)
Hex7seg
Activer Temporisateur
afficheur 1
• Code assembleur
list p=16F84A ; list directive to decfsz c2
define processor
goto r2
#include <p16F84A.inc> ;
processor specific variable definitions decfsz c1
goto r1
__CONFIG _CP_ON & _WDT_OFF & return
_PWRTE_ON & _RC_OSC main
bsf STATUS,RP0 ; basculer vers bank1
var EQU 0X0C ; 0x0C l'addresse du clrf TRISB ; configuration du PORTB en
variable compteur sortie (Output)
c1 EQU 0X0D
bsf TRISB,0 ; RB0 (input)
c2 EQU 0X0E
clrf TRISA ; PORTA (output)
c3 EQU 0X0F
bcf STATUS,RP0 ; basculer vers bank0
ORG 0
clrf var ; var=0
goto main
retour
conversion
;conversion et affichage du LSB
andlw 0x0f ;(MSB de W )=0
movfw var
addwf PCL,f ; PCL=PCL+W
call conversion
retlw B'01111110' ;code 0
retlw B'00001100' ;code 1 bsf PORTA,0 ;RA0=1 AFF0 ON
retlw B'10110110' ;code 2
retlw B'10011110' ;code 3 bcf PORTA,1 ;RA1=0 AFF1 OFF
retlw B'11001100' ;code 4
movwf PORTB
retlw B'11011010' ;code 5
retlw B'11111010' ;code 6 call tempo
retlw B'00001110' ;code 7
retlw B'11111110' ;code 8 ;conversion et affichage du MSB
retlw B'11011110' ;code 9
swapf var ; MSB <->LSB
retlw B'11101110' ;code A
retlw B'11111000' ;code B movfw var ; w=var
retlw B'01110010' ;code C
retlw B'10111100' ;code D swapf var ; MSB <->LSB
retlw B'11110010' ;code E
call conversion
retlw B'11100010' ;code F
bcf PORTA,0 ;RA0=0 AFF0 OFF
tempo
bsf PORTA,1 ;RA1=1 AFF1 ON
movlw 1
movwf PORTB
movwf c1
r1 movlw 85 ; 6*255*255 cycles call tempo
movwf c2 btfss PORTB,0
r2 movlw 0xff ; 255*255 cycles goto retour
movwf c3 incf var
r3 decfsz c3 ; 255 cycles goto retour
goto r3
attente1
btfss PORTB,0
goto attente1
attente2
btfsc PORTB,0
goto attente2
incf var
goto retour
END
• Montage sur ISIS
I. Affichage hexa d’une variable 8 bits sur 4 afficheur 7 segment
Description
Le programme suivant permet d’incrémenter et d’afficher un variable
hexadécimal de 16 bits sur 4 afficheurs 7 segments(affichage multiplexé) ,les
4 afficheurs sont a cathode commune tels que les 4 cathodes sont liés aux
pins RA0 ,RA1,RA2 et RA3.Un bouton poussoir liée au pin RB0 est
programmé comme étant une interruption ,l’appui sur ce bouton permet
d’incrémenter cette variable.
Code
Montage sur ISIS
II. UN COMPTEUR BINAIRE
• Description
c’est un compteur binaire sur 8 bits qui compte de b’00000000’ jusqu'à
b’11111111’ , à l’aide d’un pic 16f84A, deux bouton-poussoir, l’un relié à
la pin RA0 (BP1) et l’autre à la pin RA1 (BP2) :
- BP1 lance le programme
-BP2 stoppe le comptage
Le résultat est affiché sur deux afficheur 7 segments
• Code
LIST p=16F84 ; Définition de processeur
#include <p16F84.inc> ; Définitions de variables
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC
;definitions
#DEFINE bp1 PORTA,0 ;définir le PORTA,0 par bp1
#DEFINE bp2 PORTA,1 ;définir le PORTA,1 par bp2
#DEFINE porb PORTB ;définir le PORTB par porb
;declaration des variables
cblock 0x0c ; début de la zone variables
retard_1 :1 ; le premier registre pour la temporisation.
retard_2 :1 ; le deuxième registre pour la temporisation.
endc ; fin de la zonz variable
;configuration des ports
org 0x00 ; Adresse de départ après reset
bsf STATUS,RP0 ; acceder en bank1
movlw b'11111' ; configurerle PORTA en entré.
movwf TRISA
clrf TRISB ; configurerle PORTB en sortie
bcf STATUS,RP0 ; accéder en bank0
clrf porb ; effacer le PORTB (initialisation)
debut
btfsc bp1 ;controler le bp1, sauter si c'est le "0" (appui)
goto debut ;boucler si c'est bp1=1 (c'est pas appui)
star
call tempo ;retarder le zero.
incf porb,f ;incrimenter
btfsc bp2 ;controler le bp2, sauter si c'est le "0" (appui)
goto star ;continuait le comptage.
goto debut ;si on clique sur bp1 on arrete la comptage.
tempo ;etiquette de la temporésation
clrf retard_1 ;initialiser retard_1
clrf retard_2 ;initialiser retard_2
tempo_1
incfsz retard_1 ;incrémenter et tester le débordement de reard_1
goto tempo_1 ;boucler s'il n'est pas encor déborder.
incfsz retard_2 ;incrémenterle retard_2 si le tard1 est débrdé.
goto tempo_1 ;refaire si le ratard_2 n'est pas encor déborder.
return ;retourne de la temporisation.
end
• Montage sur ISIS