jak na user commands PC->PIC
Šerých Jakub
Serych@panska.cz
Čtvrtek Červen 10 12:18:48 CEST 2004
> Ahoj,
> diky za ukázku, posunul jsem se opět o něco dál. Po
> zdlouhavém probádání mám několik nových konkrétních dotazů...
>
> Myflags je dobrý (úsporný) nápad, jak vypadá deklarace? Je to
> něco jako:
>
> 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).
> nebo to lze zapsat nějak najednou? (to mě docela zaujalo,
> proto se ptám)
>
> > bcf RCSTA, CREN
> > bsf RCSTA, CREN
>
> K čemu je tohle přesně dobré? Jestli jsem správně pochopil,
> tak to provádíš před čtením každého znaku.
>
> Ono vůbec to testování OERR a FERR mi není příliš jasné, FERR
> je chyba důsledkem chyby OERR? Je to tak že OERR nastane,
> když mám buffer plný a přicházejí další znaky? FERR pak
> nastane, když se nezachytí STOP bit (na jeho pozici je Low
> úroveň), např. v důsledku špatného časování?
>
> Pokud cituju datasheet, tím lépe, stačí kladná odpověď. Moje
> úroveň angličtiny je prozatím na dosti mizerné úrovni, tak se
> chci jen ujistit že rozumím... :-)
Ja ty chyby taky uplne do detailu nechapu a ani me moc nezajimaji vzhledem k pouze simplexni komunikaci. Proste nastala chyba, tak prohlasim prijem za chybny a dal se tim nezabyvam. 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.
>
> > 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
>
> Tohle mi stále vrtá hlavou, nějaká finta. :) Co je výsledkem?
> Chápu to dobře tak, že s libovolnou vstupní kombinací b0..b6
> dostanu vždy "jedinečný" výsledek (něco jako CRC/MD5)? Ve W
> mám tedy pak to, co porovnám s konkrétními příkazy? Co přesně
> indikuje příznak Z (co se považuje za chybu)?
>
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.
> > movfw tmp ;Nacteni prijateho znaku
> > CMPSE Bptr, 7
>
> Tohle mě také jaksi mate. Nikde jsem nenašel popis instrukce
> movfw (předpokládám že jde o mowf), ale hlavně nevím, jak
> pracuje CMPSE. Nahlížím do MPASM Assembler User's Guide.pdf,
> také do PIC16F628 datasheetu, a rychlého přehledu instrukcí z
> "DOVEDA BOYS". Nikde jsem to pro PIC nenašel. Jaké příručky
> používáte vy?
>
>
Omlouvam se to je moje makro, ktere jsem tam asi nepribalil. Misto toho si tam predstavte instrukce:
movfw Bptr
sublw 7
btfss STATUS,Z
Vlastni definice toho makra vypada takto:
CMPSE MACRO CO,const ; preskoci, jestlize const - CO = 0
movfw CO
sublw const
btfss STATUS,Z
ENDM
Tim je take odpovezeno na otazku co je to Z - zero flag ve status registru. Priznak, ktery je nastaven pokud vysledkem vetsiny operaci je nula, blize viz datasheety.
Literatura: datasheety a referencni prirucky od picu. Mam z nich vytistenych nekolik dulezitych stranek, ktere mam pri programovani vzdy rozhazene na stole pred sebou. Zejmena tabulku SFR a detailni tabulky tech nejdulezitejsich SFR, strucnou tabulku instrukci (tam krasne vidite prave treba ovlivneni flagu ve statusu a referencni prirucku instrukci (jsem prece jen prilis svatecni PICar na to, abych je umel vsechny do detailu zpameti.
Pekne PICani preje
Jakub Serych
Další informace o konferenci Hw-list