Vous êtes sur la page 1sur 14

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)

Hex7seg

Activer Afficheur 0

Afficheur sur PORT B

Temporisation
(25ms/s)

Convertir
MSB(V1)

Hex7seg

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