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