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