You are on page 1of 5

Droulement sance mardi 06/mars/2017 :

Objectif : TD programmation assembleur 16F84

Exercice 1 :
Enonc : crire un programme qui :
- Dclare trois variables (var1, var2 et somme).
- Additionne ces deux valeurs.
- Met le rsultat dans une variable "somme".
Correction :

CBLOCK 0x00C
variable1 : 1
variable2 : 1
somme : 1
ENDC
movf variable1,w
addwf variable2,w
movwf somme

Remarques :

- movlw mavariable movlw 0x0E ; 0x0E est l@ mmoire de mavariable et non le contenu

On appelle a adressage immdiat.

- movf mavariable , wcontenu de l@ mmoire de mavariable dans w

On appelle a adressage direct.

Exercice 2 : On veut crire un programme assembleur qui permet de faire clignoter une
diode led connecte au pin RA4 ; Proposer un schma de montage.

Start

Bcf portA,4

Call tempo

Bsf portA,4

Call tempo

end

1
Remarque: Sortie collecteur ouvert:

-lorsque la logique interne place le niveau haut (1L) au pinle transist est satur Vs=0V.

-lorsque la logique interne place le niveau bas (0L) au pinle transist est bloqu Vs=Z
(Etat haute impdance : ninfluence pas le reste).

Vdd

1K
RA4

Exercice 3:

Exemple dapplication 1 :

En partant de ce schma, nous dsirons allumer la LED lorsque nous pressons le bouton, et
lteindre lorsque nous le relchons.

2

;********************************************************
LIST p=16F84 ; Dfinition de processeur
#include <p16F84.inc> ; Dfinitions de variables

#DEFINE LED1 PORTA,2 ; Led rouge1

#DEFINE BOUTON1 PORTB,2 ; bouton-poussoir1

;**** ASSIGNATIONS **********************************


OPTIONVAL EQU H'0000' ; Valeur registre option

org 0x000 ; Adresse de dpart aprs reset

bsf STATUS,RP0 ; slectionner banque 1


movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
; rsistance de rappel en service
bcf TRISA , 2
bsf TRISB , 2

bcf STATUS,RP0 ; repasser banque 0


;********************************************************
; PROGRAMME PRINCIPAL *
;********************************************************
boucle ; tiquette dbut de la boucle principale
btfss PORTB , 2 ; tester RB2, sauter si vaut 1
bsf PORTA , 2 ; RB2 vaut 0, donc on allume la LED
btfsc PORTB , 2 ; tester RB2, sauter si vaut 0
bcf PORTA , 2 ; RB2 vaut 1, donc LED teinte
goto boucle ; et on recommence
END ; directive fin de programme

Exemple dapplication 2 :

Nous voulons faire clignoter notre LED une frquence de 1Hz (1 clignotement par seconde)
.

;********************************************************

LIST p=16F84 ; Dfinition de processeur

3
#include <p16F84.inc> ; Dfinitions de variables

#DEFINE LED PORTA,2 ; Led rouge

;*********** DECLARATIONS DE VARIABLES *********************

CBLOCK 0x00C ; dbut de la zone variables

cmpt1 : 1 ; compteur de boucles 1

cmpt2 : 1 ; compteur de boucles 2

cmpt3 : 1 ; compteur de boucles 3

ENDC ; Fin de la zone

org 0x000 ; Adresse de dpart aprs reset

bsf STATUS,RP0 ; slectionner banque 1

;**** initialisations spcifiques*****

bsf STATUS , RP0 ; on passe en banque 1

bcf TRISA , 2

bcf STATUS,RP0 ; repasser banque 0

goto start ; sauter au programme principal

;********************************************************

; SOUS-ROUTINE DE TEMPORISATION

;********************************************************

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

; Cette sous-routine introduit un retard de 500.000 s.Elle ne reoit aucun


paramtre et n'en retourne aucun

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

tempo

movlw 2 ; pour 2 boucles

movwf cmpt3 ; initialiser compteur3

boucle3

clrf cmpt2 ; effacer compteur2

boucle2

clrf cmpt1 ; effacer compteur1

boucle1

4
nop ; perdre 1 cycle

decfsz cmpt1,f ; dcrmenter compteur1

goto boucle1 ; si pas 0, boucler

decfsz cmpt2,f ; si 0, dcrmenter compteur 2

goto boucle2 ; si cmpt2 pas 0, recommencer boucle1

decfsz cmpt3,f ; si 0, dcrmenter compteur 3

goto boucle3 ; si cmpt3 pas 0, recommencer boucle2

return ; retour de la sous-routine

;********************************************************

; PROGRAMME PRINCIPAL *

;********************************************************

start

bsf LED ; allumer la LED

call tempo ; appeler la tempo de 0.5s

bcf LED ; teindre LED (LEDOFF)

call tempo ; appeler la tempor de 0.5s

goto start ; boucler

END ; directive fin de programme

Exercice 4: Commander un chenillard (projet faire avec MPLAB et ISIS)

Un C 16F84 est reli via le port B 6 diodes Leds cathode commune. On dsire raliser
un jeu de lumire dont la squence est la suivante :
- Initialement toutes les leds sont teintes
- Une seule diode sallume sur RB0
- Le point lumineux se dplace vers RB1, puis vers RB2 jusqu RB5.
Le cycle se rpte indfiniment.
a. Donner le montage du circuit.
b. Donner le programme en assembleur.

You might also like