Fórum témák
» Több friss téma |
Cikkek » PIC-ekről kezdőknek PIC-ekről kezdőknek
Szerző: mspike, idő: Jan 10, 2006, Olvasva: 94352, Oldal olvasási idő: kb. 2 perc
A következőkben egy példaprogramot mutatok be, időhiánymiatt nem tudom bemutatni az MPLAB programot, de nagyjából megfelel egy sima szövegszerkeztőnek, az ICD2-höz való tudás pedig megtalálható abban a cikkben, illetve az ajánlott irodalomba. A JDM-hez tartozó irodalom is megtalálható a másik cikkben.
Az itt található példaprogram eredeti verzióját a UMSZKI tanárai írták, utólagos engedelmükkel felhasználom, itt és most oktatási célokra.
A program egyszerű oda-vissza futófényt valósít meg a pic PORTC kimenetén. (8biten) Nézzük hát a forráskódot : 00 Pic definiálása 01 Include file behozatala, ebből tudja a fordító, hogy pl. a PORTC mit is jelent 02 A fordító a 3. programrekesztől kezdi el feltölteni a memóriát, erre itt azért volt szükség, mert egy speciális úgynevezett downoladerrel töltötték le a programokat a suliba mely elfoglalja az első három memória rekeszt. ICD2 nél érdemes az első parancsnak egy NOPot tenni. 03 Kiválasztjuk a TRISC regiszter bankját. (Memória szervezés, regiszterek bankokban !!) 04 betesszük a W-be 00h értéket (itt binárisan megadva) 05 betesszük a W-t TRISC-be, itt jól látszik a kétlépcsős értékadás. Egy konstans a W-be majd az a regiszterbe, 16-os piceknél ezt így lehet csak ! Másfelöl még nem tárgyaltuk a regiszterek jelentését, de a TRISx regiszter mindig a portok irányát állítják. Ha nullát írunk valamelyik bitre akkor annak a portnak az adott lába kimenet lesz, ha 1-et akkor bemenet, és ezt menet közben bármikor állíthatjuk ! 06 Kiválasztjuk a PORTC bankját 07 Kezdőértéket teszünk a W-be 08 Majd átadjuk PORTC-nek itt már két led világít ! (a középső kettő, a bináris értékadás jól szemlélteti !!) 09 balra forgatjuk a PORTC-t, ezzel máris lépett egyett a futófény balra 10 meghívjuk a var rutint, mely egy tipikus késleltető rutin ! 11 Megvizsgáljuk a PORTC legmagasabb 7. bitjét (0-7 így jön ki a 8bit) ha ez egyes akkor elértünk a szélére és tovább, ha nem akkor vissza BALRA cimkére, tehát ez egy ciklust alkot, addig tolja balra míg el nem éri a szélét, ha elérte kihagyja a 12-es sort 12 visszaugrás a BALRA cimkéhez 13 elkezdjük jobbra forgatni a biteket 14 meghívjuk a várakozó rutint. 15 ugyan olyan ellenőrzés mint az előbb csak most a legkissebb biten 16 ugyancsak az ugrás csak itt a Jobbra cimkére 17 ugrás a balra forgatásra, ha elértük a jobb szélét 18 varakozó rutin megvalósítása, W-be kezdoertek 19 kommentek 20 W értéke TIMERL regiszterbe. A program elején található egy szakasz mely nem lett megsorszámozva, CBLOCK ... ENDC. A CBLOCK egy a fordítónak szánt valami, ami a 0x80 címtől lefele annyi regiszternek ad "virtuális nevet" ahány nevet beírunk, ezekre a regiszterekre késöbb immár a nevükkel hivatkozhatunk. 21... 31 Itt ezt a szakaszt egybeveszem, szerintem elég ha funkcionálisan elmagyarázom : a lényeg, hogy 3 egymásba ágyazott ciklust látunk, melyek változói a TIMERL TIMERH és TIMERM. Ezen ciklusok lefutási ideje határozza meg a várakozás mértékét, tehát ha lassítani akarjuk a futást, akkor elég pl. az első 18. sorban lévő értéket magasabbra átírni. 32 return utasítás amely mutatja, hogy vége a subrutinnak, és pic autómatikusan visszaugrik a CALL utásítás utáni sorra. Fontos, hogy akárhány subrutint nem ágyazhatunk egymásba. Ezek maximális szám a az úgynevezet STACK mélységével egyenlő. Egy-egy subrutin híváskor a STACKben tárolódnak el a környezeti változók, mint a programszámláló. Folyt köv. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |