jak na user commands PC->PIC
Cizek Milan
cizek.milan@seznam.cz
Pátek Červen 11 19:43:35 CEST 2004
Ahoj,
uz jsem zase o kousek dale, dnes jsem vytvoril program, ktery s vyuzitim
prime adresace zapise libovolny počet bajtu do useku pameti. Mam to sice
trosku jinak, ale podstatu jsem pochopil, diky! :-)
> > myflags org 0x20
> > #DEFINE RXD myflags,1
> > ...
> >
> Ne, ja to mam udelane takhle:
> RXD EQU 1
> myflags EQU 20h
> Ten vyse uvedeny postup neznam (mozna je taky dobry).
Pouzivam zejmena pri adresaci portu, napr. RA2
#DEFINE LED1 PORTA,2
bsf LED1 ; rozsvítit LED1
bcf LED2 ; zhasnout LED2
> > > bcf RCSTA, CREN
> > > bsf RCSTA, CREN
> >
> V DS pisi, ze po kazde chybe se ma udelat CREN
> dolu a nahoru, tak to tak delam. Je to jen pri chybach
> nikoliv pri normalnim cteni znaku.
Pak je to jasne a udelam to stejne.
> > > movfw b0
> > > xorwf b1,0
> > > xorwf b2,0
> > > xorwf b3,0
> > > xorwf b4,0
> > > xorwf b5,0
> > > xorwf b6,0
> > > btfss STATUS,Z
> > > goto ChybaXOR
> >
> To je jednoducchy "kontrolni soucet" mam-li rekneme tri byty
> a udelam B1 XOR B2 XOR B3,
> vyjde nejake "hausnumero" a to nacpu do B4. na cilove strane
> pak muzu udelat test dvema zpusoby. Budto udelam B1 XOR B2
> XOR B3 a porovnam vysledek s B4 nebo, svete div se :-)) muzu
> udelat B1 XOR B2 XOR B3 XOR B4 a pokud B4 = vysledku, tak to
> da vzdy 0. Zkuste si ve windowsech otevrit kalkulacku a par
> pokusu si tam udelat, bude to hned jasnejsi.
Tady mi stale visi otaznik. :) Podstata XORu je uz jasna, myslim ze i ten
kod docela chapu. Jedine co me napada je to, ze mas rekneme 5 prikazu, u
kazdeho znas dopredu XOR jeho bajtu. Tuto konstantu zaclenis do programu a
jakmile nahodíš RXC, tak vemeš XOR prijatych bajtu a porovnas ho s
konstantou, když je stejny, je to "predpokladany" prikaz a spustis
prislusnou akci.
To mi pride jako logicke vysvetleni, ale je tu preci moznost, ze uzivatel
zada uplne nesmyslny prikaz, jehož XOR vyjde nahodou stejne a bude
interpretovan jako nejaky prikaz z rejstriku. Tohle se mi prilis nelibi. Je
mi to divne, protože kdyby ti slo jen o ten XOR, pak by ti myslim stacila
jedna promena namisto b0..b6, XORoval by si vždy RCREG,0 (?). Talke to mam
ve svém pokusu, jedna promena jakozto pointer (offset) a druha jako první
bajt segmentu. Osetril jsem také pripadny overflow...
Otazka tedy zni, co porovnavas s cim, jak to vyhodnocujes. Pokud je to tak
jak si myslim, tak by me zajimala spolehlivost a pravdepodobnost, ze se
nesmyslny prikaz provede jako jiny spravny. A nebo jsem uplne mimo a ten XOR
jen cosi jisti (jakoby parita).
PS: porad mam trochu zmatek v instrukcich movlw,movf,movfw apod., nedokazu
rozlisit, s cim prave pracuju, jestli s obsazenou hodnotou nebo s adresou.
Jak se v tom vyznat?
> Pekne PICani preje
Heh, a ja porad doufal, ze se doziju stastneho konce. ;)
Milan
Další informace o konferenci Hw-list