Elektronikai szakportal- minden ami elektronikai. programok, elektronikai programok, elektronikai segedprogramok, elektronikus programok, hangfalak, hangfaltervezes, hangfaltervezo, hangfaltervek, kapcsolasok, kapcsolasok, kapcsolas, elektronikai kapcsolas, kapcsolas, kapcsolasi rajzok, kapcsolasi rajzok, bekotesek, kapcsolasi rajz gyujtemeny, bekotesi rajzok, forum, elektronikai forum, elektronikai szakforum, szakforum, cikkek, elektronikai cikkek, elektronikus cikkek, elektronikai leirasok, hirek, elektonikai hirek, hirek az elektronika vilagabol, elektronikai hirek
PIC PROGRAMOZÁS II. LED VILLOGTATÁS
Olvasóink értékelése: / 64
ElégtelenKitűnő 
Írta: Fábián Kristóf   
2010. április 13. kedd, 16:09

 

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

Hozzászólások
Hozzáadás Keresés
TOMO007   |84.236.96.xxx |2011-05-01 13:13:58
HOGY LEHETNE 2DB HÉTSZEGMENSES KIJ. VEZÉRELNI PL. 1-15-IG SZÁMOLJON?
Poostmaster  - javaslat   |85.67.225.xxx |2010-10-09 19:15:37
Igen tetszik, hogy rövid, és lényegretörő a cikk. Könnyebben érthető. Azt azárt javasolnám, hogy ha nem tudod
egy kifejezés jelentését, akkor ne használd. Magyarul úgyis érthetőbb.
kristof   |Author |2010-09-21 22:10:26
D - a decimálisra utal (10-es számrendszerbeli szám) a '' közé pedig beírod azt a számot amivel számolni akarsz,
jelenesetben a 10.
Az idő részt úgy kell igazából értelmezni, hogy a 10ből mindig kivonunk egyet, ami ugyebár
művelet, és ez a művelet időbe telik. Addig tart a kivonás, amíg 0 nem lesz az eredmény, így
értelemszerűen,minél nagyobb számot írunk be, annál nagyobb idővel tudunk késleltetni. Mivel itt LED-et akarunk
villogtatni ezért kell egy idő amíg világít majd nem világít és az idő szubrutinban tudjuk beállítani ezt az
időtartamot.
edem  - kérdés   |80.99.210.xxx |2010-09-11 21:40:23
Az idő részhez lenne kérdésem! D'10-et honnan lehet tudni? Illetve, hogy kell értelmezni?
Választ előre is
köszi!
Sparky   |79.121.106.xxx |2010-07-19 14:43:03
A literális érték állandót jelent. Lehet az például egy szám.
kristof  - .   |Author |2010-06-16 17:35:33
Literál. Az egy érték. A pontosdefinícióját nem tudom, de információtartalma van, mintpl D'10' ez a decimális
számrendszerben a 10-es szám a B '00000001' ez már bináris számrendszer átváltva 10esre értéke 1. Ebben a
programban a MOVLW D'10'sorral a decimális 10-et(vagyis egy literált) bemozgatjuk a W-be azaz a munkaregiszterbe.
Agger   |91.135.113.xxx |2010-06-15 18:40:59
Hello! Hát ezek nagyon király cikkek, így már elég sok mindent értek Egy kérdésem van: mi az a literált?
Köszi
kristof   |Author |2010-04-14 18:51:23
Persze! Hisz ez lenne a cél, hogy szépen lassan egyre bonyolultabb programokkal ismerkedhessenek meg a PIC-ezni
vágyók. A nyomógombkezelés a következő cikk lenne, úgyhogy nemsokára az is meglesz!
Josza   |Author |2010-04-14 17:42:00
Hello,
Nagyon jók a PIC-es cikkek! Ha kérhetném egy egyszerű nyomógombvezérlést is leírnál?
Hozzászólás
Név:
Email:
 
Tárgy:
UBBKód:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 

Rólunk. | .Impresszum. | .Használati feltételek. | .Kapcsolat. | .Támogatónk a SzerverPlex.hu