tps_pic

Upload: salah-dahouathi

Post on 04-Jun-2018

217 views

Category:

Documents


0 download

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