You are on page 1of 10

Laboratoire dElectronique num erique: Utilisation du PIC16F877

Ann ee acad emique 2006-2007

Avant toute chose


1. Cr eez le r epertoire C :\ELEN033\XX PIC\ o` u XX est le nom de votre groupe 2. Copiez-y le contenu du repertoire C :\ELEN033\PIC\

` Vous devez faire toujours attention a


1. la mise sous tension de la carte : Alimenter lICD2 MAIS PAS la carte. Lancer MPLAB. Choisir DebuggerSelect ToolMPLAB ICD2. Dans le menu Debugger de MPLAB, choisir loption Connect. tablissement de la communication, aller dans DebuggerSettings. Apr` es e Dans la bo te de dialogue, choisir longlet Power et v erier que la case Power target circuit from MPLAB ICD2 est bien d ecoch ee, et appuyer sur OK. Alimenter la carte et choisir DebuggerConnect. 2. la conguration du PIC (ligne d ebutant par CONFIG), prenez lhabitude de congurer TOUS les bits ! 3. la conguration de MPLAB (build options,. . .)

1 Introduction
` appliquer les concepts d Dans ce laboratoire, vous serez amen es a evelopp es en r ep etition et dans lIntroduction aux microcontr oleurs et a emes que vous pourriez ren` leur assembleur. Tous les probl` tre r contrer lors de ces manipulations peuvent e esolus en consultant ces deux r ef erences. RAPPEL important lectroniques doivent e tre mani Tous les composants e es avec d elicatesse et pr ecaution. En outre, une tre port ` l attention toute particuli` ere doit e ee a electricit e statique, qui risquerait dendommager les circuits. Dans cette optique, nous vous demandons de toujours bien vouloir vous d echarger en touchant galement de toucher les broches des circuits int une prise de terre. Evitez e egr es.

1.1

Sur le PIC utilis e

` la n de lIntroduction aux Le PIC utilis e dans ce laboratoire est un 16F877 (d ecrit bri` evement a microcontr oleurs et a ele livr e avec la carte de d eveloppement. ` leur assembleur). Il sagit en fait du mod` En outre, cest certainement celui que vous utiliserez dans le cours de Syst` emes Programm es Enfouis de M. Boigelot. Il nest donc pas inutile de d ej` a sy familiariser. Cependant, le niveau des exercices propos es dans ce laboratoire reste assez bas, de sorte que les commandes du 16F84 sufsent amplement pour les r ealis e de fac on simple. Il est cependant conseill e de relire la section 7. Evolution : vers le 16F87x... de lIntroduction aux microcontr oleurs et a ` leur assembleur.

1.2

Sur la carte de d eveloppement

Pour ce laboratoire, le PIC est plac e sur une carte de d eveloppement de type PICDEM T M 2 plus de chez Microchip. Une carte de d eveloppement est un ensemble de circuit int egr es pr ecabl es entre eux qui per` diverses ns (p met de r ealiser des montages a edagogiques, test...) sans devoir concevoir un circuit ext erieur. l La carte que vous utiliserez dans ce laboratoire (repr esent ee gure 1) est constitu ee des e ements suivants : tre 1. Support DIP1 18-, 28- et 40-broches. (Bien quil y ait 3 supports, un seul composant peut e ` la fois) utilis ea 2. R egulateur +5V embarqu e pour alimentation direct depuis une entr ee 9V, 100mA AC/DC (adaptateur secteur), une pile de 9V. ` une interface RS-232. 3. Connecteur RS-232 et hardware associ e pour connexion directe a 4. Connecteur pour ICD2 . 5. Potentiom` etre de 5K pour les appareils avec entr ee analogique. 6. Trois boutons-poussoir pour g en erer des stimuli ext erieurs et le RESET. 7. LED verte indiquant la mise sous tension. 8. 4 LEDs rouges connect ees au PORTB. 9. Jumper J6 pour d econnecter les LEDs du PORTB. ` quartz de 4 MHz (pr ` lemploi). 10. Oscillateur a et a 11. Trous libres pour connecter le cristal. ` 32.768KHz pour les op 12. Cristal a erations dhorloge du Timer1. 13. Jumper J7 pour d econnecter loscillateur RC int egr e (fr equence approximative : 2 MHz). 14. 256K x 8 Serial EEPROM. 15. Ecran LCD. 16. Buzzer piezo.
1 Dual In-line Package, technique de packaging de composant micro electronique o` u les broches de connexion, espac ees de 2,54 mm, sont align ees sur deux rang ees plac ees le long de chaque c ot e. 2 In-Circuit Debugger

17. Aire de prototypage pour le hardware utilisateur. 18. Senseur thermique Microchip TC74.

F IG . 1: PICDEM 2 Plus Hardware

1.3

Sur lICD2

Comme vous pouvez le voir, la carte de d eveloppement poss` ede un connecteur pour raccorder un d ebogueur en circuit (ICD). Dans ce laboratoire, vous utiliserez MPLAB ICD2, un ICD produit galement par Microchip ; et dont linterface software sint` e egre enti` erement dans MPLAB IDE. lectronique (hardware) qui permet (entre Comme son nom lindique, un ICD est un composant e autre) de r ealiser du d ebuggage (cest-` a-dire de la correction de code) lorsque le PIC est d ej` a pro` la fonction Debug de gramm e et ins er e dans le circuit. Cette fonctionnalit e ressemble un peu a MPLAB ; mais lutilisation dun ICD offre dautres avantages non n egligeables. tape du En effet, si la simulation du code non impl ement e est n ecessaire dans une premi` ere e d eveloppement dun programme ; celle-ci ne peut pas prendre en compte les effets du circuit den l. Or, celui-ci a une grande inuence sur les fonctionnalit cadrement du PIC dans le monde r ee es du PIC. Citons par exemple les probl` emes de fonctionnement qui peuvent appara tre lorsque la pin RA4 est laiss ee ottante en sortie et quon lui impose un potentiel ext erieur. LICD2 permet dint egrer ces effets dans la simulation puisque le PIC est d ej` a plac e dans son circuit. galement les fonctionnalit vite de devoir renvoyer le LICD2 poss` ede e es dun programmateur, ce qui e ` chaque modication. PIC sur le DATAMAN (le programmateur universel du laboratoire) a Au cas o` u le montage (connexions PC/ICD2/carte de d eveloppement/alimentation) ne serait pas raccord e, APPELEZ LASSISTANT POUR QUIL VIENNE LE FAIRE ! ! ! La connexion des composants exige un ordre pr ecis qui, sil nest pas respect e, pourrait endommager le mat eriel. tapes : Un d ebogage avec lICD2 se passe en trois e 1. Programmation du code pour le d ebogage LICD2 doit, avant de d eboguer, placer le code du programme dans la m emoire du PIC. Il galement un l charge e eger code de d ebogage (environ 0x120 mots) au d ebut de la m emoire 3

galement programme. Il faut donc que le code du programme nutilise pas cet espace. Il existe e dautres restrictions : tre activ le mode debug doit e e; tre d le watchdog doit e esactiv e; tre d la protection de code dot e esactiv ee ; tre d la protection de lecture en table doit e esactiv ee. 2. D ebogage tape on utilise vraiment le d ` pas ou A cet e ebogueur pour v erier le bon fonctionnement pas a tapes du programme et corriger les e ventuelles erreurs r par e esiduelles. 3. Programmation du code nal Une fois le d ebogage termin e et les erreurs corrig ees, lICD2 permet de programme le PIC avec le programme nal (sans le code de d ebogage). ` la n du laboratoire. Nous explorons plus en d etails les capacit es de lICD2 a

2 Manipulations
2.1 Manipulation 1
tre impl Une pile peut facilement e ement ee sur un PIC au moyen des deux registres INDF et FSR. Voici les m ethodes push et pop DataPush Macro incf FSR, f movwf INDF endm DataPop Macro movf INDF, w decf FSR, f endm ; "Push" le contenu de "w" sur la pile FSR

"Pop" le contenu de "w" sur la pile FSR

1. Pour cette manipulation il est conseill e de relire les points suivants dans le fascicule Introduction aux microcont oleurs et a ` leur assembleur : 2.3 Registres : W, 3. Programmation des PICs, 4. Instructions 2. Ins erer le PIC16F87x sur la carte. V erier que le Jumper J6 est branch e et le J7 d ebranch e. Lancer MPLAB IDE. Dans le menu project, ouvrir le projet stack et v erier que le PIC16f877 et la toolsuite Microchip MPASM sont s electionn es. 3. Trouvez lexpression math ematique des 3 calculs. 4. Au moyen du d ebuggeur et view special function registers et view watch, regarder l evolution des variables, des registres STATUS pour le premier calcul et INDF, FSR pour le deuxi` eme calcul.

2.2

Manipulation 2

Ouvrir le projet error et v erier que le PIC16f877 et la toolsuite Microchip MPASM sont s electionn es. Cette application est sens ee allumer une LED en RB1. Une fois le bouton RA4 appuy e, la LED teinte et RB0 allum RB1 est e ee. Toute pression suppl ementaire sur RA4 ne produit plus rien. ` vous de les retrouver. Quatre erreurs sont gliss ees dans le code, a Code LIST R=DEC ifdef __16F84 INCLUDE "p16f84.inc" else ifdef __16F877 INCLUDE "p16f877.inc" endif __CONFIG _CP_OFF & _WDT_ON & _XT_OSC & _PWRTE_ON PAGE

org nop movlw movwf bsf movlw movwf bcf

0 0x02 PORTB STATUS, RP0 0x0FC TRISB STATUS, RP0 ; Led RB1 on, RB0 off ; aller en banque 1 pour d efinir la direction des ports RB0/RB1 en sortie ; retour en banque 0

Loop btfsc PORTA, 0 goto Loop rrf goto end PORTA Loop ; ;

attendre que le bouton ra4 soit press e

eteindre rb1, allumer rb0 efiniment boucler ind

2.3

Manipulation 3

Ouvrir le projet Interrupt et v erier que le PIC16f877 et la toolsuite Microchip MPASM sont s electionn es. Ce programme allume une LED pendant une seconde quand on appuie et rel ache le bouton en RB0. Vous devrez utiliser le chapitre 5 portant sur les interruptions pour vous aider dans cette manipulation. 1. D ebranchez le jumper J6 et J7 et branchez une LED sur RB1 (noubliez pas la r esistance). 2. Compl etez les lignes de code manquantes ( ? ? ? ?) et testez le code. Code list p=16f877 #include p16f877.inc CBLOCK 0x020 Dlay:2 ENDC ;****** CONFIGURATION ******* __config H3779 ;**************************** ORG 0 goto init ;****** Le programme d interruption se d eclenche *** a 1 *** ee RB0 passe de 0 ` ;****** lorsque l entr 6 ; Commencer les registres a la fin des valeurs

ORG 4 ;*********** Programme d interruption ********************** bsf PORTB,1 call Delay call Delay call Delay call Delay call Delay bcf PORTB,1 ???? RETFIE ; on allume la led connect ee sur rb1

; retour d interruption

;************* Programme d INIT ************************** init bsf STATUS,5

MOVLW B10000001

; on met ` a 1 le 5eme bit du registre status pour acc eder ; ` a la 2eme page m emoire ( pour configurer trisa et tr ; -> broches en entr ee ou en sortie ) ; rb0,rb3,rb4 en entr ee ( rb0 sera la broche utilis ee ; pour l interruption )

MOVWF TRISB bcf STATUS,5 ` 0 le 5eme bit du registre status pour acc ; on remet a eder emoire a la 1ere page m ; `

????

; Le passage de 0 ` a 1 sur RB0 provoque une IT ; sur un

front montant

???? ; autorise les interruptions sur RB0 ???? ; autorise toutes les interruptions clrf PORTB ;************ Programme principal en boucle ********************* main sleep GOTO main Delay ; D elai de 1/5 secondes 7 ; mise en sommeil du PIC conso : 3.2 mA, attente impulsion sur RB0

clrf clrf decfsz goto decfsz goto return end

Dlay Dlay + 1 Dlay, f $ - 1 Dlay + 1, f $ - 3

2.4

Manipulation 4

` nouveau d Pour cette manipulation, il faut a ebrancher le jumper J6 et connecter une LED et une r esistance sur RB1. Ouvrez le projet eep. Celui-ci est identique au projet Manip2a vu dans ELEN040 sauf quau lieu dallumer une LED sur une pression de RB0, il faut N pressions, o` u N est une valeur inscrite en EEPROM. Commencez pas lire le code et essayez den comprendre les m ecanismes (principalement ceux ` lutilisation de lEEPROM). Pour mieux comprendre lEEPROM, r li es a ef erez-vous au 2e exemple du manuel, ainsi qu` a la section qui lui est d edi ee. vidence ses possibilit Maintenant, nous allons un peu manipuler lICD2 pour mettre en e es. Tout dabord, branchez le jumper J7. Ensuite, dans MPLAB, s electionnez ProgrammerSelect ToolNone, galement la case EEPROM dans le menu puis DebuggerSelect ToolMPLAB ICD2. Cochez e DebuggerSettingsProgram. Les diverses fen etres de d ebogage sont accessibles via le menu View. Commencez par lancer le d ebogage via DebuggerRun, ou F9. Pour arr eter lex ecution du programme, utiliser DebuggerHalt, ou F5. galement possible de faire tourner le programme pas a ` pas (DebuggerStep into, ou F7), Il est e ou en ex ecution anim ee (DebuggerAnimate).

2.5

Manipulation 5

Pr erequis Pour cette manipulation il est conseill e de relire les points suivants dans le fascicule Introduction aux microcont oleurs et a ` leur assembleur : 2.2.1 M emoire RAM 2.3 Registres : W, TMR0, OPTION, STATUS, PORTA/PORTB, TRISA/TRISB 2.4 Timer 0 2.5 Entr ees/sorties 3. Programmation des PICs 4. Instructions 7. Evolution vers le 16F87x Manipulations 1. Ins erer le PIC16F87x sur la carte. V erier que le Jumper J6 est branch e et le J7 d ebranch e. Lancer MPLAB IDE. Dans le menu project, ourvir le projet bincout. 8

2. Ajouter les instructions manquantes ? ? ? ? ; selection de la banque Remarque : Il existe une instruction banksel registre mais on demande dutiliser le registre STATUS. Exemples dutilisations de banksel : banksel TRISA ou banksel PORTA 3. Dans congure conguration bits, desactiver low voltage programet activer background debug. Compiler le code, programmer le PIC et lancer le debuggage avec lICD2. Expliquez lint er et de TOIF dans le programme principal. Comment est congur e le registre OPTION REG ? Que constatez vous au niveau des LEDs ? Quelle est la fr equence du compteur binaire sur LEDs ? (la fr equence du compteur TMR0 avant pr ediviseur est le quart de celle du cristal utilis e) equate. 4. Donner une nouvelle valeur de OPTION REG plus ad Recalculer la nouvelle fr equence du compteur binaire. 5. ajouter ce code pour d eclarer un nouveau registre monregistre : CBLOCK H20 monregistre ENDC (avant la ligne : principal par : again: ORG 0 ; ; ; registres principaux commencant a ladresse 12 un registre general de comptage fin des d efinitions de registres ; debut du programme) et remplacer le programme

movlw D7 movwf monregistre incf PORTB, f

; ; ajouter 1 ` a portB

loop:

btfss INTCON, T0IF ; goto $ -1 ; bcf INTCON, T0IF ; decfsz monregistre, f goto loop goto again end

attendre TOIF revenir a la ligne preced. mettre le flag dinterruption ` a 0 ; decremente monregistre, skip si 0

; fin du programme

D ecrire ce que font ces changements. ` faire pour avoir un d 6. Expliquer les changements a ecompteur. ` compter a ` partir de 11 ? (pour rappel, utiliser W) 7. Comment commencer a ` faire pour compter jusqu` 8. Expliquer les changements a a 16 puis d ecompter jusque 0. De nou` 0, utiliser Z pour recommencer a ` compter. veau arriv ea ` faire pour ne compter que les nombres impairs ? 9. Quels sont les changements a ` gauche puis de gauche a ` 10. Cr eer un afcheur qui d eplace une seule LED allum ee de droite a droite. (utiliser linstruction rlf registre,f ) 9

Code ;-----------------------------------------------------------------------; ; BINCNT.ASM compteur binaire sur LEDs ( RB0 - RB4 ) ; ;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------; ; lignes utiles pour lassembleur ; ;-----------------------------------------------------------------------; LIST P=16F877 ; mod` ele de pic utilis e INCLUDE "p16f877.inc" ; include qui d efinit divers registres ;ERRORLEVEL -224 ; pour supprimer les warnings __CONFIG _PWRTE_ON & _HS_OSC & _WDT_OFF ; switchs de configuration ORG 0 ; d ebut du programme ;-----------------------------------------------------------------------; ; mettre tous les bits de portA et portB en sortie ; et donner sp ecifier la valeur du registre option ;-----------------------------------------------------------------------; a 0 clrf PORTA ; Sorties portA ` clrf PORTB ; sorties portB ` a 0 ???? ; selection de la banque 1 clrf TRISA ; portA en sortie clrf TRISB ; portB en sortie movlw B00000001 ; ; movwf OPTION_REG ; ecriture du registre option ???? ; s election de la banque 0 ;-----------------------------------------------------------------------; ; Programme Principal ; ;-----------------------------------------------------------------------; loop: incf PORTB, f btfss INTCON, T0IF goto $ -1 bcf INTCON, T0IF goto loop end ; ; ; ; ` portB ajouter 1 a attendre TOIF revenir ` a la ligne preced. mettre le flag dinterruption a 0

; fin du programme

10

You might also like