|
Dávid már írt egy cikket és pár alapbeállítást elmagyarázott az OSHON PIC simulatorral kapcsolatban. Én is ezt fogom használni, szóval ezzel nem is szeretnék foglalkozni. A cikket itt lehet elolvasni: link
Akkor kezdjünk is neki!
LED villogtató program:

1. Kezdjük a program elsőrészével:

Az 1. sorban egy memória területet foglalunk le a 0x20-as memória címen. Igazából ezt a sort változó deklarálásaként is felfoghatjuk. A későbbiekben az X-el fogunk hivatkozni erre a memória terültre.
A 2. sorban beállítjuk azt hogy milyen címről induljon a PIC. Ezt a beállítást minden alkalommal meg kell tennünk.
A 3. sorban egy ugróutasítás található. Itt a BEALLITAS címkére fogunk ugrani.
2. Beállítások

A BEALLITAS címke után BANK-ot váltunk. ( BANKSEL TRISB ) Ezután kimenetnek beállítjuk a PORTB 0-ik bitjét, majd ismét BANK-ot váltunk. ( BANKSEL PORTB ) A CLRF PORTB sorral letöröljük a PORTB-t. Ezt azért kell megtenni, hogy kiküszöböljük a véletlen memóriatartalmat. Tehát most van egy darab kimenetünk a PORTB 0-ik bitje.
3. Főprogramrész

A beállítások után következik a főprogramrész. A BSF PORTB,0 utasítással 1-esbe állítom a PORTB 0-ik bitjét, tehát a LED világítani fog. Mivel villogtató programot írunk ezért szükségünk van egy meghatározott időre. Ezt az időt a IDO szubrutin megírásával tehetjük meg. Ezt a szubrutint meg kell hívnunk, amit a CALL IDO sorral teszünk meg, ezután a programunk az IDO címkére fog ugrani.
4. Idő

A MOVLW D'10' utasítással egy literált mozgatunk a munkaregiszterbe. Jelenesetben a decimális 10-et, de ezt megadhatjuk binárisan is (pl. B '00001010') és hexadecimálisan is. Ezután a 17-ik sorban ezt az értéket az X címkével ellátott memóriaterületre rakjuk. Tehát most a munkaregiszter felhasználásával egy értéket mozgattunk egy memóriaterületre. A MOVWF utasítást sokszor használjuk. Itt a munkaregiszterből másolunk egy FLAG-be. Ennek a fordítottja a MOVFW, ahol a munkaregiszterbe mozgatunk a FLAG-ből. A következő sorban a DECFSZ utasítást használjuk. Ebben a sorban az történik, hogy az X memóriaterületen lévő értékből kivonunk egyet és ha az eredmény 0, akkor a következő sort átugorjuk. Jelenesetben 10 az X értéke tehát a következő sort nem ugorjuk át, hanem a GOTO IDE utasítással az IDE címkére ugrunk és újból kivonunk egyet az X-ből, melynek az értéke már 9. Ez addig folytatódik, amíg 0 lesz az eredmény és ezután a RETURN utasítással visszatérünk a főprogramrészünk következő sorába.
/Az idő megírásakor figyelembe kell vennünk azt, hogy mekkora kvarcunk van. Ha 4Mhz-es kvarcot használunk akkor egy ciklus 0,25usec alatt hajtódik végre. Tehát ha később nagyobb időre lesz szükségünk ez alapján ki lehet számolni./
4. Visszatérés a főprogramrészbe

Újra a főprogramrészben vagyunk és a következő utasítás a BCF PORTB,0. Itt 0-ra állítjuk a PORTB 0-ik bitjét(LED nem világít). Ezután ismét meghívjuk az IDO szubrutint, majd a visszatérés után a GOTO FOPROGRAMRESZ utasítással ez az egész folyamat kezdődik elölről és a végtelenségig fog tartani.
Ezután a szimulátorba töltjük a programot, megnyitjuk a Tools menüben a 8X LED board-ot, beállítjuk, hogy a PORTB lehessen látható, és elindíthatjuk a programunkat.
Ha további cikkekre is igényt tartotok, akkor hozzászólással jelezzétek!
Jó programozást kívánok!
Fábián Kristóf
|