tps_pic
TRANSCRIPT
-
8/13/2019 TPs_PIC
1/43
MICROCHIP PICs
Travaux Pratiques
Objectifs : Ces TPs ont pour but d'illustrer le fonctionnement des PICs et de dcouvrir les
outils de dveloppement proposs par Microchip pour programmer ce type de
microcontrleur. On s'intresse ici au PIC 16F84, qui fait partie des PICs milieu
de gamme de Microchip. On se familiarisera d'abord avec le jeu d'instructions
assembleur du processeur pour ensuite aborder un langage de plus haut niveau
grce au compilateur C de HI-TECH Software.
L'nonc des TPs est situ dans la 2epartie du document aprs une prsentation des outils.
I) Prsentation de la carte
Le PIC 16F84 est ici intgr sur une carte d'application permettant la commande d'un
afficheur 7 segments et de 5 LEDs. Un bouton poussoir est reli au bit 0 du port B (RBB0) ce
qui peut permettre de gnrer une interruption matrielle.
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RA4 RA3 RA2 RA1 RA0
Logique positive
(1 = allum)
Logique ngative
(0 = allum)
RB0
Logique ngative
(RB0 = 0 si appui)
connecteur
RJ 12
1
-
8/13/2019 TPs_PIC
2/43
Le connecteur RJ12 sert relier la carte l'interface ICD2 qui permet ici la
programmation du PIC et galement l'alimentation de la carte (jusqu' 200 mA). La
programmation se fait suivant le protocole ICSP (In-Circuit Serial Programming) dfini par
Microchip (voir datasheetDS30277ddu fabricant)) : la broche /MCLR est maintenue 12 V
pour faire entrer le PIC en mode programmation et les instructions sont transmises bit par bit
de faon synchrone sur la broche RB7du port B au rythme de l'horloge applique sur RB6.
Le schma lectrique de la carte est donn dans l'annexe 1.
II) Environnement de travail
La chane d'outils utilise pour le dveloppement est MPLAB, fournie gratuitement
par MICROCHIP. Il s'agit d'un IDE (Integrated Development Environment) qui intgre tousles outils ncessaires pour la mise au point d'un projet :
diteur de fichier source
compilateur + assembleur
diteur de lien (permet d'obtenir le fichier excutable de sortie)
dbuggeur (simulateur et/ou vrai dbuggeur si le circuit cible le permet)
programmateur
Un IDE offre l'avantage de pouvoir effectuer toutes ces oprations dans une mme
fentre de travail et facilite grandement les interactions entre les modules (gestion et mise
jour automatique des fichiers d'changes, excution d'un seul clic des modules permettant
l'obtention du ficher excutable...) d'o un gain de productivit.
MPLAB peut tre interconnect directement au PIC in situ sur sa carte d'application
grce au module d'interface ICD2, reli d'un ct au port USB du PC et de l'autre au PIC via
les 3 broches de contrle mentionnes plus haut. Cette interface permet la programmation des
PICs mais surtout permet d'exploiter le module ICD (In Circuit Debugger) qui est intgr dans
certains PICs. L'ICD, disponible sur les PICs haut de gamme, autorise un "vrai" debbugage en
excutant le programme sur le PIC et en renvoyant le contenu des registres MPLAB via
l'interface ICD2. On peut ainsi tester le programme ou seulement certaines parties, en mode
pas pas, continu comme avec un simulateur mais avec l'intrt de contrler vritablement
les sorties du PIC et d'tre en interaction avec le systme.
Le PIC16F84 ne possde pas de module ICD et l'on se contentera donc d'une
simulation pour valider les programmes de cette 1repartie de TPs d'initiation.. Le PIC16F877
2
-
8/13/2019 TPs_PIC
3/43
dispose lui de l'ICD et l'on consultera le paragraphe "utilisation de l'interface ICD2" pour le
dveloppement du projet qui suivra les TPs.
Les activits de TP se droulent sous forme d'exercices dont les fichiers lire ou
modifier sont enregistrs dans les sous rpertoires TP1, TP2 du rpertoire TPs_PIC
accessible depuis la page WEB www.enseirb-matmeca.fr/~bedenes(onglet MICROCHIP). On
commencera par effectuer une copie de ce rpertoire sur le compte UNIX..
Le descriptif ci-dessous est exploiter en fonction des diffrentes oprations mener
dans les exercices.
III) Prsentation du logiciel MPLAB
Lancer le logiciel MPLAB IDE partir du lien situ sur le bureau. La fentre qui
s'ouvre fait apparatre une interface avec l'utilisateur relativement classique :
En haut on observe une barre de menus droulants avec en dessous des icones
permettant d'actionner les principales commandes (barre volutive en fonction de l'tape o
l'on se trouve dans le projet).
Dans l'espace de travail, 2 fentres sont ouvertes et vides au lancement du logiciel :
"untitled workspace" qui correspond au gestionnaire de fichier, et "output" qui correspond la
fentre d'informations pour l'utilisateur ds que celui-ci effectue une manipulation sur le
fichier excutable de sortie.
3
-
8/13/2019 TPs_PIC
4/43
1) Cration d'un projet
Un fichier source assembleur ( .asm ) ou C ( .c ) peut tre dit simplement avec la
commande FILE > NEW. Il peut ensuite tre assembl ou compil individuellement dans le
but d'obtenir un fichier excutable de sortie. On prfrera cependant l'intgrer un projet qui
inclura ventuellement d'autres fichiers sources lier, de manire avoir une approche bien
structure (projet dcoup en fonctions lmentaires, code relogeable) et exploiter au mieux
les possibilits offerte par MPLAB notamment au niveau du debuggage.
On va donc commencer par crer un projet. Cette opration peut tre effectue
directement par PROJECT > NEW PROJECT, mais il est conseill de lancer l'assistant
pour la cration de projet PROJECT > PROJECT WIZARDqui permet de configurer
tous les paramtres qu'il faudra de toutes faons dfinir.
choisir le composant cible dans la liste : 16F84A
dfinir le logiciel qui devra "compiler" le(s) fichier(s) source(s) du projet :
HI TECH pour un fichier en C (.c)MPASM pour un fichier en assembleur (.asm)
Indiquer le nom du projet exoet son emplacement (H:/TP_PICs/TP/)
MPLAB va ainsi crer un fichier .mcp contenant les paramtres du projet. Il
cre aussi un fichier .mcwqui permettra de sauvegarder l'espace de travail la fermeture du
projet (fentres ouvertes, paramtres) pour pouvoir le restaurer l'identique la prochaine
ouverture du projet.
4
-
8/13/2019 TPs_PIC
5/43
Si des fichiers sources sont dj existants, on peut les indiquer ds maintenant
On ajoutera galement un fichier de commande ncessaire l'diteur de lien
MPLINK qui dpend du composant cible. On choisira pour les TPs celui associ au
16F84 : C:\Program Files\Microchip\MPASM Suite\LKR\16f84.lkr. Ce fichier
n'est cependant pas indispensable si il n'y a qu'un seul fichier source dans le projet
et/ou que l'on ne souhaite pas gnrer de fichier objet (cf partie III-3).
La lettre majuscule qui prcde le chemin du fichier ajout indique de quelle
manire sera rfrenc le fichier :
U (User reference) : le fichier sera rfrenc par un chemin relatif au rpertoire du
projet
S (System) : le fichier sera rfrenc par un chemin absolu
A (Automatic) : laisse le choix MPLAB de choisir relatif ou absolu (si le fichier est
dans le rpertoire du projet il choisira relatif)
C (Copy) : dans les 3 modes ci-dessus, MPLAB ne fait que crer un lien sur le fichier
source. Ce dernier mode effectue une copie du fichier dans le rpertoire du projet
et un rfrencement relatif
La dernire fentre rcapitule les principaux paramtres du projet
5
-
8/13/2019 TPs_PIC
6/43
-
8/13/2019 TPs_PIC
7/43
Le registre CONFIG est accessible de la mme faon que la mmoire en utilisant le
protocole ICSP. On effectue en gnral sa programmation en mme temps que la mmoire
programme. Le contenu qui sera charg dans ce registre peut tre dfini de 2 manires :
dans le fichier source en utilisant une directive approprie __CONFIG(voir exemples du
TP)
directement partir du menu CONFIGURE de MPLAB
Cette fentre permet aussi de visualiser le paramtrage dfini par la
directive __CONFIG du fichier source si la case "Configuration Bits
set in code" est coche tel que ci-dessus
3) Compilation du projet
La compilation du projet a pour but d'obtenir, partir du ou des fichiers sources (.asm,
.c) voire de fichiers objets (.o , .lib), un fichier de sortie (.hex , voir annexe 2 pour plus
d'informations) correspondant au code excutable qui pourra ensuite tre implant en
mmoire programme du PIC lors de la phase de programmation. D'autres fichiers de sortie
sont galement disponibles dans le rpertoire du projet (mapping mmoire, donnes pour le
dbuggage), comme on peut le voir sur la figure suivante qui reprsente toutes les tapes de
la compilation :
7
-
8/13/2019 TPs_PIC
8/43
MPLAB IDE utilise la chaine d'outils "MPASM suite" qui intgre les 3 modules :
MPASM : logiciel d'assemblage qui permet partir d'un fichier source .asm en
assembleur d'obtenir un fichier objet .o contenant le code excutable correspondant, non
affect des adresses fixes en mmoire programme pour le moment (code relogeable) et dont
les registres sont dsigns par des symboles (rfrences) qui n'ont pas encore d'adresse en
mmoire RAM.
MPLIB : logiciel pour crer une librairie d'objets c'est--dire une association de
fichiers objets plus simple manipuler (un seul fichier dsigner)
MPLINK : logiciel d'dition de liens pour relier tous les fichiers objets (voire des
librairies) pour obtenir le fichier excutable .hex. Ce module a besoin pour cela d'un fichier de
commande .lkr qui dfinit les sections ou le code peut tre allou en mmoire programme
ainsi que l'emplacement des registres. Un fichier de commande type est propos pour chaque
PIC (C:\Program Files\Microchip\MPASM Suite\LKR\16f84.lkrpour le PIC 16F84, voir
annexe 3).
Un compilateur C peut aussi tre utilis pour obtenir un fichier objet partir d'un
fichier source en langage C (sur la figure MPLAB C18, mais pour nous ce sera HI-TECHPICC Lite).
8
-
8/13/2019 TPs_PIC
9/43
La compilation du projet s'effectue simplement par la commande PROJECT >
BUILD ALL (raccourci CTRL + F10) aprs avoir ventuellement modifi les options dans
PROJECT > BUILD OPTIONS > PROJECT. Attention, les fichiers sources concerns
sont ceux dfinis dans le projet et ne sont pas ncessairement ceux ouverts dans l'espace de
travail !! La sauvegarde des fichiers modifis est par contre automatique chaque
compilation.
On notera que dans le cas d'un fichier source unique, MPASM peut directement
fournir un fichier excutable .hex sans gnrer dans ce cas de fichier objet .o. Cette
compilation particulire ("QUICKBUILD") est implicite lorsqu'on omet de spcifier dans le
projet le fichier de commande .lkrpour l'diteur de lien MPLINK dont l'excution n'est pas
ncessaire dans ce cas. Un QUICKBUILD peut aussi tre effectu partir de tout fichier
source .asm sans avoir cr de projet (commande PROJECT > QUICKBUILD). Cettemthode n'est cependant utiliser que dans le cas de projets trs simples (TP1) ou pour
tester rapidement une routine d'un programme car elle ne fait pas appel MPLINK qui gnre
des fichiers bien utiles pour le dbuggage (.map, .cof voir annexe 4 pour plus d'informations)
4) Simulation
Quand le PIC cible ne possde pas de module de debuggage ICD ou que le PIC ne
peut tre reli la station de dveloppement, le simulateur de MPLAB permet de faciliter la
mise au point du programme grce une interface simple et convivial. Il faut commencer par
activer le simulateur par DEBUGGER > SELECT TOOL > MPLAB SIM.
Fentres de visualisation
Pour visualiser le contenu des registres SFR : VIEW > SPECIAL FUNCTION
REGISTERS ou de tout le contenu de la RAM : VIEW > FILE REGISTERS
Pour visualiser le contenu d'un registre quelconque du programme : VIEW > WATCH
puis choisir les registres observer dans la liste (+ Add Symbol)
On peut aussi observer la pile systme VIEW > HARDWARE STACK
Le droulement du programme peut s'observer sur le fichier source mais aussi sur le
fichier assembl (code machine + assembleur) que l'on peut faire apparatre avec VIEW >
DISASSEMBLY LISTING ou sous forme plus brute avec VIEW > PROGRAM
MEMORY. L'utilisation de la fentre STOPWATCH (DEBUGGER > STOPWATCH)permet d'observer la dure effective de l'excution (vrifier la frquence de l'horloge).
9
-
8/13/2019 TPs_PIC
10/43
Excution
Il faut d'abord compiler le projet. Une flche verte doit apparatre sur le fichier source
au niveau de la 1reinstruction.
Il suffit ensuite de lancer la simulation par les diffrentes commandes du menu
DEBUGGER ou plus directement avec les icnes de raccourci (voir illustration dans la partie
utilisation de l'ICD2) ou touches de fonction:
Reset(F6) : initialise le PC 0, on peut aussi simuler un RESET matriel (idem +
RAZ des timers) ou simplement remettre 0 le chien de garde
Run(F9) : excution continue (stoppar F5)
Animate: idem mais au ralenti pour voir voluer les registres
Step into (F7) : excution pas pas
Step over(F8) : excution continue puis stoppe la fin du prochain sous-programme
(ou fonction en C)
Step out : excution continue puis stoppe la fin du sous-programme en cours
(ou fonction en C)
10
-
8/13/2019 TPs_PIC
11/43
On peut poser des points d'arrt (breakpoints) pour excuter des blocs d'instructions.
Pour cela pointer sur le dbut de la ligne de programme avec la souris et double-cliquer sur la
touche de droite. Pour annuler le point d'arrt recommencer la mme opration ou supprimer
tous les points d'arrt l'aide du menu droulant disponible avec un clic droit.
Simulation d'vnements extrieurs
Il est possible de simuler l'activation d'une des broches d'entres du PIC avec la
commande DEBUGGER > STIMULUS > NEW WORKBOOK. Choisir l'onglet "async"
pour activer une entre l'aide de la souris indpendamment du droulement du programme.
Dfinir la broche dans la colonne "Pin / SFR" ainsi que l'action effectuer dans la colonne
"Action".
Un clic dans la colonne "Fire" effectue l'action correspondante immdiatement
(l'affichage des registres n'est cependant mis jour qu'aprs l'excution de la prochaineinstruction). On peut ainsi simuler l'appui sur le bouton poussoir reli RB0 dans le TP1 par
exemple.
On peut aussi modifier tout moment le contenu d'un registre en changeant sa valeur
dans la fentre "Special Function Registers" ou "WATCH".
En conclusion, l'utilisation du simulateur est de faon gnrale assez intuitive
(naviguer dans le menu DEBUGGERet consulter l'aide HELP > TOPICS > DEBUGGERS
> MPLAB SIMpour dcouvrir les autres fonctionnalits).
11
-
8/13/2019 TPs_PIC
12/43
5) Programmation avec le module ICD2
L'opration de programmation consiste transfrer le fichier excutable .hexdans la
mmoire programmme (FLASH) ainsi que la programmation du registre CONFIG voire de la
mmoire EEPROM si le PIC en dispose. L'opration s'effectue selon le protocole ICSP avec
un transfert de donnes srie (bit par bit sur la broche PGD), synchrone (au rythme de
l'horloge applique sur la broche PGC) et squentiel (les emplacements mmoires sont
remplis les uns la suite des autres depuis l'adresse 0). L'interface ICD2 permet une
programmation trs rapide grce sa liaison USB avec le PC, selon le schma suivant :
On slectionne ensuite l'outil de dbuggage via l'interface ICD2 avec DEBBUGER >
Auparavant, le boitier ICD2 doit treraccord, d'une part au PC via le bus USBet d'autre part l'application comportantle microcontrleur programmer,
en respectant l'ordre suivant :
Remarque : on a la possibilit d'alimenter la carte d'application par l'intermdiaire du boitier
ICD2 (bloc d'alimentation reli la prise jack) mais la tension fournie via le
connecteur RJ12 sera impose 5 V pour un courant max de 200 mA. C'est cette
technique qui a t retenue pour alimenter la carte de TP de manire optimiser
son cot et sa compacit.
Dans tous les cas, il faut appliquer une source d'alimentation (sur l'ICD2 ou la
carte d'application) idem celle du PIC car les lignes PGC et PGD de l'interface
sont en sortie "collecteur ouvert" et ncessite donc un "pull-up" pour fixer le
niveau logique haut.
12
-
8/13/2019 TPs_PIC
13/43
Pour information, le schma de raccordement du module ICD2 avec la carte
d'application est donn ci-dessous ainsi que le brochage du connecteur RJ12 qui est utilis.
pour le PIC 16F84 :
PGC = RB6
PGD = RBB7
Etablir la connexion avec le module ICD2 : PROGRAMMER > SELECT
PROGRAMMER > MPLAB ICD2
Les diffrentes tapes de la connexion sont visualises dans la fentre "output" :
13
-
8/13/2019 TPs_PIC
14/43
Ce type d'erreur plusieurs origines possibles :
- soit le cble USB n'est pas connect sur le bon port, c'est--dire celui choisi lors de
l'installation du pilote (dpend de la salle mais en principe c'est le connecteur du haut)
- soit l'interface ICD2 n'tait pas encore relie au moment du lancement de MPLAB et il suffit
dans ce cas de fermer et relancer celui-ci.
- soit le module ICD2 est HS !
Une fois la connexion tablie programmer le circuit avec l'icne par exemple
Remarque : il n'y a pas de bouton de RESET sur la carte, la remise 0 pouvant tre
commande via l'ICD2 depuis MPLAB :
active le RESET
(/MCLR=0)
rinitialise l'ICD2
dsactive le RESET
(/MCLR=1)
Il est noter qu'une fois le PIC programm, l'ICD2 maintien le RESET activ (par
dfaut) et PGC=PGD=0. Pour utiliser le PIC il faut donc dsactiver le RESET, et si l'on
souhaite pouvoir contrler RB6 et RB7 (c'est--dire PGC et PGD) il faut aussi rinitialiser
l'ICD2 pour mettre ces sorties de l'interface en haute impdance.
En cas de doute sur le fonctionnement de la carte, on pourra charger et excuter lefichier dEMo.hexsitu dans le rpertoire de projet (utiliser FILE>Import dEMo.hex pour
permettre la programmation sans crer de projet)
14
-
8/13/2019 TPs_PIC
15/43
6) Debuggage avec le module ICD
Si l'on utilise un PIC avec module de dbuggage intgr (ICD) on a tout intrt
privilgier ce mode plutt que la simulation pour tester le programme. L'avantage du
dbugger est que le programme tourne rellement sur le PIC qui est de plus reli au systme
via ses entres/sorties. On obtient ainsi un test beaucoup plus raliste si ce n'est que toutes les
ressources du PIC ne sont pas disponibles dans ce mode (cf doc du PIC). Pour un debuggage
encore plus efficace, il existe des mulateurs (MPLAB ICE 2000, REAL ICE) qui se
branche la place du PIC et qui excute le programme de la mme faon tout en renvoyant
des informations MPLAB (utilisent en gnral un processeur plus puissant) pour un cot
relativement plus lev.
L'utilisation de l'ICD ncessite une interface matrielle avec le PC telle que le moduleICD2. MPLAB permettra ensuite de rcuprer le contenu des registres pour les visualiser et
de contrler le droulement du programme sur le PIC avec les mmes outils qu'en simulation.
On choisit le module ICD2 dans la liste des interfaces proposes pour le dbuggage
avec DEBUGGER > SELECT TOOL > MPLAB ICD2. On accde ainsi aux mmes
commandes que celles vues en simulation, avec notamment les icnes permettant de contrler
l'excution du programme :
Il faut tout d'abord tablir la connexion avec le boitier ICD2 en cliquant par exemple
sur l'icne ci-dessus "Connexion avec l'ICD2", la procdure tant la mme que pour la
programmation.
Une fois la connexion tablie, il faut programmer le PIC (icne "Program Target
Device") aprs avoir compil le projet. A noter que cette opration est ncessaire mme si la
programmation a dj t faite directement par le menu PROGRAMMER(cf section 5) car
le dbuggage ncessite une routine supplmentaire que MPLAB charge en mmoire
programme ainsi que l'activation du bit "DEBUG" du registre CONFIG.
15
-
8/13/2019 TPs_PIC
16/43
On se reportera la section "4) Simulation" pour connatre les diffrentes possibilits
de droulement du programme et l'observation des registres.
16
-
8/13/2019 TPs_PIC
17/43
ANNEXES
17
-
8/13/2019 TPs_PIC
18/43
18
-
8/13/2019 TPs_PIC
19/43
ANNEXE 1: schma de la carte
19
-
8/13/2019 TPs_PIC
20/43
ANNEXE 2: format INTEL HEX
20
-
8/13/2019 TPs_PIC
21/43
ANNEXE 3: fichier de commande 16f84.lkr
ANNEXE 4: limitations lies un "quickbuild"
21
-
8/13/2019 TPs_PIC
22/43
-
8/13/2019 TPs_PIC
23/43
TPs
23
-
8/13/2019 TPs_PIC
24/43
24
-
8/13/2019 TPs_PIC
25/43
TP 1
Objectifs Dcouverte de MPLABManipulation des instructions des PICs et gestion des entres / sorties
I) Programme BP
1) Ouvrir le fichier BP.asmdans le rpertoire TP1:
Observer le rle des quelques directives d'assemblage utilises.
(le fichier p16F84.incissu du rpertoire C:\Program Files\Microchip\MPASM Suite\
est fourni en annexe TP1-2)
Complter le fichier pour afficher le chiffre "1" lorsqu'on appui sur le bouton poussoir et
"0" au repos. On n'oubliera pas de dfinir l'argument de la directive CONFIG__
2) Crer un projet TP1.mcp avec comme fichier source BP.asm puis effectuer sa
compilation. Dans ce 1er TP on effectuera un "QUICKBUILD" sans utiliser l'diteur de
lien (cf section III-3). Observer tous les fichiers crs dans le rpertoire TP1 (on pourra sereporter l'annexe TP1-3 pour identifier les fichiers), ouvrir les fichiers BP.lst, TP1.hex,
et identifier leur contenu. Le format INTEL HEX32 (format par dfaut de MPLAB mais le
HEX8 pourrait suffire) du fichier .hexainsi que la liste des diffrents fichiers gnrs par
MPLAB sont donns en annexe 2 et TP1-3.
3) Programmer le PIC sur la carte d'application et tester le programme.
4) Simuler le programme (mme si celui-ci fonctionne !) :
On visualisera le contenu des registres SFR.
On simulera l'appui sur le poussoir comme indiqu dans la partie III-4.
25
-
8/13/2019 TPs_PIC
26/43
II) Programme CHENILLARD 1
1) Ouvrir le fichier chen1.asmdu rpertoire TP1 (voir copie en annexe TP1-1). Observer les
diffrentes parties de ce fichier et identifier le rle des directives d'assemblage utilises.
Analyser le sous-programme de temporisation "tempo" et calculer sa dure d'excution.
2) Ecrire le programme principal pour qu'il fasse allumer l'une aprs l'autre une LED de
gauche droite puis de droite gaucheetc sur la carte d'application. La dure d'allumage
d'une LED sera calibre par l'appel au sous-programme "tempo".
3) Ajouter ce nouveau fichier source au projet TP1 et supprimer le lien sur le fichier BP.asm.
Compiler, programmer, tester. Pour bien comprendre le fonctionnement de la pile on
simulera le programme en observant sont droulement dans la fentre "desassembly listing"(on neutralisera la temporisation, trop longue simuler, en mettant provisoirement le bloc
de cette routine en commentaire).
III) Programme MAXIMUM
On cherche maintenant crer un programme permettant de rechercher le nombre le pluslev dans une liste de 10 nombres.
1) Crer un nouveau fichier max.asm. Dfinir une zone de variables contenant les lments :
MAX de 1 octet
TAB de 10 octets
2) Ecrire le programme permettant de placer dans la variable MAXle nombre le plus lev de
la liste dont le 1erlment est point par TAB(on recopiera les parties utiles du programme
chen1.asmpour gagner du temps). On utilisera pour cela un pointeur (registre FSR) pour
scruter la liste en effectuant un adressage indirect.
3) La carte d'application ne possdant pas d'unit d'affichage permettant d'indiquer clairement
la valeur de MAX, on effectuera le test de ce programme uniquement en simulation (une
compilation directe sans dfinir de projet pourra suffire). On remplira au pralable la liste
des 10 valeurs la main dans la fentre FILE REGISTERS (on verra dans le TP2 une
possibilit de dclarer des variables initialises).
26
-
8/13/2019 TPs_PIC
27/43
ANNEXE TP1-1: fichier chen1.asm
LI ST p=16F84 ; Df i ni t i on de pr ocesseur#i ncl ude ; Df i ni t i ons de var i abl es
__CONFI G _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
; ' __CONFI G' prci se l es par amt r es encods dans l e pr ocesseur au moment de; sa pr ogr ammat i on. Les df i ni t i ons sont dans l e f i chi er i ncl ude.; Voi c i l es val eurs et l eurs df i ni t i ons :
; _CP_ON Code pr ot ect i on ON : i mpossi bl e de r el i r e; _CP_OFF Code prot ect i on OFF; _PWRTE_ON Ti mer r eset sur power on en ser vi ce; _PWRTE_OFF Ti mer r eset hors- ser vi ce; _WDT_ON Wat ch- dog en ser vi ce; _WDT_OFF Wat ch- dog hor s ser vi ce
; _LP_OSC Osci l l at eur quar t z basse vi t esse; _XT_OSC Osci l l ateur quar t z moyenne vi t esse; _HS_OSC Osci l l ateur quar t z gr ande vi t esse; _RC_OSC Osci l l ateur r seau RC
; *********************************************************************; ASSI GNATI ONS *; *********************************************************************
TRI SA_VAL EQU H' XX' ; Val eur char ger dans r egi st r e TRI SATRI SB_VAL EQU H' XX' ; Val eur char ger dans r egi st r e TRI SBI NI T_PORTA EQU H' XX' ; Val eur i ni t i al e char ger dans r egi st r e PORTAI NI T_PORTB EQU H' XX' ; Val eur i ni t i al e char ger dans r egi st r e PORTB
; *********************************************************************; DEFI NE *; *********************************************************************
#DEFI NE BOUTON PORTB, 0 ; bout on- poussoi r
; *********************************************************************; MACRO *; *********************************************************************
BANK0 macr o ; df i ni une macr o "BANK0"bcf STATUS , RP0 ; passer banque0endm ; f i n de l a macro
BANK1 macr obsf STATUS , RP0 ; passer banque1endm
; *********************************************************************; DECLARATI ONS DE VARI ABLES *; *********************************************************************
CBLOCK 0x00C ; dbut de l a zone de var i abl es ( pour exempl e)
VAR : 1 ; dcl are une var i abl e "VAR" de 1 octet ( adr esse 0x00C)TABLEAU : 10 ; r ser ve une zone mmoi r e de 10 oct et s ( 0x00D - 0x017)
; ( TABLEAU est l e 1er l ment )cmpt 1 : 1 ; compt eur de boucl es 1
27
-
8/13/2019 TPs_PIC
28/43
cmpt 2 : 1 ; compt eur de boucl es 2cmpt 3 : 1 ; compt eur de boucl es 3
ENDC ; Fi n de l a zone
; **********************************************************************
; DEMARRAGE SUR RESET *; **********************************************************************
org 0x000 ; f i xe l ' adr esse d' i mpl ant at i on en mmoi r e pr ogr amme; de l ' i ns t ruct i on qui sui t
resetgoto start
; *********************************************************************; I NI TI ALI SATI ONS *; *********************************************************************
i ni t
BANK1movl w TRI SA_VALmovwf TRI SAmovl w TRI SB_VALmovwf TRI SBBANK0movl w I NI T_PORTAmovwf PORTAmovl w I NI T_PORTBmovwf PORTBreturn
; *********************************************************************; SOUS- PROGRAMME DE TEMPORI SATI ON *; *********************************************************************
t empomovl w 2movwf cmpt 3
boucl e3cl r f cmpt 2
boucl e2cl r f cmpt 1
boucl e1nopdecf sz cmpt 1 , f
got o boucl e1decf sz cmpt 2 , fgot o boucl e2decf sz cmpt 3 , fgot o boucl e3return
; *********************************************************************; PROGRAMME PRI NCI PAL *; *********************************************************************
startcal l i ni t
END ; di r ect i ve f i n de progr amme
28
-
8/13/2019 TPs_PIC
29/43
ANNEXE TP1-2: fichier p16F84.inc
LI ST; P16F84. I NC St andard Header Fi l e, Ver si on 2. 00 Mi cr ochi p Technol ogy,
I nc. NOLI ST
; Thi s header f i l e def i nes conf i gur at i ons, r egi st er s, and ot her usef ul bi t sof; i nf ormat i on f or t he PI C16F84 mi cr ocont r ol l er . These names ar e t aken t omat ch; t he dat a sheet s as cl osel y as possi bl e.
; Not e that t he pr ocessor must be sel ect ed bef or e thi s f i l e i s; i ncl uded. The pr ocessor may be sel ect ed t he f ol l owi ng ways:
; 1. Command l i ne swi t ch:
; C: \ MPASM MYFI LE. ASM / PI C16F84; 2. LI ST di r ecti ve i n t he sour ce f i l e; LI ST P=PI C16F84; 3. Pr ocessor Type ent r y i n t he MPASM f ul l - screen i nt er f ace
; ==========================================================================;; Revi si on Hi st or y;; ==========================================================================
; Rev: Date: Reason:
; 2. 00 07/ 24/ 96 Renamed t o r ef l ect t he name change t o PI C16F84.; 1. 01 05/ 17/ 96 Cor r ect ed BADRAM map; 1. 00 10/ 31/ 95 I ni t i al Rel ease
; ==========================================================================;; Ver i f y Pr ocessor;; ==========================================================================
I FNDEF __ 16F84MESSG "Processor - header f i l e mi smat ch. Veri f y sel ect ed
pr ocessor . "ENDI F
; ==========================================================================;; Regi ster Def i ni t i ons;; ==========================================================================
W EQU H' 0000'F EQU H' 0001'
29
-
8/13/2019 TPs_PIC
30/43
; - - - - - Regi st er Fi l es- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
I NDF 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'EEDATA EQU H' 0008'EEADR EQU H' 0009'PCLATH EQU H' 000A'I NTCON EQU H' 000B'
OPTI ON_REG EQU H' 0081'TRI SA EQU H' 0085'TRI SB EQU H' 0086'EECON1 EQU H' 0088'EECON2 EQU H' 0089'
; - - - - - STATUS Bi t s - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
I RP 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'
; - - - - - I NTCON Bi t s - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GI E EQU H' 0007'EEI E EQU H' 0006'T0I E EQU H' 0005'I NTE EQU H' 0004'RBI E EQU H' 0003'T0I F EQU H' 0002'I NTF EQU H' 0001'RBI F EQU H' 0000'
; - - - - - OPTI ON Bi t s - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOT_RBPU EQU H' 0007'I NTEDG 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'
; - - - - - EECON1 Bi t s - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EEI F EQU H' 0004'WRERR EQU H' 0003'WREN EQU H' 0002'WR EQU H' 0001'
RD EQU H' 0000'
30
-
8/13/2019 TPs_PIC
31/43
; ==========================================================================;; RAM Def i ni t i on;; ==========================================================================
__MAXRAM H' CF'__BADRAM H' 07' , H' 50' - H' 7F' , H' 87'
; ==========================================================================;; Conf i gur at i on Bi t s;; ==========================================================================
_CP_ON EQU H' 000F'_CP_OFF EQU H' 3FFF'_PWRTE_ON EQU H' 3FF7'_PWRTE_OFF EQU H' 3FFF'_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'
LI ST
31
-
8/13/2019 TPs_PIC
32/43
ANNEXE TP1-3: fichiers manipuls par MPLAB
32
-
8/13/2019 TPs_PIC
33/43
TP 2
Objectifs Gestion du timerProgrammation avec interruption
Utilisation du mode SLEEP, rveil par WATCHDOG
Utilisation de fichiers sources multiples avec code objet relogeable
I) Programme CHENILLARD2(tempo avec timer)
Pour avoir une information sur le temps qui s'coule, il est plus simple et prcisd'utiliser un timer plutt qu'une boucle logicielle. Le TIMER0 du PIC peut fonctionner en en
compteur d'vnement ou bien en timer classique incrment par les fronts d'horloge du PIC
aprs division par 4 + prescaler (cf poly description des PICs)
1) Recopier dans le rpertoire TP2le fichier chen1.asmde TP1en le renommant chen2.asm.
Modifier le sous-programme de temporisation pour que celle-ci soit calibre par le timer0.
On remarquera qu'il faudra faire dborder le timer plusieurs fois pour obtenir la mme
dure, mme en rglant le prescaler sur le rapport de division le plus lev (256). On
utilisera donc un compteur de dbordement en introduisant une variable cmpt qu'on
incrmentera (ou dcrmentera si plus simple) chaque dbordement repr par le flag
T0IF. On n'oubliera pas de complter le sous-programme d'initialisation pour configurer
convenablement le timer.
2) Crer dans le rpertoire TP2le projet TP2.mcpet lui associer le fichier source chen2.asm.
Tester le fonctionnement sur la carte et dbugger avec MPSIM si ncessaire.
II) Programme CHENILLARD3(tempo avec timer dclenchant une interruption)
L'utilisation du timer pour temporiser apporte une prcision et une simplicit au niveau
de l'criture du code. Mais le processeur est mal exploit puisqu'il ne fait qu'attendre le
dbordement du timer (scrutation de T0IF) sans pouvoir effectuer d'autre tche. Le timer0
tant capable de dclencher une interruption du processeur, il sera donc prfrable d'utiliser ce
procd pour n'occuper le processeur qu'au moment du dbordement du timer.
33
-
8/13/2019 TPs_PIC
34/43
1) Supprimer le fichier source chen2.asmdu projet TP2.mcp et le remplacer par le fichier
chen3.asm dj dans le rpertoire. Complter le sous-programme d'initialisation pour
autoriser la source d'IT timer0.
2) Complter la routine d'interruption de manire dcaler la LED allume tous les ndbordements du timer (n dfinir afin d'obtenir la bonne temporisation). Le programme
principal pourra ainsi continuer se drouler entre chaque dbordement du timer. Pour
matrialiser visuellement ce pseudo-paralllisme on fera excuter dans le programme
principal la routine principale du programme BP.asmdu TP1 qu'on recopiera.
3) Tester le programme sur la carte en vrifiant que le symbole affich volue bien lorsqu'on
appui sur le poussoir, sans perturber le dfilement rgulier du chenillard. Dbugger avec le
simulateur si ncessaire en neutralisant le prescaler pour courter l'intervalle de temps
entre dbordements (mettre PSA=0 " la main" durant la simulation aprs l'excution de la
routine d'initialisation)
III) Programme CHENILLARD4(tempo avec le "chien de garde")
Une dernire faon d'obtenir une temporisation, plus marginale, consiste utiliser un autre
timer interne du PIC : le watchdog timer WDT. Ce timer est particulier puisqu'il rinitialise le
PIC lorsqu'il dborde. Ceci permet de rinitialiser l'application lorsque le programme reste en
attente pendant une dure anormale (cf poly PICs). Le dbordement du chien de garde permet
aussi un rveil du PIC lorsque celui-ci est en mode veille command par l'instruction SLEEP.
Cette possibilit peut tre exploite, si le PIC n'a rien d'autre faire que d'attendre, pour
obtenir une temporisation tout en minimisant la consommation lectrique.
Le principe est simple :
aprs le dcalage d'une LED on placera le PIC en mode SLEEP. Le rveil du PIC seraici provoqu par le dbordement du chien de garde ou plutt par celui du prescaler qui
est utilis ici en post-diviseur (cf poly PICs).
on choisira une dure de dbordement de l'ordre de 0,5 s en prenant comme rfrence
18 ms pour la priode de dbordement du WDT.
34
-
8/13/2019 TPs_PIC
35/43
1) Ouvrir le fichier chen2.asm dj crit et le sauvegarder sous le nom chen4.asm. On
l'associera au projet TP2.mcp la place de chen3.asm. Supprimer le sous-programme
de temporisation et remplacer l'appel CALL tempopar l'instruction SLEEP. Modifier la
routine d'initialisation pour affecter le prescaler au WDT avec le bon rapport de
division. Ne pas oublier d'activer le WDT avec la directive __CONFIG.
2) Vrifier le bon fonctionnement du programme. En cas de dysfonctionnement, le
programme utilisant le WDT est galement simulable : il faut dfinir la dure de
dbordement du chien de garde en incluant le post-scaler avec DEBUG > SETTINGS
dans l'ongletBreak options.
IV) Programme CHENILLARD 5
On va dans cette partie rcrire le programme CHENILLARD2 en le fractionnant en
plusieurs parties indpendantes de manire dcouper le programme raliser en plusieurs
sous-programmes (fonctions) lmentaires, indpendantes, que l'on pourra dans un cas plus
gnral crire et valider plus simplement qu'en considrant le projet dans son intgralit.
1) Associer au projet TP2.mcples fichiers sources chen5.asmet tempo.asmprsents dans le
rpertoire. On fera appel ici l'diteur de lien MPLINK pour la compilation en ajoutant lefichier de commande C:\logiciel\pic\MPLAB7_6\MPASM Suite\LKR\16f84.lkr.
A la compilation, MPASM va maintenant gnrer des fichiers objets associs aux
fichiers sources, que va relier MPLINK pour obtenir le fichier excutable. Pour dcouper un
projet en plusieurs fichiers sources, on peut aussi inclure tous les fichiers dans un fichier
principal grce la directive "include" (ici on pourrait inclure le fichier tempo.asmdans le
fichier chen5.asm). L'intrt principal d'utiliser un diteur de lien est qu'il permet de relier des
fichiers objets qui reprsentent le code excutable des fichiers sources associs, qui peut :
ne pas tre allou en mmoire programme (on parle alors de "code relogeable")
manipuler des registres et drouter le programme vers une tiquette sans spcifier leur
adresse absolue. Ces tiquettes ou registres sont simplement reprsents par un symbole
qui pourra tre exploit par d'autres fichiers lis (on parle alors de "rfrences croises")
On peut ainsi dcouper un projet en modules (fichiers objets) aussi indpendants que
possible, qui pourront ventuellement tre utiliss dans d'autres projets. Pour obtenir un code
relogeable, on n'utilise plus la directive orgmais codequi permet de dfinir une section de
code. De mme, on peut dfinir des sections de donnes initialises (directive idata) ou non
35
-
8/13/2019 TPs_PIC
36/43
(directive udata). Toutes ces sections seront alloues en mmoire l'dition de lien partir du
fichier .lkr. Les registres ou tiquettes exportes devront tre dsignes par la directive global
aprs leur dclaration. Elles seront utilisables dans d'autres fichiers sources en les dclarant
par la directive extern.
2) Ouvrir les 2 fichiers sources et observer les diffrentes sections et la procdure utilise
pour croiser l'tiquette "tempo".
3) Effectuer une recopie du programme principal du TP1 et compiler le projet. Observer le
fichier de mapping TP2.mapgnr par MPLINK et reprer o sont logs en mmoire les
diffrentes sections du programme, ainsi que les variables des sections de donnes. Ouvrir
galement la fentre Program Memory (VIEW > PROGRAM MEMORY) qui indique ce
qui sera implant dans la mmoire du PIC partir du fichier .hexde sortie.
On remarquera que MPLINK a cre 2 sections : donnes_init_io se trouve les valeurs
initiales des variables de la section donnes_init(l'instructionRETLW x retourne xdans le
registre W), ainsi qu'une section .cinitqui est une table de correspondance ("Look Up Table")
entre l'adresse de dbut des sections de valeurs initiales (ici il n'y en a qu'une qui est
donnes_init_i ) et l'adresse de dbut de la section des variables correspondantes (ici
donnes_init) ainsi que le nombre de variables de la section. Il est en effet ncessaire de
stocker les valeurs initiales en mmoire morte (ici en mmoire programme) puisque la
mmoire RAM est par dfinition volatile.
Si l'on excute le programme tel quel (par simulation) il ne sera pas oprationnel car
pour initialiser les variables (ici cmpt3) il faut ajouter un programme d'initialisation qui
exploite la table .cinitpour effectuer une recopie de donnes_init_idans donnes_init. Ce
programme d'initialisation est gnr automatiquement par tout compilateur C. Avec
MPASM, c'est l'utilisateur de l'ajouter. Un exemple de ce type de fichier est fourni avec
MPLAB.
4) Ajouter au projet le fichier source : C:\logiciel\pic\MPLAB7_6\MPASM
Suite\Example\IDASM16.asm. Ouvrir le fichier, reprer le point d'entre
copy_init_data qui correspond au dbut du sous-programme qui effectue la recopie.
Effectuer un appel (CALL) sur cette tiquette au dbut du programme principal dans
chen5.asmen n'oubliant pas la directive extern.
5) Vrifier que l'initialisation de cmpt3 s'effectue correctement en simulation et tester le
programme sur la carte. Pourquoi la temporisation n'a-t-elle plus la bonne dure partirdu 2eappel au sous programme-tempo ?
36
-
8/13/2019 TPs_PIC
37/43
-
8/13/2019 TPs_PIC
38/43
On codera les caractres afficher par l'octet : a b c d e f g 0 de manire
pouvoir charger directement cette valeur dans le port B.
La temporisation sera obtenue partir du dbordement du timer0 qui gnrera une
interruption.
L'appui sur le poussoir gnrera galement une interruption qui modifiera alors le
rapport de division du prescaler stock lui aussi dans l'EEPROM.
La fonction mainsera donc rduite l'appel de la fonction init. (on pourra y ajouter le
programme chenillardtest.cpour visualiser le fonctionnement par interruption)
Les rebonds du bouton poussoir seront neutraliss par une boucle de temporisation de
l'ordre de 10 ms).
Le programme est crire dans le fichier mes.cprform.
38
-
8/13/2019 TPs_PIC
39/43
ANNEXE TP3-1: fichier test.c + tempo.c
fichier test.c
#i ncl ude / / i ncl ut des macros + pi c1684. h
__CONFI G ( HS&WDTDI S&PWRTEN) ; / / di r ect i ve pour programmer l e r egi st r e CONFI G
char l ed=0xf e;extern t empo ( voi d) ; / / l a f onct i on ext er n est df i ni dans un aut r e f i chi er
i ni t ( voi d){TRI SA = 0x00;PORTA = 0xf f ;
TRI SB = 0x01;PORTB = 0x00;OPTI ON = 0x00;}
mai n ( voi d){i ni t ( ) ;
whi l e ( 1){
whi l e ( l ed ! = 0xef && I NTF != 1)
{l ed = l ed >1 | Ox80;PORTA = l ed;t empo ( ) ;}I NTF = 0;}}
/ * I LLUSTRATI ONS */
/ * val eur = eepr om_r ead(ADRESSE) ; permet de l i r e l ' EEPROMavec 0x00 =< ADRESSE
-
8/13/2019 TPs_PIC
40/43
/ *voi d i nt er r upt bout on ( voi d) r out i ne d' i nt er r upt i on ( l e nom n' a pas
d' i mport ance){
I NTF=0; l e cont ext e est sauvegard mai s i l f autr i ni t i al i ser l e f l ag de l a sour ce d' I T}*/
fichier tempo.c
#i ncl ude
t empo ( voi d){l ong i ;f or ( i =1; i
-
8/13/2019 TPs_PIC
41/43
ANNEXE TP3-2: fichier pic1684.h
#i f ndef _HTC_H_
#war ni ng Header f i l e pi c1684. h i ncl uded di r ect l y. Use #i ncl ude i nst ead.#endi f
/ ** Header f i l e f or t he Mi crochi p* PI C 16CR83 chi p* PI C 16F83 chi p* PI C 16C84 chi p* PI C 16F84 chi p* PI C 16F84A chi p* PI C 16CR84 chi p* Mi dr ange Mi cr ocont r ol l er s
*/
st at i c vol at i l e unsi gned char RTCC @ 0x01;st at i c vol at i l e unsi gned char TMR0 @ 0x01;st at i c vol at i l e unsi gned char PCL @ 0x02;st at i c vol at i l e unsi gned char STATUS @ 0x03;st at i c unsi gned char FSR @ 0x04;st at i c vol at i l e unsi gned char PORTA @ 0x05;st at i c vol at i l e unsi gned char PORTB @ 0x06;st at i c vol at i l e unsi gned char EEDATA @ 0x08;st at i c vol at i l e unsi gned char EEADR @ 0x09;st at i c unsi gned char PCLATH @ 0x0A;st at i c vol at i l e unsi gned char I NTCON @ 0x0B;
st at i c unsi gned char bank1 OPTI ON @ 0x81;st at i c vol at i l e unsi gned char bank1 TRI SA @ 0x85;st at i c vol at i l e unsi gned char bank1 TRI SB @ 0x86;st at i c vol at i l e unsi gned char bank1 EECON1 @ 0x88;st at i c vol at i l e unsi gned char bank1 EECON2 @ 0x89;
/ * STATUS bi t s */st at i c vol at i l e bi t RP0 @ ( unsi gned) &STATUS*8+5;st at i c vol at i l e bi t TO @ ( unsi gned) &STATUS*8+4;st at i c vol at i l e bi t PD @ ( unsi gned) &STATUS*8+3;st at i c vol at i l e bi t ZERO @ ( unsi gned) &STATUS*8+2;st at i c vol at i l e bi t DC @ ( unsi gned) &STATUS*8+1;st at i c vol at i l e bi t CARRY @ ( unsi gned) &STATUS*8+0;
/ * PORTA bi t s */st at i c vol at i l e bi t RA4 @ ( unsi gned) &PORTA*8+4;st at i c vol at i l e bi t RA3 @ ( unsi gned) &PORTA*8+3;st at i c vol at i l e bi t RA2 @ ( unsi gned) &PORTA*8+2;st at i c vol at i l e bi t RA1 @ ( unsi gned) &PORTA*8+1;st at i c vol at i l e bi t RA0 @ ( unsi gned) &PORTA*8+0;
/ * PORTB bi t s */st at i c vol at i l e bi t RB7 @ ( unsi gned) &PORTB*8+7;st at i c vol at i l e bi t RB6 @ ( unsi gned) &PORTB*8+6;st at i c vol at i l e bi t RB5 @ ( unsi gned) &PORTB*8+5;st at i c vol at i l e bi t RB4 @ ( unsi gned) &PORTB*8+4;st at i c vol at i l e bi t RB3 @ ( unsi gned) &PORTB*8+3;st at i c vol at i l e bi t RB2 @ ( unsi gned) &PORTB*8+2;
41
-
8/13/2019 TPs_PIC
42/43
st at i c vol at i l e bi t RB1 @ ( unsi gned) &PORTB*8+1;st at i c vol at i l e bi t RB0 @ ( unsi gned) &PORTB*8+0;st at i c vol at i l e bi t I NT @ ( unsi gned) &PORTB*8+0;
/ * I NTCON bi t s */st at i c vol at i l e bi t GI E @ ( unsi gned) &I NTCON*8+7;
st at i c vol at i l e bi t EEI E @ ( unsi gned) &I NTCON*8+6;st at i c vol at i l e bi t T0I E @ ( unsi gned) &I NTCON*8+5;st at i c vol at i l e bi t I NTE @ ( unsi gned) &I NTCON*8+4;st at i c vol at i l e bi t RBI E @ ( unsi gned) &I NTCON*8+3;st at i c vol at i l e bi t T0I F @ ( unsi gned) &I NTCON*8+2;st at i c vol at i l e bi t I NTF @ ( unsi gned) &I NTCON*8+1;st at i c vol at i l e bi t RBI F @ ( unsi gned) &I NTCON*8+0;
/ * OPTI ON bi t s */st at i c bank1 bi t RBPU @ ( unsi gned) &OPTI ON*8+7;st at i c bank1 bi t I NTEDG @ ( unsi gned) &OPTI ON*8+6;st at i c bank1 bi t T0CS @ ( unsi gned)&OPTI ON*8+5;st at i c bank1 bi t T0SE @ ( unsi gned)&OPTI ON*8+4;st at i c bank1 bi t PSA @ ( unsi gned)&OPTI ON*8+3;st at i c bank1 bi t PS2 @ ( unsi gned)&OPTI ON*8+2;st at i c bank1 bi t PS1 @ ( unsi gned)&OPTI ON*8+1;st at i c bank1 bi t PS0 @ ( unsi gned)&OPTI ON*8+0;
/ * TRI SA bi t s */st at i c vol at i l e bank1 bi t TRI SA4 @ ( unsi gned) &TRI SA*8+4;st at i c vol at i l e bank1 bi t TRI SA3 @ ( unsi gned) &TRI SA*8+3;st at i c vol at i l e bank1 bi t TRI SA2 @ ( unsi gned) &TRI SA*8+2;st at i c vol at i l e bank1 bi t TRI SA1 @ ( unsi gned) &TRI SA*8+1;st at i c vol at i l e bank1 bi t TRI SA0 @ ( unsi gned) &TRI SA*8+0;
/ * TRI SB bi t s */st at i c vol at i l e bank1 bi t TRI SB7 @ ( unsi gned) &TRI SB*8+7;st at i c vol at i l e bank1 bi t TRI SB6 @ ( unsi gned) &TRI SB*8+6;st at i c vol at i l e bank1 bi t TRI SB5 @ ( unsi gned) &TRI SB*8+5;st at i c vol at i l e bank1 bi t TRI SB4 @ ( unsi gned) &TRI SB*8+4;st at i c vol at i l e bank1 bi t TRI SB3 @ ( unsi gned) &TRI SB*8+3;st at i c vol at i l e bank1 bi t TRI SB2 @ ( unsi gned) &TRI SB*8+2;st at i c vol at i l e bank1 bi t TRI SB1 @ ( unsi gned) &TRI SB*8+1;st at i c vol at i l e bank1 bi t TRI SB0 @ ( unsi gned) &TRI SB*8+0;
/ * EECON1 bi t s */st at i c vol at i l e bank1 bi t EEI F @ ( unsi gned) &EECON1*8+4;st at i c vol at i l e bank1 bi t WRERR @ ( unsi gned) &EECON1*8+3;st at i c vol at i l e bank1 bi t WREN @ ( unsi gned) &EECON1*8+2;st at i c vol at i l e bank1 bi t WR @ ( unsi gned) &EECON1*8+1;
st at i c vol at i l e bank1 bi t RD @ ( unsi gned) &EECON1*8+0;
#def i ne CONFI G_ADDR 0x2007
/ *osc conf i gur at i ons*/#def i ne RC 0x3FFF / / r esi st or / capaci t or#def i ne HS 0x3FFE / / hi gh speed cr yst al / r esonator#def i ne XT 0x3FFD / / cr yst al / r esonator#def i ne LP 0x3FFC / / l ow power cr yst al / r esonat or
/ *watchdog*/#def i ne WDTEN 0x3FFF / / enabl e wat chdog t i mer
#def i ne WDTDI S 0x3FFB / / di sabl e wat chdog t i mer
42
-
8/13/2019 TPs_PIC
43/43
/ *power up t i mer* /#i f def i ned ( _16C84)#def i ne PWRTEN 0x3FFF / * enabl e power up t i mer*/#def i ne PWRTDI S 0x3FF7 / * di sabl e power up t i mer */#el se#def i ne PWRTDI S 0x3FFF / * di sabl e power up t i mer */
#def i ne PWRTEN 0x3FF7 / * enabl e power up t i mer */#endi f
#i f def i ned ( _16CR83) | | def i ned( _16CR84)#def i ne DP 0x3F7F / / dat a code i s protected#def i ne PROTECT 0x008F / / pr ogr amcode i s pr otected/ / al t ernat i ve def i ni t i on#def i ne DATPROT 0x3F7F / / use DP#def i ne DATUNPROT 0x3FFF / / use UNPROTECT#el i f def i ned ( _16C84)#def i ne PROTECT 0x3FEF / / pr ogr amcode i s pr otected#el i f def i ned ( _16F83) | | def i ned( _16F84) | | def i ned( _16F84A)#def i ne PROTECT 0x000F / / pr ogr amcode i s pr otected#endi f
#def i ne UNPROTECT 0x3FFF / / do not prot ect t he code