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 - ALAPOK
Olvasóink értékelése: / 130
ElégtelenKitűnő 
Írta: Regényi Dávid   
2010. április 07. szerda, 13:35

 

Én most nem szeretnék belemenni a PIC lelki világába, felépítésébe, erre már született éppen elég cikk. Észrevettem, hogy egy program megírását nem magyarázzák el kellő képpen, így azt elsőre megérteni szinte lehetetlen. Ezért én kicsit hétköznapibban próbálom megközelíteni a dolgot, azzal a céllal, hogy az abszolút kezdők is megértsék, miről is van szó.

Első nekifutásra töltsük le az OSHON PIC simulator szoftvert, ide kattintva.

Ami nekünk ebből lényeg az a Mikrokontroller, illetve a Clock Frequency. A mi esetünkben ez legyen a 16f877-es illetve 4 MHz-es Kvarc.

Ctrl+A paranccsal, behozhatjuk az asm ablakot, ahol elkezdhetjük a programunkat írni.

Amit fontos tudni:

Pontosvesszőt, ( ; ) nem veszi figyelembe program futásakor.

Azaz ha csinálunk egy ilyen sort: ;xy-nak hívnak, szeretem az elektronikát stb...

Egész nyugodtan odaírhatjuk, ettől nem vétettünk hibát. A PIC nem fogja figyelembe venni az ilyen sorokat, egyszerűen átugorja.

Egy pdf állományba összeválogattam a fontosabb utasításokat ez letölthető ITT.

Nem húzom tovább az időt, kezdjük el írni a programunkat.

 

Program:

Első dolgunk átgondolni mit is szeretnénk. Az első sorban lefoglaltam egy memóriaterületet annak, hogy itt tudjak a későbbiekben számolni. Ez a számolás azért kell, hogy a LED-ek ne csak felvillanjanak, hanem egy darabig világítsanak is. Így lesz tulajdonképpen látható a folyamat.

Ehhez az EQU parancsot használtam, és a 20-as memóriaterületet foglaltam le. Az (A) betű csak az elnevezése. Oda bármit írhattam volna, de mi most írjunk A-t.

ORG 0 paranccsal alaphelyzetbe állítom a PIC-et, ezt minden program elején tegyük meg.

GOTO utasítás oda ugrik, ahova megadom neki. Jelen esetben a BEÁLLÍTÁSOK-hoz fogunk ugrani, ahol definiáljuk a ki illetve bemeneteinket.

Ha még nem tettem volna, akkor most elmondom, hogy a különböző programrészeket érdemes valamiféle kép elválasztani egymástól. Ezt én így szoktam: ;--------------, de ezt mindenki fantáziájára bízom, a lényeg hogy a pontosvessző is ott legyen.

Első paranccsal tulajdonképpen semmit nem csinálok, megszokásból írom, letörlöm a B portot, hogy az is "alaphelyzetbe" kerüljön.

BANKSEL utasítással a BANK-ok között tudunk váltani. Erre azért van szükség, mert ahhoz, hogy kimenetnek vagy bemenetnek definiáljam a port-okat, a BANK1-be kell lépnem (ezt adatlapból meglehet nézni).

A TRISB a BANK1-be van, így ha a BANKSEL utasítás után a TRISB-t írom, jó helyre kerülök.

Akkor kimenet egy láb, ha azt 0-ba helyezem. Ezt meglehet tenni lábanként, is: BCF TRISB,0

Ekkor a portb, 0 lesz kimenet. Ezt viszont 1 paranccsal is megtehetem úgy, hogy törlöm az összest, így tulajdonképpen mindet 0-ba állítottam, ezért az összes kimenet lesz.

Ahhoz, hogy tovább tudjak menni, vissza kell lépnem BANK0-ba, ezt a már említett BANKSEL utasítással tudom megtenni, mellé pedig a PORTB-t írjuk.

Ehhez a programhoz mindent beállítottunk, amit kellett. GOTO Program utasítással továbbugrok a Fő programomhoz.

A program első ránézésre tűnik csak bonyolultnak, ha kitárgyaltuk barátságosabb lesz.

Ebből tulajdonképpen 3 sort kell megbeszélnünk, bizonyára észrevettétek a többi csak ismétlődik.

A PIC minden tevékenységet egy úgynevezett Munkaregiszterben hajt végre, legalább is ezen keresztül kell megtennünk,amit szeretnénk. Ennek a jele: W

MOV utasítás mozgatást jelent, az F pedig Flag-et, aminek az értéke 1.

Első utasítással, bemozgatunk munkaregiszterbe egy bináris számot. Látható, hogy ez 4 bites, ebből már lehet következtetni, hogy ez valószínű a 4 kimenetünk lesz.

A következő, amit meg kell tennünk, hogy kimozgatjuk a munkaregiszter tartalmát a B portra. Ha ezt megtettük, a PIC ki fogja ezt szépen sorba helyezni, RB.0-RB.3-ig.

Tehát :
RB.0 1

RB.1 0

RB.2 0

RB.3 0

Ezután behívunk egy úgynevezett szubrutint, ez a fő programtól független programrészlet, amelyet a CALL utasítással tudunk behívni a programunkba. Jelen esetben a rutin neve IDŐ, ezért lesz az utasítás: CALL IDŐ

Itt bemozgatunk egy Decimális számot a munkaregiszterbe, onnan pedig átmásoljuk a programunk elején erre a célra lefoglalt A nevű memóriaterületünkre.

A DECSZ utasítás azt csinálja, hogy addig vonogat egy értékből, míg az 0 nem lesz, és ha 0, akkor átugorja a következő utasítást.

Jelen esetben az A értéke 50. Ebből levon 1-et, az eredmény nem 0, ugrik a következő utasításra, ami visszairányítja újra a DECFSZ-hez. Az X helyére bármi írható, ez jutott először eszembe.

Ha szépen levonogatott az 50-ből mindaddig, míg az eredmény nem lett 0, akkor átugorja a GOTO utasítást, a következő pedig a visszatérés a szubrutinból=RETURN.

Ezzel vége is a programunknak, de a végére ne felejtsük odaírni az END -et.

Ha mindent pontosan így írtatok be, és követtétek a tanácsaimat, akkor nyomjunk F8-at.

Ha elmentettük, lefuttat egy hibakeresést. Ennek természetesen a következőképp kell kinézni.

Nézzünk egy példát, hibára.

 

Ami ebből a lényeges, hogy a 17. sorban van a hiba. Odamegyünk a 17. sorhoz, és megnézzük mit rontottunk.

Én most azt rontottam el, hogy a TRISB utasítást elgépeltem. Ha ezt javítjuk nem lesz hiba.

F8 paranccsal azonnal be is töltjük a szimulátorunkba a megírt programot, illetve le is fordítja hex kiterjesztésbe.

Nyissuk meg a Tools menüből a LED panelt.

Remélhetőleg ez alapbeállításként a B porton van, de ha mégsem állítsuk be.

PORTB,0 feliratra kattintva előjön a jobb oldali ablak. A szürkével kijelölt beállítások az aktívak azaz PORTB és a 0. bit.

Miután beállítottuk az összes LED-et a megfelelő bit-ekre indítsuk el a szimulációt.

Rate menüben állítsuk be Extrém gyorsra a sebességet, illetve indítsuk el a szimulációt F1-el vagy menüből kiválasztva.

Köszönöm a rám szánt időt, mindenkinek jó PIC-ezést kívánok!

Regényi Dávid

Hozzászólások
Hozzáadás Keresés
Reed  - Pic   |212.40.75.xxx |2011-11-04 14:09:05
Ez mind szép és jó, csak azt nem értem beégetve miért nem működik? Mi az ami még nincs benne a programban? PIC
inicializálása, órajel, stb ? Mert ennek a valóságban is működni kellene. Ott meg csak mind a 8 led világít
folyamatosan. A szimulátoron viszont jól megy. Ötlet?
bencsati   |94.248.147.xxx |2011-08-18 22:55:30
Végre értek egy példát, átírtam 16f690-re, a szimulátorban megy is, de beégetve nem...

Ezt viszont nem
értem!

LVP demo board, LED-ek a portc0-portc3 -ra kötve.
bencsati  - ez igen   |94.248.147.xxx |2011-08-18 19:41:13
Ez Igen! Így néz ki egy igazi oktatás, melynek címe PIC kezdőknek. sokat kínlódtam a Low Pin Demoboardommal egy
16F690 társaságában, de hiába...
Most fogom magam és nekiszaladok újra!
Mondanám, hogy hasonló, egyszerű
mintaprogramokat még még méééég!
Köszi!
Ricske   |91.120.37.xxx |2011-08-08 15:33:31
Úgy tudod kiválasztani, hogy először bezárod az assembler ablakot (amibe a programsorokat írod) bezárod (ha
nyitva van), és utána a fő ablakban Options és ott a Select Microcontroller és a Change Clock Frequency fülekkel
lehet beállítani.
Gábor  - *   |81.182.218.xxx |2011-07-04 16:09:02
Engem az érdekelne hogy tudom átállítani a PIC Simulator IDE programban a mikrokontroller típusát, vagy akár az
órajelét? Mert hiába kattintok rá semmi :S
Ádám   |87.97.2.xxx |2011-05-17 22:26:11
Üdv!
Az lenne a kérdésem, hogy ezzel a programmal lehet 16f628a uC programozni, vagy csak 16f877-et? Ha igen, akkor
hogyan?

Előre is köszönöm a válaszokat!

Ádám
ORZMAAG   |79.120.133.xxx |2011-05-05 11:12:40
Azt elfelejtettem, hogy nincs LTP port a gépemen.
ORZMAAG   |79.120.133.xxx |2011-05-05 10:33:41
Üdv mindenkinek,
én is kezdő vagyok, de van egy kis programozás ismeretem. Letöltöttem a programot, tetszik a
dolog.
Két (a témában jártasaknak könnyű) kérdésem lenne:
- Ha itt megírok egy programot, és hex
kiterjesztéssel elmentem, akkor milyen programmal érdemes feltölteni a programot a pic-re és hogyan?
- továbbá
milyen elektronika kell a pic köré? Gondolom a táp és a kvarc nem elég, vagy mégis? Az világos, hogy a kimenetek,
hogy kell kezelni elekronika ügyileg. Esetleg egy kapcsolási rajzot ha adna valaki az lenne a legjobb.

Köszönöm.
Cruelhunter  - Rotate   |84.3.216.xxx |2011-02-08 12:05:07
Szia!

Sok évvel ezelőtt látam asm kódot de nekem úgy rémlik hogy valami bitrotációs dologgal oldottuk meg
anno még PC-n. A PIC-nek is tudni kéne a bitrottate dolgot... Jól gondolom?
tatan   |89.134.174.xxx |2011-01-20 15:34:01
még csak 9 éves vagyok de érdekel az egézs.le írnád részletesebben az egész pic-et?
herki   |62.201.120.xxx |2011-01-19 22:52:24
Szia.

A lednek a fényerejét, hogy bekapcsoláskor szépen lassan kezdjen el világítani, hogyan lehetne PIC-el
megoldani. Úgy gondoltam a frekvencia változásával meglehetne oldani, de azt úgy megírni hosszadalmas bonyolult
lenne.
Meg még aszt szeretném még kérdezni milyen könyvet tudnál ajánlani a PIC programozásához.
katona_m  - automata villanykapcsoló   |Registered |2010-10-20 17:04:53
Sziasztok!

Először is köszönöm a rövid kis áttekintést, nagyon sok dologra rávilágított, de van még
néhány homályos folt. Én szeretnék egy automata villanykapcsolót megvalósítani, és a kivitelezésen gondolkodva
pic-es vezérlésen agyalok hogy megvalósítható vele, szerintetek jó helyen kapisgálok?

Köszönöm!
tango   |Author |2010-10-08 19:00:48
jaj és nem mondjuk le kérem az assemblyt tud az is egy két trukkot
tango   |95.102.137.xxx |2010-10-08 19:00:08
én most tanulok ilyet (asm-ben) és mongyuk elsore kicsit nekem is nehéz volt megérteni ... de sikerult méghozzá
eléggé jol.... kiprobaltam ezt a programot és elsore azt hittem hogy nem mukodik...
átirtam az A-t 01fH-ra és
egybol láthato lett a dolog
jaj és egy megjegyzés:
én ugy tanultam hogy az EQU az az hogy az A szam értéke(EQUAL
vagy hasonlo szobol)
szoval az elején kicsit rosszul fogalmaztál, mert jo hogy arra fogjuk felhasználni de nem
teljesen volt igaz az állitás..
bocsánat a kotnyeleskedésért
Főnök  - cikk   |195.199.152.xxx |2010-09-30 13:51:17
cső! szerintem nem annyira egyértelmű, és nem is lehet így PIC programot írni mindegyik fejlesztőkörnyezetben,
sok infó kell a cikk megértéséhez. Ez a véleményem, de egyébként tetszik az oldal, és a többi cikk király.

cső
mjoc   |213.181.192.xxx |2010-09-09 20:19:12
Nem is gondoltam volna, hogy ha érthető, akkor ennyire "egyszerű"./Legalábbis annak tűnik./Király !!!
Köszi Dávid !
aderka   |Author |2010-06-05 15:33:47
Igazán nincs mit! Örülök, hogy segíthettem!
Öregember   |78.153.110.xxx |2010-06-04 05:08:27
Üdv!

Végre nekem is sikerült megérteni az asm programozás alapjait.
Köszönet az írónak a közlésért és
az érthető magyarázatokért.

Üdv:Zoli
aderka   |Author |2010-05-03 16:02:03
Rosszul hitted... Aki nem ismeri ezt mondja róla. Egy minimális asm tudást érdemes elsajátítani, hogy lásd mégis
hogy épül fel egy program, hogy kell nekiállnod, stb... De ha komolyabb dolgokat is el akarsz követni PIC-el, úgy
hogy ne menjen rá a magánéleted, akkor Parsic .. Végeredmény a lényeg, nem az, h hány sort írtál..

üdv:
Dávid
jdani   |Manager |2010-05-03 15:12:49
Talán belevágok én is Azt hittem hogy a parsic, csak ilyen alap, kezdő dolog
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