[ tox!e @ 27.11.2005. 00:01 ] @
Kao prvo radim u Pic Simulator IDE programu.Problem je sledeci:

Na serijskom ulazu mikrokontrolera (PIC16f84) mi stizu razni podaci (poruke), a meni treba da PIC "slusa" sta dolazi, i ako naidje vec neka predefinisana poruka, on na to da reaguje.
Npr.:
Predefinisano je ovo : 06915689450002040A91
A na ulazu dobijam : A5487F460460078 (pa onda naidje) 06915689450002040A91 (na sta bi PIC trebalo da izvrsi npr.PORTB.5=1) i onda ponovo nailaze podaci i kada ponovo naidje 06915689450002040A91 da izvrsi neku drugu instrukciju npr. PORTB.5=0 .

Unapred hvala.
[ _str_ @ 27.11.2005. 08:07 ] @
Ako je pristizanje "poruka" razdvojeno, odnosno nisu poslate u "cugu", mozes iskoristiti to
kasnjenje da PIC detektuje kraj poruke i onda primljenu poruku preuzme u dalje "razmatranje". Ako su poruke sastavljene onda moras imati definisanu duzinu poruke da bi PIC posle svakog primljenog bajta odlazio na proveru primljene poruke. Sto se tice drugog dela pitanja, mozes definisati jedan registar da broji "ispravne" poruke i na osnovu njega uraditi dalje grananje programa.
[ tox!e @ 27.11.2005. 11:24 ] @
Za drugi deo vec imam ideju kako da je odradim.Meni je problem ovaj prvi deo.
Naime o cemu se radi:
PIC salje zahtev za slanje podataka prikljucenom uredjaju.Taj uredjaj pri primljenom zahtevu pocinje sa slanjem podataka.Znam duzinu poruke koja treba da se primi, i da jos da napomenem, da su ti podaci u hexadecimanlom zapisu.
Uspeo sam da odradim, da PIC odradi instrukciju posle npr 5 primljenih bajtova, ali meni treba, da izvrsi instrukciju posle 5 bajtova (ali vec predefinisanih bajtova, ne kojekakvih, jer onda cela stvar nema svrhe).
[ _str_ @ 27.11.2005. 12:05 ] @
Nisam siguran dali sam razumeo. Ako PIC vec primi pet bajtova onda bi posle prijema trebao da ih uporedi sa pet konstanti (bajtova) koje si programski podesio prilikom programiranja ili zadao nekim drugim putem. Znaci proverava bajt0 sa bajt0primljeni i tako do bajt4. Ako jednakost nije ispunjena nista od izvrsenja komande.
Opet da napomenem da nisam razumeo, jer u tvome pitanju stoji i odgovor?
[ tox!e @ 27.11.2005. 15:48 ] @
Problem je u tome, sto neuspevam nikako da uradim to uporedjivanje.
[ lord Vader @ 27.11.2005. 20:00 ] @
Pretpostavimo da se PIC nalazi u stanju čekanja i da nailazi pogrešna poruka. Pretpostavimo da je poruka od 3B i nema nikakav overhed da bi bilo lakše. Neka je komanda koju očekujemo 123, a primaš 124.
Primaš prvi bajt, porediš ga sa prvim bajtom poruke koju očekuješ, 1 i 1 su identični i čekaš drugi bajt. Primaš drugi bajt i porediš sa drugim koji očekuješ 2=2 OK. Primaš treći bajt i porediš ga sa trećim koji očekuješ 4=3 NIJE OK. Ovde provaljuješ da to nije očekivana komanda i restartuješ proces primanja, odnosno čekaš početak sledeće komande.
Ako ti stigne 123 komanda u poslednjem poređenju će biti 3=3 i tada vidiš da je primljena komanda koja je očekivana i odradiš akciju koju hoćeš.

Ako radiš u asembleru onda ovako. U m_Novi se nalazi primljeni bajt, a u m_KomandaB0 očekivani.


Code:

movf      m_Novi, w
xorwf     m_KomandaB0, w
btfsc      STATUS, Z
goto       Isti_Su

Nisu_Isti
....
...
..


Ovako radiš za svaki bajt.

Pitaj šta ti nije jasno.

[Ovu poruku je menjao lord Vader dana 27.11.2005. u 21:03 GMT+1]