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 directive to define processor
goto r3 decfsz c2
#include
; processor specific variable definitions
goto r2 decfsz c1
__CONFIG _CP_OFF & _WDT_OFF & _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 of program
; go to beginning
clrf TRISA 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' retlw B'10011110'
bsf PORTA,0 ; RA0=1 AFF0 ON
retlw B'11001100' retlw B'11011010'
bcf PORTA,1; RA1= 0 AFF1 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
bsf PORTA,1
; RA1=1
AFF0 OFF
retlw B'11110010' retlw B'11100010' tempo
AFF1 ON 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 afficheur 1
Temporisateur
•
Code assembleur
list p=16F84A define processor
; list directive to
decfsz c2 goto r2
#include ; processor specific variable definitions
decfsz c1 goto r1
__CONFIG _CP_ON & _WDT_OFF & _PWRTE_ON & _RC_OSC
return main bsf STATUS,RP0 ; basculer vers bank1
var EQU 0X0C ; 0x0C l'addresse du variable compteur c1 EQU 0X0D
clrf TRISB ; configuration du PORTB en sortie (Output) 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 andlw 0x0f ;(MSB de W )=0 addwf PCL,f ; PCL=PCL+W retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw
B'01111110' B'00001100' B'10110110' B'10011110' B'11001100' B'11011010' B'11111010' B'00001110' B'11111110' B'11011110' B'11101110' B'11111000' B'01110010' B'10111100' B'11110010' B'11100010'
tempo movlw 1 movwf c1
;code ;code ;code ;code ;code ;code ;code ;code ;code ;code ;code ;code ;code ;code ;code ;code
0 1 2 3 4 5 6 7 8 9 A B C D E F
;conversion et affichage du LSB movfw var call conversion bsf PORTA,0 ;RA0=1 AFF0 ON bcf PORTA,1 ;RA1=0 AFF1 OFF movwf PORTB call tempo ;conversion et affichage du MSB swapf var ; MSB <->LSB movfw var ; w=var swapf var ; MSB <->LSB call conversion bcf PORTA,0 ;RA0=0 AFF0 OFF bsf PORTA,1 ;RA1=1 AFF1 ON movwf PORTB
r1
r2
r3
movlw 85 ; 6*255*255 cycles
call tempo
movwf c2
btfss PORTB,0
movlw 0xff ; 255*255 cycles
goto retour
movwf c3
incf var
decfsz c3 ; 255 cycles goto r3
goto retour 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
__CONFIG
; Définitions de variables
_CP_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC
;definitions
#DEFINE
bp1 PORTA,0
;définir le PORTA,0 par bp1
#DEFINE
bp2
;définir le PORTA,1 par bp2
#DEFINE
porb PORTB
PORTA,1
;définir le PORTB par porb
;declaration des variables
cblock
0x0c
; début de la zone variables
retard_1 :1
; le premier
retard_2 :1
; le deuxième registre pour la temporisation.
endc
registre pour la temporisation.
; 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 bcf
TRISB STATUS,RP0
; configurerle PORTB en sortie ; accéder en bank0
clrf
porb
; effacer le PORTB (initialisation)
btfsc
bp1
;controler le bp1, sauter si c'est le "0" (appui)
goto
debut
;boucler si c'est bp1=1 (c'est pas appui)
call
tempo
;retarder le zero.
incf
porb,f
;incrimenter
debut
star
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
incfsz retard_1
;incrémenter et tester le débordement de reard_1
tempo_1
goto
tempo_1
incfsz retard_2 goto return
end
tempo_1
;boucler s'il n'est pas encor déborder. ;incrémenterle retard_2 si le tard1 est débrdé. ;refaire si le ratard_2 n'est pas encor déborder. ;retourne de la temporisation.
• Montage sur ISIS