Vous êtes sur la page 1sur 17

REALISATION D’UN PROGRAMME & DIRECTIVES

1. Réalisation d’un programme embarqué

On désigne généralement sous la dénomination « logiciel embarqué » un programme


exécutable « fichier.hex » destiné à tourner localement sur une carte disposant d’un
microcontrôleur. Ce fichier est obtenu en compilant un programme source « fichier.asm » en
utilisant un outil de compilation tel que MPLAB (MICROCHIP). En plus de l’édition et la
compilation, MPLAB permet la simulation sur un micro-ordinateur de n’importe quel fichier
exécutable.

1.1. Edition d’un fichier source

Dans cette partie, on décrit comment un programme source « fichier.asm » doit être
présenté. Tout d’abord complétez le cadre d’en-tête suivant votre désir comme indiqué dans
l’exemple ci-dessous. Prenez l’habitude de toujours ajouter des commentaires dans les
programmes, ceci est indispensable pour une maintenance efficace dans le temps. Tout ce qui
vient après le point virgule est un commentaire qui ne sera pas pris en compte par le
compilateur.

;***************************************************************************
; *
; NOM du PROGRAMME *
; Type de PIC utilisé *
; *
; *
;***************************************************************************
; *
; NOM: nom du programme *
; Date: 01/01/2020 *
; Version: 1.0 *
; Circuit: intitulé du montage *
; Auteur: Nom du programmeur *
; *
;***************************************************************************
; *
; Fichier requis: P16F877A.I16 ( c’est un fichier spécifiant les adresses des registres *
; internes utilisés par le PIC 16F877A) *
; *
;***************************************************************************
; *
; Notes: Ce programme permet de faire clignoter une LED connectée sur la ligne *
; sur 2 du port A (RA2) à une fréquence de 1Hz *
; *
;***************************************************************************
1
;***************************************************************************
; *
; Directives d’assemblage pour MPLAB *
; *
;***************************************************************************
;suite du programme

1.2. Les directives

Les directives ne font pas partie du programme, elles ne sont pas traduites en opcode,
elles servent à indiquer à l’assembleur de quelle manière il doit travailler. Ce sont donc des
commandes destinées à l’assembleur en lui-même. Donc dans la zone directives, on inscrit les
directives destinées à MPASM pour indiquer par exemple quel type de processeur est utilisé
dans ce programme.
Par contre, les instructions seront traduites en "OPcodes" par le compilateur pour êtres ensuite
chargées dans le PIC moyennant d'un outil de flashage.

1.2.1. Directive « INCLUDE »

Cette directive signale à l’assembleur que les assignations sont dans le fichier qui suit
par exemple P16F877A.I16. Ce fichier contient tout simplement les adresses de tous les
registres SFRs utilisés dans un programme source.

FSR EQU H'0004'

Cette ligne signifie tout simplement que l’adresse du registre FSR est égale à 0x0004
dans la mémoire du PIC. Autrement dit, lorsque qu’on utilise FSR dans une instruction,
MPASM interprétera FSR comme étant 0x04. H’0004’ est une autre méthode autorisée pour
exprimer un nombre hexadécimal, tout comme 04h.

Le fichier P16F877A.I16 est donc principalement destiné à nous éviter d’avoir à mémoriser
toutes les adresses, un nom est bien plus simple à utiliser. Cette directive s’écrit de la manière
suivante,

#INCLUDE P16F877A.I16
ou bien
INCLUDE < P16F877A.I16>

1.2.2. La directive « _CONFIG »

La directive « __CONFIG » contient les fameux « fusibles » qui fixent le


fonctionnement du PIC. Les valeurs qui suivent cette directive seront intégrées dans le fichier
« .hex » pour signaler au programmateur les valeurs à encoder aux adresses spécifiques du
PIC.

2
_PWRTE_ON Timer reset sur power on en service
_PWRTE_OFF Timer reset hors-service
_WDT_ON Watch-dog (chien de garde) en service
_WDT_OFF Watch-dog hors service
_LP_OSC Oscillateur quartz basse consommation
_XT_OSC Oscillateur quartz moyenne vitesse
_HS_OSC Oscillateur quartz grande vitesse (fréquences élevées)
_RC_OSC Oscillateur à réseau RC
_DEBUG_ON RB6-RB7 utilisés pour le debuggage sur circuit
_DEBUG_OFF RB6-RB7 utilisés comme lignes d’entrée / sortie
_WRT_ENABLE_ON Le programme peut écrire dans les zones non protégées
_WRT_ENABLE_OFF Le programme ne peut pas écrire en mémoire flash
_CP_ON protection de la zone mémoire contre la lecture
_CP_OFF pas de protection
_BODEN_ON provoque le reset du PIC en cas de chute de tension
_BODEN_OFF reset hors service
_LVP_ON Utilisation de RB3/PGM pour la programmation
_LVP_OFF RB3 utilisée comme I/O standard
_CPD_ON mémoire eeprom protégée
_CPD_OFF mémoire eeprom non protégée

Par exemple tout ce qui suit :


Code Protect (protection en lecture) activé,
Watchdog (chien de garde) activé,
Timer reset sur power activé,
Oscillateur utilisé quartz moyenne vitesse,
Timer reset en service,
Le programme peut écrire dans la zone non protégée,
Mémoire EEROM non protégée et le debuggage hors service.

Est remplacé par

__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BODEN_ON
& _LVP_OFF & _CPD_OFF & _WRT_ENABLE_ON & _DEBUG_OFF

1.2.3. Les assignations

la directive « EQU » (égal à) permet d’assigner des valeurs (adresses) aux variables
personnelles. Ces assignations fonctionnent selon le même principe que dans le fichier
« .I16 ». Il est en effet plus simple de retenir dans votre programme la valeur « mavaleur »
que de manipuler la valeur 0x5B.

Les assignations se comportent comme une simple substitution. Au moment de


l’assemblage, chaque fois que l’assembleur va trouver une assignation, il la remplacera
automatiquement par sa valeur. Un autre avantage est que si la valeur d’une assignation est
remplacée, le changement sera effectif pour tout le programme.

3
Exemple d’assignation :

mavaleur EQU 0x5B

1.2.4. Les définitions

la directive « DEFINE » fonctionne comme une assignation mais pour remplacer un


texte plus complexe. Par exemple nous pourrons utiliser un port suivi d’un numéro de bit, ou
bien carrément une instruction avec ses paramètres.
Une définitions est construite de la manière suivante : La directive #DEFINE, suivie par le
nom que l’on désire utiliser, puis la chaîne à substituer. Par exemple :

#DEFINE monbit PORTA,1

Dans cet exemple la variable monbit a été définie comme étant la ligne RA1 du port A.

1.2.5. Les macros

La macro se compose d’un nom écrit en première colonne, suivi par la directive
« macro » puis commence alors à la ligne suivante un ensemble d’instructions qui constitue
la macro. La fin de la macro est définie par la directive « endm » (end of macro).

lecture macro
comf PORTB,0
andlw 1
endm

Une macro représente un ensemble d’instructions que nous utilisons souvent.

Dans notre exemple, chaque fois que la macro lecture sera rencontrée, elle sera remplacée au
moment de l’assemblage par les 2 lignes :

comf PORTB , 0
andlw 1
La macro simplifie donc l’écriture, mais ne diminue pas la taille du fichier .hex obtenu,
puisque les 2 lignes seront écrites dans le PIC. Des macros plus complexes peuvent être
utilisés, avec passage de paramètres.

1.2.6. La zone des variables

Toute zone définie par l’utilisateur commence avec la directive « CBLOCK », suivie
par l’adresse du début de la zone.
Pour placer nos variables, qui sont des emplacements mémoires auxquels on a donné
des noms, par exemple la RAM (GPRs) en banque 0 peut être librement utilisée et commence
à l'adresse 0x20 pour le 16F877. La zone de variable contiendra donc la directive :

4
CBLOCK 0x20 ; début de la zone variables

Ensuite, les emplacements mémoires peuvent être utilisés suivant la syntaxe suivante :
nom de la variable suivi du signe « : » suivi de la taille utilisée.

Exemple :

w_temp :1 ; Zone de 1 byte (adresse 0x20)


montableau : 8 ; zone de 8 bytes (adresse 0x21)

Ensuite, la fin de la zone doit être signalée par la directive « ENDC ».

ENDC ; Fin de la zone

Remarque : prendre compte que les assignations des variables déclarées ne chevauchent pas
avec les déclarations faites dans cette partie.

1.2.7. Les étiquettes

Les étiquettes sont des noms choisis comme repères dans le programme ; elles doivent
être placées en en 1ere colonne. L’assembleur les remplacera par l’adresse du programme à
l’endroit où elles sont positionnées. Ceci nous évite de devoir calculer les emplacements
programme.

1.2.8. La directive « ORG »

La directive ORG, suivie de l’adresse, précise à quelle adresse les instructions qui
suivent seront placées dans la mémoire du PIC. Il est important de savoir 2 choses :

- Après un reset ou une mise sous tension, la PIC démarre toujours à l’adresse 0x00. Le
début de votre programme doit donc se situer à cette adresse.
- L’adresse 0x04 est l’adresse utilisée par les interruptions ; donc le programme doit être
placé au delà de l’adresse 0x0004.

Exemple :
org 0x000 ; Adresse de départ après reset
goto init ; saut à l’adresse init

La première ligne est une directive qui indique que la ligne suivante sera placée à
l’adresse 0x00.
La seconde ligne est une instruction qui indique que le programme doit sauter à
l’adresse « init », cette dernière représente une étiquette.
Après le reset, le PIC exécute donc l’instruction goto init qui se trouve à l’adresse 0x00,
suivie par l’instruction qui se trouve à l’adresse init plus bas dans le programme (donc juste
en dessous de l’étiquette init).

5
1.2.9. La directive « END »

La directive « END » précise l’endroit où doit cesser l’assemblage du programme. Elle


est obligatoire dans tout programme.
Toutes les instructions situées après la directive END seront tout simplement ignorées.

L’exemple qui va suivre résume toutes les étapes que peut comporter un programme source.

;**************************************************************************
; *
; Directives d’assemblage pour MPLAB *
; *
;**************************************************************************

processor 16F877A
include <P16F877A.I16>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BODEN_ON
& _LVP_OFF & _CPD_OFF & _WRT_ENABLE_ON & _DEBUG_OFF

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

mavariable EQU 0x0025 , attribution de 0x0025 à mavariable

; ********************* DEFINITIONS *********************************

#DEFINE LED PORTA,2 ; Led = ligne 2 du port A


#DEFINE BOUTON PORTB,2 ; bouton-poussoir = ligne 2 du port B

; ************************* MACROS ***********************************

LEDON macro
bsf LED ; led allumée
endm

LEDOFF macro
bcf LED ; led éteinte
endm

;************** DECLARATIONS DES VARIABLES **************************

CBLOCK 0x70 ; début de la zone variables


Registre1 :1 ; 1 byte pour registre1 (adresse 0x0070)
Registre2 :1 ; 1 byte pour registre2 (adresse 0x0071)

ENDC ; Fin de la zone

6
; ******************* DEMARRAGE SUR RESET ***************************
; *
org 0x000 ; Adresse de départ après un reset
goto init ; saut à l’étiquette init
; *
; ******************* INITIALISATIONS *****************************
; *
suite du programme

La syntaxe doit être la suivante pour l’assembleur (programme d’assemblage)


MPLAB.

- Espace(s) ou tabulation(s),
- Mnémonique (en majuscules ou minuscules),
- Tabulation ou Espace(s)
- Opérande ou la valeur
- Virgule éventuelle de séparation
- Bit de destination W ou F ou éventuellement le numéro du bit de 0 à 7 si nécessaire
- Espace(s) ou tabulation(s)
- point-virgule.
- Commentaire.

Notez que le mnémonique ne peut pas se trouver en première colonne, et que tout ce qui
suit le point-virgule est ignoré du compilateur (commentaire).
La première colonne est réservée pour les étiquettes (repères)
Possibilité d’insérer un ou plusieurs espace(s) ou tabulation(s) de chaque côté de la
virgule.

Voici à titre d’exemple une ligne assembleur valide.

Etiquette ; Ceci est une étiquette

MOVF STATUS,W ; charge le contenu du registre STATUS dans


; le registre de travail

7
Note 1: lorsqu’un registre I/O est modifié (ex: MOVF PORTB,1), la valeur utilisée est la valeur présente sur le port.
Par exemple si la donnée est ‘1’ sur une ligne programmée comme entrée et elle forcée à ‘0’ par un circuit
externe, alors la donnée sera réécrite avec un ‘0’.
2: si une instruction is exécuté par rapport au registre TMR0, le prescaler (prédiviseur) est effacé s’il a été assigné
au module TMR0.
3: si le compteur de programme (PC) est modifié ou un test conditionnel est vrai, l’instruction nécessite deux cycles.
Le deuxième cycle est exécuté comme étant une instruction NOP.

Tableau 1.1 : Jeu d’instructions [1]


Description du tableau :

- La première colonne spécifie l’écriture des instructions en assembleur.


- La seconde colonne du tableau donne un bref descriptif de l’instruction.
- La troisième colonne donne le nombre de cycles nécessaires pour exécuter l’instruction.
Toutes les instructions nécessitent un seul cycle, sauf les sauts qui en nécessitent 2, et les
opérations de test avec saut, lorsque le résultat du test engendre le saut (instructions avec
8
1(2)).

- La quatrième colonne spécifie ce qu’on appelle l’opcode, c’est à dire le mot binaire
correspondant à l’instruction.

- La cinquième colonne est primordiale, car elle donne les indicateurs d’état (drapeaux du
registre STATUS) affectés (modifiés) une fois l’instruction exécutée.

- La dernière colonne renvoie à des notes en bas de page (voir tableau 1.1).
* La note 1 est très importante, elle fait allusion à la méthode « lecture/modification/écriture »
propres aux ports d’entrées/sortie (I/O).
* La note 2 indique qu’une modification d’un timer (TMR0) remet à zéro son prédiviseur.
* La note 3 indique que si vous vous servez de l’instruction pour modifier le compteur de
programme (celui qui pointe sur la prochaine instruction à exécuter), il y aura un cycle
supplémentaire.

Assignation des registres:

Les assignations des registres internes (SFRs) du PIC et des différents indicateurs des
registres de contrôle (STATUS, OPTION_REG, INTCON etc…) sont donnés par Microchip
dans le fichier 16F877.I16 ou 16F877.INC ( 16F877A.INC pour le PIC16F877A). Voici le
contenu de ce fichier :

LIST
; P16F877.INC Standard Header File, Version 1.00 Microchip Technology, Inc.
NOLIST

; This header file defines configurations, registers, and other useful bits of
; information for the PIC16F877 microcontroller. These names are taken to match
; the data sheets as closely as possible.

; Note that the processor must be selected before this file is


; included. The processor may be selected the following ways:

; 1. Command line switch:


; C:\ MPASM MYFILE.ASM /PIC16F877
; 2. LIST directive in the source file
; LIST P=PIC16F877
; 3. Processor Type entry in the MPASM full-screen interface

;==================================================================
;
; Revision History
;
;==================================================================

;Rev: Date: Reason:

9
;1.12 01/12/00 Changed some bit names, a register name, configuration bits
; to match datasheet (DS30292B)
;1.00 08/07/98 Initial Release
;==================================================================
;
; Verify Processor
;
;==================================================================

IFNDEF __16F877
MESSG "Processor-header file mismatch. Verify selected processor."
ENDIF

;==================================================================
;
; Register Definitions
;
;==================================================================

W EQU H'0000'
F EQU H'0001'

;----- Register Files------------------------------------------------------

INDF EQU H'0000'


TMR0 EQU H'0001'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
PORTC EQU H'0007'
PORTD EQU H'0008'
PORTE EQU H'0009'
PCLATH EQU H'000A'
INTCON EQU H'000B'
PIR1 EQU H'000C'
PIR2 EQU H'000D'
TMR1L EQU H'000E'
TMR1H EQU H'000F'
T1CON EQU H'0010'
TMR2 EQU H'0011'
T2CON EQU H'0012'
SSPBUF EQU H'0013'
SSPCON EQU H'0014'
CCPR1L EQU H'0015'
CCPR1H EQU H'0016'

10
CCP1CON EQU H'0017'
RCSTA EQU H'0018'
TXREG EQU H'0019'
RCREG EQU H'001A'
CCPR2L EQU H'001B'
CCPR2H EQU H'001C'
CCP2CON EQU H'001D'
ADRESH EQU H'001E'
ADCON0 EQU H'001F'

OPTION_REG EQU H'0081'


TRISA EQU H'0085'
TRISB EQU H'0086'
TRISC EQU H'0087'
TRISD EQU H'0088'
TRISE EQU H'0089'
PIE1 EQU H'008C'
PIE2 EQU H'008D'
PCON EQU H'008E'
SSPCON2 EQU H'0091'
PR2 EQU H'0092'
SSPADD EQU H'0093'
SSPSTAT EQU H'0094'
TXSTA EQU H'0098'
SPBRG EQU H'0099'
ADRESL EQU H'009E'
ADCON1 EQU H'009F'

EEDATA EQU H'010C'


EEADR EQU H'010D'
EEDATH EQU H'010E'
EEADRH EQU H'010F'

EECON1 EQU H'018C'


EECON2 EQU H'018D'

;----- STATUS Bits --------------------------------------------------------

IRP EQU H'0007'


RP1 EQU H'0006'
RP0 EQU H'0005'
NOT_TO EQU H'0004'
NOT_PD EQU H'0003'
Z EQU H'0002'
DC EQU H'0001'
C EQU H'0000'

11
;----- INTCON Bits --------------------------------------------------------

GIE EQU H'0007'


PEIE EQU H'0006'
T0IE EQU H'0005'
INTE EQU H'0004'
RBIE EQU H'0003'
T0IF EQU H'0002'
INTF EQU H'0001'
RBIF EQU H'0000'

;----- PIR1 Bits ----------------------------------------------------------

PSPIF EQU H'0007'


ADIF EQU H'0006'
RCIF EQU H'0005'
TXIF EQU H'0004'
SSPIF EQU H'0003'
CCP1IF EQU H'0002'
TMR2IF EQU H'0001'
TMR1IF EQU H'0000'

;----- PIR2 Bits ----------------------------------------------------------

EEIF EQU H'0004'


BCLIF EQU H'0003'
CCP2IF EQU H'0000'

;----- T1CON Bits ---------------------------------------------------------

T1CKPS1 EQU H'0005'


T1CKPS0 EQU H'0004'
T1OSCEN EQU H'0003'
NOT_T1SYNC EQU H'0002'
T1INSYNC EQU H'0002' ; Backward compatibility only
T1SYNC EQU H'0002'
TMR1CS EQU H'0001'
TMR1ON EQU H'0000'

;----- T2CON Bits ---------------------------------------------------------

TOUTPS3 EQU H'0006'


TOUTPS2 EQU H'0005'
TOUTPS1 EQU H'0004'
TOUTPS0 EQU H'0003'
TMR2ON EQU H'0002'
T2CKPS1 EQU H'0001'

12
T2CKPS0 EQU H'0000'

;----- SSPCON Bits --------------------------------------------------------

WCOL EQU H'0007'


SSPOV EQU H'0006'
SSPEN EQU H'0005'
CKP EQU H'0004'
SSPM3 EQU H'0003'
SSPM2 EQU H'0002'
SSPM1 EQU H'0001'
SSPM0 EQU H'0000'

;----- CCP1CON Bits -------------------------------------------------------

CCP1X EQU H'0005'


CCP1Y EQU H'0004'
CCP1M3 EQU H'0003'
CCP1M2 EQU H'0002'
CCP1M1 EQU H'0001'
CCP1M0 EQU H'0000'

;----- RCSTA Bits ---------------------------------------------------------

SPEN EQU H'0007'


RX9 EQU H'0006'
RC9 EQU H'0006' ; Backward compatibility only
NOT_RC8 EQU H'0006' ; Backward compatibility only
RC8_9 EQU H'0006' ; Backward compatibility only
SREN EQU H'0005'
CREN EQU H'0004'
ADDEN EQU H'0003'
FERR EQU H'0002'
OERR EQU H'0001'
RX9D EQU H'0000'
RCD8 EQU H'0000' ; Backward compatibility only

;----- CCP2CON Bits -------------------------------------------------------

CCP2X EQU H'0005'


CCP2Y EQU H'0004'
CCP2M3 EQU H'0003'
CCP2M2 EQU H'0002'
CCP2M1 EQU H'0001'
CCP2M0 EQU H'0000'

13
;----- ADCON0 Bits --------------------------------------------------------
ADCS1 EQU H'0007'
ADCS0 EQU H'0006'
CHS2 EQU H'0005'
CHS1 EQU H'0004'
CHS0 EQU H'0003'
GO EQU H'0002'
NOT_DONE EQU H'0002'
GO_DONE EQU H'0002'
ADON EQU H'0000'

;----- OPTION_REG Bits -----------------------------------------------------

NOT_RBPU EQU H'0007'


INTEDG EQU H'0006'
T0CS EQU H'0005'
T0SE EQU H'0004'
PSA EQU H'0003'
PS2 EQU H'0002'
PS1 EQU H'0001'
PS0 EQU H'0000'

;----- TRISE Bits ---------------------------------------------------------

IBF EQU H'0007'


OBF EQU H'0006'
IBOV EQU H'0005'
PSPMODE EQU H'0004'
TRISE2 EQU H'0002'
TRISE1 EQU H'0001'
TRISE0 EQU H'0000'

;----- PIE1 Bits ----------------------------------------------------------

PSPIE EQU H'0007'


ADIE EQU H'0006'
RCIE EQU H'0005'
TXIE EQU H'0004'
SSPIE EQU H'0003'
CCP1IE EQU H'0002'
TMR2IE EQU H'0001'
TMR1IE EQU H'0000'

;----- PIE2 Bits ----------------------------------------------------------

EEIE EQU H'0004'


BCLIE EQU H'0003'

14
CCP2IE EQU H'0000'

;----- PCON Bits ----------------------------------------------------------

NOT_POR EQU H'0001'


NOT_BO EQU H'0000'
NOT_BOR EQU H'0000'

;----- SSPCON2 Bits --------------------------------------------------------

GCEN EQU H'0007'


ACKSTAT EQU H'0006'
ACKDT EQU H'0005'
ACKEN EQU H'0004'
RCEN EQU H'0003'
PEN EQU H'0002'
RSEN EQU H'0001'
SEN EQU H'0000'

;----- SSPSTAT Bits -------------------------------------------------------

SMP EQU H'0007'


CKE EQU H'0006'
D EQU H'0005'
I2C_DATA EQU H'0005'
NOT_A EQU H'0005'
NOT_ADDRESS EQU H'0005'
D_A EQU H'0005'
DATA_ADDRESS EQU H'0005'
P EQU H'0004'
I2C_STOP EQU H'0004'
S EQU H'0003'
I2C_START EQU H'0003'
R EQU H'0002'
I2C_READ EQU H'0002'
NOT_W EQU H'0002'
NOT_WRITE EQU H'0002'
R_W EQU H'0002'
READ_WRITE EQU H'0002'
UA EQU H'0001'
BF EQU H'0000'

;----- TXSTA Bits ---------------------------------------------------------

CSRC EQU H'0007'


TX9 EQU H'0006'

15
NOT_TX8 EQU H'0006' ; Backward compatibility only
TX8_9 EQU H'0006' ; Backward compatibility only
TXEN EQU H'0005'
SYNC EQU H'0004'
BRGH EQU H'0002'
TRMT EQU H'0001'
TX9D EQU H'0000'
TXD8 EQU H'0000' ; Backward compatibility only
-------- ADCON1 Bits --------------------------------------------------------

ADFM EQU H'0007'


PCFG3 EQU H'0003'
PCFG2 EQU H'0002'
PCFG1 EQU H'0001'
PCFG0 EQU H'0000'

;----- EECON1 Bits --------------------------------------------------------

EEPGD EQU H'0007'


WRERR EQU H'0003'
WREN EQU H'0002'
WR EQU H'0001'
RD EQU H'0000'

;==================================================================
;
; RAM Definition
;
;==================================================================

__MAXRAM H'1FF'
__BADRAM H'8F'-H'90', H'95'-H'97', H'9A'-H'9D'
__BADRAM H'105', H'107'-H'109'
__BADRAM H'185', H'187'-H'189', H'18E'-H'18F'

;==================================================================
;
; Configuration Bits
;
;==================================================================

16
_CP_ALL EQU H'0FCF'
_CP_HALF EQU H'1FDF'
_CP_UPPER_256 EQU H'2FEF'
_CP_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_DEBUG_OFF EQU H'3FFF'
_WRT_ENABLE_ON EQU H'3FFF'
_WRT_ENABLE_OFF EQU H'3DFF'
_CPD_ON EQU H'3EFF'
_CPD_OFF EQU H'3FFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LP_OSC EQU H'3FFC'
_XT_OSC EQU H'3FFD'
_HS_OSC EQU H'3FFE'
_RC_OSC EQU H'3FFF'
LIST

BIBLIOGRAPHIE:

[1] MICROCHIP, "Datasheet P16F877 - DS30292C", Microchip Technology 2001.


[2] MICROCHIP, "Datasheet P16F877A - DS39582B", Microchip Technology 2003.
[3] MICROCHIP, "Application note DS00594B", Microchip Technology 1997.
[4] MICROCHIP, " MPLAB IDE v6.xx Quick Start Guide - DS51281C", Microchip
Technology Inc 2003.
[5] MICROCHIP, "Mid-range family reference DS33023A", Microchip Technology 1997.
[6] P. Mayeux, Apprendre la programmation des PIC High-Performance par l'expérimentation
et la simulation, ETSF, Paris, 2010.
[7] C. Tavernier, Application des microcontrôleurs PIC: des PIC 10 aux PIC 18, Dunod 2011.
[8] C. Tavernier, Microcontrôleurs PIC 10, 12, 16, Description et mise en œuvre,
Dunod 2007.
[9] G. J. Lipovski, Introduction to Microcontrollers, Academic Press, California 1999.
[10] http://www.microchip.com/
[11] http://hervepage.ch/documents/pic/bigonoff.pdf
Bigonoff, Démarrer les PIC avec le PIC16F84
Bigonoff, La gamme mid-range par l'étude des 16F87X (16F876-16F877)

17

Vous aimerez peut-être aussi