You are on page 1of 3

;

COMPTEUR ET AFFICHAGE BINAIRE

;
;
; Sur la carte d'apprentissage, 4 leds sont utilises.
; Elles sont connectes sur le port A : RA0 RA3.
;
; RB4 est connect BP1.
; Ce programme incrmente le "file register" (variable) COUNT
; chaque appui sur BP1.
;
; La valeur de COUNT est affiche par les leds connectes sur le port A.
;
; Vous devez obtenir un affichage binaire de COUNT sur les leds LD5 LD8.
; La valeur doit s'incrmenter chaque appui sur BP1.
;
; -----------------------------------------------------------------------;
; VOUS DEVREZ MODIFIER LE PROGRAMME POUR QU'IL SOIT CONFORME
; A LA DESCRIPTION SUIVANTE :
;
; Modif 1 :
; Un appui sur BP2 doit remettre zro ce compteur.
;
; Modif 2 :
; Afficher la valeur du compteur de telle manire que :
;
1er appui sur BP1 allume LD1,
;
2nd appui sur BP1 allume aussi LD2,
;
....
;
8e appui sur BP1 allume toutes les leds.
;
9e appui sur BP1 teint toutes les leds.
;
10e appui sur BP1 allume nouveau LD1
;
....
;
; Modif 3 :
; La led LD4 doit clignotter tant que BP1 est appuy.
;
;
; NE MODIFIEZ AUCUNE LIGNE AU DESSUS DE L'INDICATION : "VOUS POUVEZ MODIFIER A PARTIR
D'ICI"
;
;
; ---------------------------------------------------------------------------------; Dbut du fichier assembleur.
; ----------------------------------------------------------------------------------

; OU

LIST
ERRORLEVEL
PROCESSOR
RADIX

P=16F84A,F=INHX8M
-302
16F84
DEC

;
;
;
;

list directive to define processor


SUPPRIME "BANK SELECTION MESSAGES"
type de microprocesseur
valeurs en dcimal par dfaut !

#include

<P16F84A.INC> ; Fichier "P16F84.INC" pour les dfinitions


; des variable spcifiques

__CONFIG

_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

__CONFIG

H'3FF1' ; XT
; B13..B4 : 3F ou 3E selon la valeur de B4
; B4:
CODE PROTECTION, 1=OFF
; B3:
POWER UP, 0=Valid
; B2:
WDOG, 1=Valid
; B1-0: OSC SELECT, 01=XT, 11=RC

__IDLOCS

H'1234'

; Octet d'identification
1/3

; ---------------------------------------------------------------------------------; Dfinitions des variables


; ---------------------------------------------------------------------------------COUNT

equ

0x10

; ---------------------------------------------------------------------------------; Dfinition des Vecteurs IT et RESET


; ----------------------------------------------------------------------------------

;
;

ORG
GOTO

0
MAIN

ORG
GOTO

0x0004
PROGIT

;
;
;

; vecteur du dbut de programme (RESET)


; affect au programme MAIN
; vecteur d'interruption
; affect au programme PROGIT

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * VOUS POUVEZ MODIFIER A PARTIR D'ICI * * * * * * *
* * * * * * * * * * * * * * * * * * * * ** * * * * * * * * *

; ---------------------------------------------------------------------------------; Programme principal


; ---------------------------------------------------------------------------------MAIN: ORG

0010h

; dbut du code en $10

CALL

INIT

; appel sous-prog INIT

movlw
clrf
movwf

0
COUNT
PORTA

Loop

btfss
goto
Endloop
goto

IncCount
incf
movf
movwf

Debounce
btfss
goto
Enddebounce
goto

; W = 0
; COUNT = W
; affiche W sur le port A

PORTB,4
IncCount

; teste si RB4 est 1 ?


; si non, incrmente COUNT

Loop

; si oui, vrifie encore

COUNT,1
COUNT,w
PORTA

; incrmente la variable COUNT


; W = COUNT
; affiche W sur le port A

PORTB,4
Debounce

; teste si RB4 est 1 ? (BP appuy ?)


; si non, teste encore

Loop

; si oui, retourne attendre un appui sur le BP

2/3

; ---------------------------------------------------------------------------------; Initialisation des registres et des ports


; ---------------------------------------------------------------------------------INIT

MOVLW
MOVWF
MOVLW
MOVWF

B'00010000'
PORTA
B'00000000'
PORTB

BSF

STATUS,RP0

MOVLW

MOVWF

B'00000111'
;
;
;
;
;
;
;
OPTION_REG

MOVLW
MOVWF

B'11110000'
TRISB

; RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0


; in in in in out out out out

MOVLW
MOVWF

B'00000'
TRISA

; RA4 RA3 RA2 RA1 RA0 (0=OUTPUT, 1=INPUT)


; out out out out out

BCF

STATUS,RP0

MOVLW

B'00000000'
;
;
;
;
;
;
;
INTCON

MOVWF

; Valeurs de RA0..RA3 = 0 et RA4=1


; Valeurs de RB0..RB7 = 0

; slection Bank1 : registres OPTION & TRIS dans Bank1 !

b6:
b5:
b4:
b3:
b2:
b1:
b0:

; b7: RBPU
- PORT B PULL-UP RES, 0=ON, 1=OFF
INTEDG - INT par Front sur RB0 : 0=H2L, 1=L2H
T0CS
- TMR0 SOURCE : 0=FOSC/4, 1=transition sur RA4
T0SE
- RA4CLK PIN EDGE SELECT, 0=L2H, 1=H2L
PSA
- CHOIX SOURCE (PRESCALE ASSIGN) 0=TIMER, 1=WDG
PS2
- PREDIVISEUR (PRESCALE RATE) :
PS1
Timer : 000 = /2 111 = /256
PS0
Wdt
: 000 = /1 111 = /128
; Diviseur Timer par 128
(0=OUTPUT, 1=INPUT)

; slection Bank0 : registre INITCON dans Bank0 ! ! !

b6:
b5:
b4:
b3:
b2:
b1:
b0:

; b7: GIE - GLOBAL INT ENABLE, 0=OFF


EEIE - EERAW WRITE DONE INT ENABLE, 0=OFF
T0IE - TMR0 O/FLOW INT ENABLE, 0=OFF
INTE - RB0 INT ENABLE, 0=OFF
RBIE - PORTB CHANGE-OF-STATE INT ENABLE, 0=OFF
T0IF - TMR0 O'FLOW FLAG, 1=O/FLOW, (SOFTWARE MUST RESET)
INTF - RB0 INT FLAG, ACTIVE HIGH
RBIF - PORTB CHANGE-OF-STATE FLAG, ACTIVE HIGH
; pas d'IT slectionnes

RETURN

; ---------------------------------------------------------------------------------; Directive de fin de programme


; ---------------------------------------------------------------------------------END

; ! OBLIGATOIRE : indique la fin des instructions.

3/3

You might also like