Sie sind auf Seite 1von 6

2

FLOT DE CONCEPTION

LEURS I NDUSTRIELS P ROGRAMMATION DES M ICRO C ONTR O TME1 : Prise en mains de lassembleur pic et des outils de developpement
ver 3.0 (2006) Licence Informatique Paris 6 / LI326

la programmation en assembleur du pic16, mais la methode est valable pour nimporte quel microcontr oleur. Il faut connaitre : le microcontr oleur et son langage dassemblage, les modules periph eriques internes et externes utilises, enements, ` la methode de prise en compte des ev et avoir une methode de programmation. La saisie du programme se fait avec un editeur classique. Comme tous les pro` grammes ont une structure commune, il est bien de fabriquer des modeles de programmes que lon adapte au besoin. Le but de ce premier TME est de vous ` qui setoffera faire ecrire un premier modele plus tard.

Objectif

Le but de ce premier TME est de vous faire une presentation progressive des outils ` simple, un chenillard, de developpement pic sur la base dun programme tres tes rapide. Nous dont vous allez construire et simuler 3 variantes, et plus si vous e nutiliserons pas la maquette au cours de ce premier TME.

2.3

Assemblage

2
2.1

Flot de conception
Les outils

Le but dun assembleur est de traduire un programme ecrit sous forme dune sequence dinstructions simples et de sauts conditionnels ou pas, en code ma Un programme source est constitue dun chine pour un processeur donne. chier avec lextention .asm (par convention pour le pic), chier qui peut en inclure dautres avec les extentions .asm ou .inc (encore par convention). ` la Lassembleur est un langage plus complexe quil ny parrait au depart. A

On peut distinguer 5 etapes pour la conception dun programme en assem` chaque etape. bleur, avec des rebouclages a tapes E Outils utilises

de lignes comportant au plus base, un programme en assembleur est constitue une instruction. Une ligne se decoupe en quatre colonnes : ` colonne commence en tout debut 1. la premiere de ligne et contient au plus un mot. Ce mot, que lon appelle aussi symbole ou etiquette, est associe ` une valeur numerique a representant le plus souvent ladresse de la case courante. On peut aussi attribuer de linstruction ou de la donnee memoire ` une etiquette. une valeur quelconque a ` ` un espace ou une tabulation, elle 2. la deuxieme colonne commence apres contient le plus souvent une instruction, mais elle peut contenir une directive, dont on verra le r ole un peu plus loin. Les instructions, comme les ` directives peuvent avoir des parametres en nombre quelconque mais xe. Pour ce TME, vous allez utiliser quelques instructions et quelques directives, en annexe. lesquelles sont donnees ` de la seconde par un espace ou une 3. la troisieme colonne est separ ee tabulation et contient la designation des operandes (sil y en a) associees ` linstruction. a

1. specication et saisie du programme . . . . vi ou emacs 2. assemblage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gpasm 3. simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gpsim 4. chargement du code dans le C. . . . . . . . . picprog + programmateur 5. test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . maquette pic16F877

2.2

Specication

` Lanalyse du probleme est une etape necessaire quelque soit le langage de Toutefois, dans le cas dun systeme ` et en parprogrammation utilise. embarque tre fa ticulier dans cas dun microcontr oleur, lanalyse ne peut e te correctement et du materiel que si on a une connaissance precise du microcontr oleur vise leurs industriels a qui lenvironne. Le module programmation des microcontro pour but de vous donner une methode de travail vous permettant daborder

TME1 : M ODULE MICRO

VER

3.0 (2006)

TRAVAUX PRATIQUES

` ` commence par un ; et sacheve ` 4. la quatrieme colonne et derniere au re` tour chariot. Elle contient un commentaire. Les commentaires sont tres importants en assembleur. Mais, il ne sagit pas de decrire le comporte ment de chaque ligne, mais de decrire lalgorithme et la fac on dont on ` ` dont on passe les parametres ` lutilise, cest-a-dire la maniere et ce quil en fait. Une fois quun programme est ecrit, on utilise un logiciel assembleur, ici gpasm, qui produit essentiellement trois chiers: .hex .cod .lst ` ecrire code machine a dans la memoire programme du processeur. au simulateur. code machine plus des informations sur le source destine contenant un journal de lassemblage.

3
3.1

Travaux pratiques
Mise en place de lenvironnement

Pour bash, ajouter dans le chier $HOME/.bashrc . ~encadr/micro/env/micro.env.bash Pour tcsh, ajouter dans le chier $HOME/.tcshrc source ~encadr/micro/env/micro.env.tcsh ` la variable PATH, le chemin ou Le but principal de ce script est dajouter a ` se trouve les outils de developpement pic. Ne recopiez pas le script dans votre compte car celui-ci va evoluer en cours dannee. Vous allez maintenant creer un repertoire micro dans votre HOMEDIR mkdir ~/micro ; cd ~/micro mkdir tme1 ; cd tme1 Vous creerez ensuite un repertoire par projet ` ecrire, Pour ce premier TME, vous avez trois programmes a plus deux autres tes rapide. si vous e mkdir hello1 hello2 hello3 Placez-vous enn dans hello1 et editez le chier hello1.asm cd hello1 ; vim hello1.asm

2.4

Simulation

a ` e tre execut sur un pic, mais il est tres ` difcile Un programme pic est destine e de faire une mise au point directement sur le pic, car il nest normalement pas possible dafcher letat de la memoire en cours dexecution du programme. Pour faire la mise au point on utilise donc un simulateur, qui se comporte comme ` pas et montre letat le pic mais qui permet une execution en pas a des registres ` chaque instant. Le simulateur que vous allez utiliser sappelle gpsim et vous a ` utiles pour la mise au point des programmes. verrez quil permet des choses tres Notez toutefois que le pic dispose dun mode de fonctionnement qui permet de ` chaque instruction pour lire les registres internes. Il existe aussi des le stopper a emulateurs de pic qui se comportent comme des pic mais qui permettent de ` tout momment ou apres ` quune condition soit realis lire les registres a ee. Nous nutiliserons pas ses possibilites.

3.2

Le premier programme

Lobjectif de ce premier programmme est de realiser un chenillard sur les 8 bits ement, ` 1, et les autres sont mis a ` du port D. Plus precis un bit du port D est mis a ` gauche ou a ` droite, jusqua ` ce quil disparaisse pour se 0, puis le 1 se deplace a ` lautre extremit retrouver dans le bit carry du registre STATUS, et reapparaisse a e du port D. Le programme que nous allons ecrire ne respecte pas les conventions decriture pic (pourtant obligatoire), mais ce na ici aucune importance, le simulateur va quand m eme laccepter. Votre programme fait les choses suivantes: 1. Placer le PORTD en sortie, en ecrivant dans le registre TRISD. 2. Mettre la valeur 1 dans le bit 1 du PORTD. 3. Faire une rotation du registre PORTD. ` letape 4. Boucler a 3 (le programme ne sarr ete jamais). Le code du programme se trouve en annexe. Vous devez le recopier, intelligem` ment (c.-a-d. en comprenant ce que vous fa tes), lassembler et le simuler pas ` pas en observant bien les changements detat a des registres.

2.5

Tests

Les tests reels se font directement sur le processeur. Pour que ce soit possible, il faut que le processeur dispose dune memoire speciale pour le code machine, a ` un materiel, et quun programme associe que lon nomme un programmateur, puisse envoyer le code issu de lassembleur dans le processeur. Le pic que vous utilisez dispose dune memoire ash pour le programme et a la de se faire reprogrammer en place (sans devoir le retirer de la plaque). capacite par le logiciel picprog. Le programmateur utilise le port RS232 du PC et est pilote

5 Pour

TME1 : M ODULE MICRO

VER

3.0 (2006)

TRAVAUX PRATIQUES

3.3.1 Les noms symboliques de registres Le pic dispose dun grand nombre de registres speciaux permettant dacceder dans aux ressources internes. Ces registres portent des noms et sont present es la documentation technique du processeur (page 13[feuille 2 verso]). On peut mais au detriment et de la bien s ur utiliser directement leur numero de la lisibilite du programme. Cest pourquoi, pour chaque pic, il existe un chier portabilite contenant la denition des noms symboliques de chaque registre special. Ce tre utile dindiquer le chier est inclus par la directive include. De plus, il peut e nom du processeur cible dans le programme, ceci se fait par la directive list. Il est alors inutile de donner le nom du processeur lors de lassemblage. list p=16f877 include "p16f877.inc" ; definit le processeur cible ; declaration des noms de registres

1. faire lassemblage vous utilisez la commande gpasm. gpasm -pp16f877 hello1.asm 2. simuler vous utilisez gpsim. gpsim -pp16f877 -shello1.cod ` simple dans le repertoire Mieux, vous allez ecrire un Makele tres hello1, avec trois cibles .PHONY a, s et c, qui realise respectivement lassemblage, le lance ` partir de la sement du simulateur, et le nettoyage du repertoire. Notez qua maine prochaine vous utiliserez un script pour lassemblage. Fichier Makefile dans le repertoire hello1 : .PHONY: a s c F=hello1 a:; gpasm -pp16f877 $(F).asm s:a; gpsim -pp16f877 -s$(F).cod c:; \rm *.cod *.hex *.lst 2> /dev/null || true Vous allez voir que gpasm donne des messages lors de lassemblage. Ici, gpasm un changement de banc vous demande de verier que vous avez bien effectue memoire (initialisation des bits RP0 et RP1 du registre STATUS) avant dacceder en hexadecimal au registre 0x88. En effet, 0x88 est une adresse exprimee (notation 0x) (ou b10001000 en binaire) or seuls les 7 bits de poids faible de cette dans linstruction. Ces 7 bits sont complet es avec les 2 bits adresse sont codes ` que votre programme fonctionne, passez au RP0 et RP1 du registre STATUS. Des suivant. Ne fa tes pas trop dessais avec gpsim sur hello1, si vous le fa tes tourner le processeur cortrop longtemps, gpsim plante car vous navez pas congure rectement.

3.3.2 La conguration du processeur ` ladresse 0x2007 dans la Le processeur dispose dun registre de conguration a memoire de programme permettant de lui donner certains comportements par ticuliers. Par exemple, on peut proteger en lecture la memoire de programme, proteger en ecriture la memoire data eeprom, demander la mise en place du de ce chien de garde ulterieurement), watchdog timer (nous verrons lutilite etc. ` la page 120[feuille 13 recto] de Vous trouverez le detail de cette conguration a la documentation technique 16f877. Pour demander une conguration partic` vous devez utiliser la directive __CONFIG de gpasm. En fait, vous utiliserez uliere presque toujours la m eme conguration quel que soit vos programmes (sauf cas particulier), en loccurence vous ajouterez en t ete de vos programmes (au ` linclude et le list. debut de hello2.asm), mais apres ; Definition du registre de configuration du pic ; _CP_OFF : le code nest pas protege et peut e ^tre relu ; _WDT_OFF : pas de timer watch dog ; _PWRTE_ON : attente dun d elai de 72ms apres le power on ; _HS_OSC : le pic utilise un oscillateur a ` quartz ; _LVP_OFF : pas de mode programmation basse tension __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF ` avoir fait lassemblage, ouvrez le Pour voir, leffet de cette commande, apres chier hello2.lst, faites le decodage binaire du contenu de ladresse 0x2007 et veriez page 120[feuille 13 recto].

3.3

Le second, pareil mais en mieux

Le premier programme ne fait pas trois choses qui sont pourtant indispensables dans un programme. 1. lutilisation des noms symboliques des registres et champs du pic utilis e. 2. la conguration du processeur. 3. la programmation du gestionnaire dinterruption. Vous vous placez dans le repertoire hello2, et vous recopiez en le renommant le chier hello1.asm en hello2.asm et le Makele. Vous allez ensuite faire les modications de ce programme suivant les indications qui vous sont donnees dans la suite.

TME1 : M ODULE MICRO

VER

3.0 (2006)

TRAVAUX PRATIQUES

3.3.3 La programmation du gestionnaire dinterruptions Le pic16f877 reserve deux adresses pour les interruptions, ladresse 0 et ladresse pour linterruption reset, ladresse 4 est utilisee pour les 4. Ladresse 0 est utilisee interruptions normales (hors reset). Linterruption reset nest pas masquable, elle survient pour differentes raisons denies par le mot de conguration. Dans tous les cas, le programme en cours ` ladresse 0. Le registre STATUS permet de dexecution sinterrompt et le pic va a Les raisons sont entre savoir la cause pour laquelle le code du reset a demarr e. autres: ` 0 la broche du pic correspondante. On active le signal MCLR, en mettant a e detectee. Une baisse de tension dalimentation a et au watchdog a debord Le compteur associe e. Linterruption normale du pic16f877 survient pour 14 causes differentes. Ces in terruptions sont masquables. Nous les verrons en detail plus tard. Dans tous les ` ladresse cas, le programme en cours dexecution sinterrompt et le pic va a 4. Differents registres permettent de connaitre la ou les causes de linterruption. utilisent les interruptions, il Quoi quil en soit, comme tous les programmes reels ` cet usage. faut reserver ladresse 4 a ` a ` ce qua ` Modiez votre programme, en utilisant la directive ORG, de maniere ` une routine INITIALISATION qui mette le port D ladresse 0, on fasse un appel a en sortie, puis fasse un goto au programme MAIN qui realise le chenillard sur le ` linstruction retfie. port D. La routine dinterruption sera reduite a Ce programme se trouve egalement en annexe. Essayez de ne pas regarder la correction tout de suite !

de registre (entre 0 et 511[0x1FF] ou plus simplement sous sa forme symnumero bolique) et qui initialise les bits RP0 et RP1 du registre STATUS en fonction du du banc du registre. Entre 0 et 127[0x7F], les bits RP1 et RP0 sont mis numero ` 0 ; entre 128[0x80] et 255[0xFF], les bits RP1 et RP0 sont mis respectivement a ` 0 a et 1 ; entre 256[0x100] et 383[0x17F], les bits RP1 et RP0 sont mis respectivement ` 1 et 0 ; enn entre 384[0x180] et 511[0x1FF] les bits RP1 et RP0 sont mis tous les a ` 1. deux a Recopiez en le renommant le chier hello2.asm en hello3.asm dans le repertoire hello3, ainsi que le Makele, puis utilisez la macro BANKSEL avant dutiliser TRISD et PORTD et denissez la macro : MOVLF <v>,<r> . . place la valeur litterale <v> dans le registre <r>.

3.5

La suite...

Une macro et deux programmes ` creer un repertoire Pensez bien a par programme. SETRP <r> ` BANKSEL, initialisant les bits RP0 et RP1 du bit macro equivalente a ` partir des bits 7 et 8 du numero du registre <r>. Linter et de STATUS a cet exercice est de vous faire utiliser les tests (if) dans les macros. ` faire cette macro, lisez bien Notez que si vous ne parvennez pas a ` la section decrivant les macros de gpasm. Les macros sont tres utiles, il serait dommage que vous vous en priviez. une variante de hello3 avec un test en plus. ` 1, de gauche Vous devez faire un balayage du port D avec le bit a ` droite puis de droite a ` gauche. Pour cela, ` il vous faut faire un test a tes au bit 0 (a ` droite) ou au bit 7 (a ` gauche) an pour savoir si vous e de changer de sens de decalage. Vous devez utiliser un registre pour gerer le balyage, utilisez le registre 0x20.

k2000

3.4

` Le troisieme, le m eme avec des macros

sans doute, lassembleur pic est tres ` frustre. Il y a peu Comme vous lavez note ` la fois, un avantage car il y a dinstructions et celles-ci font peu de chose. Cest a ` apprendre et un inconvenient peu de choses a car le texte des programmes est assez long et donc source derreur. Pour ameliorer un peu les choses, vous pou ` simple vez denir des macros instructions (d tes simplement macros). Il est tres une macro, vous trouverez plusieurs exemples dans la doc de gpasm de creer ` partir de la page 8). Vous aurrez inter et a ` ajouter a ` gpasm loption -e OFF (a lorsque vous simulez un programme avec des macros. ` e integr ees a ` lassembleur gpasm. Certaines macros, particulierement utiles, ont et ` Cest le cas de la macro BANKSEL <r> qui prend comme parametre <r> un

k2000 onoff k2000 mais le balayage depend de la valeur de la broche B0. Si B0 vaut 0, on stoppe le balayage, si B0 vaut 1 on reprend. ` aller chercher dans la doc de gpasm Et une reponse a pour la representation Comment denit-on la base utilisee des nombres dans un programme assembleur pic ?

TME1 : M ODULE MICRO

VER

3.0 (2006)

ANNEXES

10

Annexes

hello1
; ; ; ; ; ; ; ; ; -----------------------------------------------------------------------programme : hello1 Date : 20050105:2221 Version : 1 Auteurs : franck Notes : - ce programme est volontairement petit et ne fait appel a aucun fichier - Il ne doit pas etre consid er e comme un mod` ele pour dautres programmes -----------------------------------------------------------------------; ces deux lignes permettent de s electionner le bank n 1 bcf 0x3,6 ; STATUS(RP1) <- 0 bsf 0x3,5 ; STATUS(RP0) <- 1 pour d esigner le banc 1 ; programme le PORTD en sortie clrf 0x88 ; place tous les signaux du port D en sortie ; on change a ` nouveau de bank bcf 0x3,5 ; STATUS(RP0) <- 0 revient sur le banc 0 ; on place 1 dans le registre reli e au port D movlw 1 ; movwf 0x8 ; met 1 sur le bit 0 sur port D loop ; rotation vers la droite sur 9 bits car utilise le bit carry rrf 0x8,f ; rotation vers la droite du port D ; on boucle sans fin goto loop ; on boucle sur la rotation ; -----------------------------------------------------------------------END ; directive de fin de programme

` ce TME pour commencer Instructions et Directives necessaires a


tre sufsante pour resoudre La documentation fournie pour ce module devrait e ` Nous vous detous les problemes que nous vous poserons au cours de lannee. mandons instamment de prendre le temps de la lire, non pas pour lapprendre erer par coeur mais pour savoir vous y ref le moment venu. Toutefois, comme ` titre vous navez sans doute pas encore eu le temps, nous vous fournissons, a exceptionnel, un extrait de ce dont vous pourriez avoir besoin.
` partir de ladresse <n>. ORG <n> . . . . . . . . . . directive : place le code qui suit a END . . . . . . . . . . . . . . . directive : achevant un programme en assembleur. movlw <l> . . . . . . . . instruction : met la valeur <l> dans le registre w. movwf <r> . . . . . . . . instruction : met le contenu du registre w dans le regsitre <r>. ` droite sur 9 bits (avec la carry) du regrrf <r>,<d> . . . . . .instruction : fait une rotation a istre <r>, met le resultat dans le registre w si <d> egale 0, et dans le registre <r> si <d> egale 1. ` gauche sur 9 bits (avec la carry) du rlf <r>,<d> . . . . . .instruction : fait une rotation a registre <r>, met le resultat dans le registre w si <d> egale 0, et dans le registre <r> si <d> egale 1. ` 0. bcf <r>,<b> . . . . . .instruction : met le bit <b> du registre <r> a ` 1. bsf <r>,<b> . . . . . .instruction : met le bit <b> du registre <r> a btfss <r>,<b> . . . instruction : test le bit <b> du registre <r>, saute linstruction suivante si ` 1. ce bit est egal a emente decfsz <r>,<d> . . instruction : decr <r> (resultat dans <r> si <d>==1 ou resultat ` 0. dans w si <d>==0), saute linstruction suivante si r esultat egal a ` 0 le registre <r>. clrf <r> . . . . . . . . . instruction : met a ` ladresse <l>. goto <l> . . . . . . . . . instruction : saute a ` <l>. call <l> . . . . . . . . . instruction : sauve ladresse de retour dans la pile et saute a return . . . . . . . . . . . instruction : restaure ladresse de retour de la pile. retfie . . . . . . . . . . . instruction : restaure ladresse de retour de la pile et d emasque les interruptions. PORTB. . . . . . . . . . . . registre : etat des broches du PORTB PORTD . . . . . . . . . . . registre : etat des broches du PORTD 0=sortie TRISD . . . . . . . . . . . . . registre : direction du PORTD, pour chaque bit : 1=entr ee, STATUS . . . . . . . . . . . registre : mot d etat principal du PIC

11

TME1 : M ODULE MICRO

VER

3.0 (2006)

4.1
; ; ; ; ; ; ; ; ;

hello2

------------------------------------------------------------------------programme : hello2 Date : 20050105:2231 Version : 1 Auteurs : franck Notes : - ce programme a le m^ eme comportement que hello1 mais il r eserve lusage des adresses 0 et 4 pour le reset et linterruption ------------------------------------------------------------------------list p=16f877 include "p16f877.inc" ; definit le processeur cible ; declaration des noms de registres

; Definition du registre de configuration du PIC ; _CP_OFF : le code nest pas protege et peut etre relu ; _WDT_OFF : pas de timer watch dog ; _PWRTE_ON : attente dun d elai de 72ms apres le power on ; _HS_OSC : le pic utilise un oscillateur a ` quartz ; _LVP_OFF : pas de mode programmation basse tension __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF ORG call goto ORG retfie initialisation bcf bsf clrf bcf return main movlw movwf loop rrf goto PORTD,f loop ; rotation vers la droite du port D ; on boucle sur la rotation 1 PORTD ; ; met 1 sur le bit 0 sur port D 0 initialisation main 4

STATUS,RP1 STATUS,RP0 TRISD STATUS,RP0

; ; ; ;

STATUS(RP1) <STATUS(RP0) <place tous les STATUS(RP0) <-

0 1 permet de d esigner le banc 1 signaux du port D en sortie 0 revient sur le banc 0

; -----------------------------------------------------------------------------END ; directive de fin de programme

Das könnte Ihnen auch gefallen