Professional Documents
Culture Documents
commentaires
LIST P=16F877A
; directive qui dfinit le processeur utilis
#include <P16F877A.INC>
; fichier de dfinition des constantes
fichiers den-tte
;******************************************************************************
;
BITS DE CONFIGURATION
;******************************************************************************
__CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF
; _XS_OSC l'oscillateur est configur en oscillateur quartz haute frquence
configuration
; _WDT_OFF le watchdog est dsactiv
matrielle
; _CP_OFF le code de protection de la mmoire programme est dsactiv
; _CPD_OFF le code de protection de la mmoire EEPROM est dsactiv
; _LVP_OFF la programmation basse tension est dsactive
; ces oprations sont ncessaires pour fonctionner en mode "debug"
;********************************************************************************
;
DEMARRAGE SUR RESET
*
;********************************************************************************
org
0x0
; Adresse de dpart aprs reset
adresses en ROM
goto
debut
org
0x10
; adresse de dbut du programme
debut
tiquette
;********************************************************************************
;
INITIALISATION
*
;********************************************************************************
; initialisation du PORTB en sortie (voir datasheet)
Denis Rabast
IUFM Aix Marseille
1/5
bcf
bcf
clrf
bsf
movlw
movwf
bcf
STATUS, RP0
STATUS, RP1
PORTB
STATUS, RP0
b'00000000'
TRISB
STATUS, RP0
; passage en banque 0
; RAZ des bascules D
; passage en banque 1
; PORTB en sortie
; retour en banque 0
;********************************************************************************
;
PROGRAMME PRINCIPAL
*
;********************************************************************************
boucle
bsf
PORTB,0
; mise 1 de la sortie
nop
; 2 temps morts pour compenser le saut
nop
bcf
PORTB,0
; mise 0 de la sortie
fin de programme
goto
boucle
; rebouclage
END
; directive signalant la fin du programme
;*******************************************************************************
1.1
Commentaires et tiquettes
Les commentaires, aprs un ; sont essentiels pour la comprhension du programme et pour son
dbogage.
Les tiquettes renvoient des adresses en mmoire programme, sans avoir se proccuper du
changement de cette adresse lorsquon ajoute ou retire des instructions.
1.2
Il faut dans un premier temps prciser au compilateur quel processeur nous allons utiliser ; cest le
rle de la directive LIST .
Le programme prcdent utilise un certain nombre de constantes (STATUS, PORTB, TRISB)
associes des registres du PIC, donc des adresses ;
Ces associations sont dcrites dans le fichier include (par exemple P16F877A.INC pour un
16F877A). Ce fichier est localis dans le dossier c:\Program Files\Microchip\MPASM suite et
peut tre lu avec un diteur de texte.
On trouvera ci-aprs un extrait de ce fichier o lon peut voir la dfinition des adresses des registres,
et la position des bits dans le registre (ici le registre STATUS).
;----- Register Files-----------------------------------------
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
PORTC
PORTD
IRP
RP1
RP0
NOT_TO
NOT_PD
Z
DC
C
1.3
1.3.1
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0000'
H'0001'
H'0002'
H'0003'
H'0004'
H'0005'
H'0006'
H'0007'
H'0008'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
Les directives
La directive Config
Elle permet de paramtrer le registre de configuration (ce registre est dtaill au chapitre Special
Features of CPU de la documentation) par une instruction du type :
Denis Rabast
IUFM Aix-Marseille
2/5
Elle permet dassigner des valeurs (comme dans le fichier .inc ), par exemple :
MASQUE EQU 0X45
Il sagit la fois dune facilit dcriture et un outils prcieux pour la comprhension (et donc le
dbogage ) dun programme.
1.3.3
Fonctionne comme lassignation mais pour un texte. Dans notre programme nous aurions pu crire
par exemple :
#DEFINE SORTIE PORTB,0
et remplacer ensuite bsf PORB,0 par :
bsf
SORTIE
1.3.4
Les macro-instructions
Elles permettent de remplacer une srie dinstruction par un texte ; attention ce nest quune facilit
dcriture qui ne diminue pas la taille du programme comme le ferait un sous programme. ; exemple :
Macro1 macro
Suite dinstructions..
edm
; fin de la macro
Lexcution est cependant plus rapide que lors de lappel dun sous programme.
Remarque : il est possible de dclarer des tiquettes qui seront propre la macro (et qui pourront
donc avoir le mme nom quune autre tiquette du programme sans risque de confusion) par
linstruction local
exemple :
local
boucle
1.3.5
Permet de dfinir une zone de variables en RAM, lemplacement et la taille de ces variables ;
exemple :
CBLOCK
0x20
Variable1 : 1
Variable2 : 1
tableau : 8
ENDC
Denis Rabast
IUFM Aix-Marseille
3/5
Il faut veiller ce que lendroit choisit ne soit pas dj occup par un registre. Par exemple, sur un
PIC16F877A, on peut dfinir une zone de 96 octets partir de ladresse 20h.
1.3.6
La directive ORG permet de prciser quel endroit en ROM son places les lignes de programme qui
suivent. Sur un PIC, aprs un RESET, le compteur programme pointe ladresse 0x00 ; de plus
ladresse 0X04 se trouve le vecteur dinterruption. Le programme commencera donc de la manire
suivante :
org
0x00
goto dbut
org
dbut
.
end
1.4
1.4.1
0x10
MPLAB permet de dfinir un radix par dfaut ; cette option peut tre modifie par Project \ build
options \ project \ MPASM assembleur ; cependant, afin damliorer la portabilit des
programmes, il est conseill de toujours prciser le radix des paramtres.
0x1A ou
B10101111
D12 ou
AC ou C
1.4.2
H1A
ou
1Ah
: notation hexadcimale ;
: notation binaire ;
: notation dcimale.
: code ASCII
.12
La casse
Par dfaut MPLAB est sensible la casse. Cette option peut tre modifie par project \ build
options \ project \ MPASM assembleur .
Le principe consiste soustraire les deux nombres et observer les bits Z et C du registre dtat.
movf nb1, w
subwf nb2, w
2.2
Linstruction sublw 8 soustrait le contenu de w 8, soit (w)-8, si on souhaite faire 8-(w), il faut
ajouter le complment 2 de 8 au contenu de w, soit addlw 8 .
Denis Rabast
IUFM Aix-Marseille
4/5
2.3
Linstruction retlw revient dun sous programme en plaant un argument dans le registre W . On
appelle dans un premier temps lendroit o se trouve le tableau, tout en plaant dans W le numro
de la ligne du tableau :
movf
call
n_ligne,W
SUITE_Fbnc
2.4
PCL,F
d'01'
d'01'
d'02'
d'03'
d'05'
d'08'
; premire ligne
; seconde ligne
; troisime ligne
; quatrime ligne
; cinquime ligne
; sixime ligne
A la mise sous tension se trouvent des valeurs quelconques dans la RAM : pour mettre toute ces
valeurs 0 on peut utiliser une variable qui devra pointer les emplacements effacer et qui devra tre
incrmente. Cette variable ne peut se situer en RAM sous peine dtre efface son tour, do
lutilisation de ladressage indirecte Lexemple de programme suivant concerne un 16F84 dont la RAM
utilisateur se situe en banque 0 entre les adresse 0x0C et 0x4F inclues.
daprs BIGONOFF (http://www.abcelectronique.com/bigonoff/ )
Denis Rabast
IUFM Aix-Marseille
5/5