pic16f84
DESCRIPTION
exemples simple de programmation en assembleurTRANSCRIPT
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.
NON
OUI
NON
OUI
Conversion Hex 7seg
Afficheur
RB0=0 ?
Compteur++
RB0=0
Déclarer une variable compteur
Compteur = 0
Code assembleur
list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
var EQU 0X0Cc1 EQU 0X0Dc2 EQU 0X0Ec3 EQU 0X0Forg 00h
goto MAIN ; go to beginning of programhex_2_7seg
andlw 0x0F ;MSB DE W =0addwf PCL,f ;PCL=PCL+Wretlw B'01111110'retlw B'00001100'retlw B'10110110'retlw B'10011110'retlw B'11001100'retlw B'11011010'retlw B'11111010'retlw B'00001110'retlw B'11111110'retlw B'11011110'retlw B'11101110'retlw B'11111000'retlw B'01110010'retlw B'10111100'retlw B'11110010'retlw B'11100010'
tempo movlw 1movwf c1
r1 movlw 85movwf c2
r2 movlw 0xffmovwf c3
r3 decfsz c3
goto r3decfsz c2goto r2decfsz c1goto r1return
MAIN bsf STATUS,RP0bcf STATUS,RP1movlw 0x01movwf TRISBclrf TRISAbcf STATUS,RP0clrf var
debut;conversion et affichage du LSB
movfw varcall hex_2_7segbsf PORTA,0 ; RA0=1 AFF0 ONbcf PORTA,1; RA1= 0 AFF1 OFFmovwf PORTBcall tempo
;conversion et aff de MSBswapf var ; MSB<->LSBmovfw varswapf varcall hex_2_7segbcf PORTA,0 ; RA0=0 AFF0 OFFbsf PORTA,1 ; RA1=1 AFF1 ONmovwf PORTBcall tempobtfss PORTB,0goto debutincf vargoto debutEND ; directive 'end of
program'
Montage sur ISIS
II. 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 :
Code assembleur
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
list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions
__CONFIG _CP_ON & _WDT_OFF & _PWRTE_ON & _RC_OSC
var EQU 0X0C ; 0x0C l'addresse du variable compteur
c1 EQU 0X0Dc2 EQU 0X0Ec3 EQU 0X0F ORG 0goto main
conversionandlw 0x0f ;(MSB de W )=0addwf PCL,f ; PCL=PCL+Wretlw B'01111110' ;code 0retlw B'00001100' ;code 1retlw B'10110110' ;code 2retlw B'10011110' ;code 3retlw B'11001100' ;code 4retlw B'11011010' ;code 5retlw B'11111010' ;code 6retlw B'00001110' ;code 7retlw B'11111110' ;code 8retlw B'11011110' ;code 9retlw B'11101110' ;code Aretlw B'11111000' ;code Bretlw B'01110010' ;code Cretlw B'10111100' ;code Dretlw B'11110010' ;code Eretlw B'11100010' ;code F
tempomovlw 1movwf c1
r1 movlw 85 ; 6*255*255 cyclesmovwf c2
r2 movlw 0xff ; 255*255 cyclesmovwf c3
r3 decfsz c3 ; 255 cyclesgoto r3
decfsz c2goto r2decfsz c1goto r1return
mainbsf STATUS,RP0 ; basculer vers bank1
clrf TRISB ; configuration du PORTB en sortie (Output)bsf TRISB,0 ; RB0 (input)clrf TRISA ; PORTA (output)bcf STATUS,RP0 ; basculer vers bank0clrf var ; var=0
retour;conversion et affichage du LSBmovfw varcall conversion
bsf PORTA,0 ;RA0=1 AFF0 ONbcf PORTA,1 ;RA1=0 AFF1 OFFmovwf PORTBcall tempo;conversion et affichage du MSBswapf var ; MSB <->LSBmovfw var ; w=varswapf var ; MSB <->LSBcall conversion
bcf PORTA,0 ;RA0=0 AFF0 OFFbsf PORTA,1 ;RA1=1 AFF1 ONmovwf PORTBcall tempobtfss PORTB,0goto retourincf vargoto retour
attente1btfss PORTB,0goto attente1
attente2btfsc PORTB,0goto attente2incf vargoto retour
END
Montage sur ISIS
III. 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
IV. UN COMPTEUR BINAIRE
Descriptionc’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 comptageLe 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