Možná jsi z těch zápisů nepochopil skutečný tvar instrukce.
Obecně je to:
btfss , <číslo bitu>. Musí mít tedy vždy dva paramertry.
Instrukce btfsc flags1 má smysl pouze tehdy, pokud je předtím provedena definice #define ,<čislo bitu>. Bez toho překladač ohlásí chybu, protože chybí druhý parametr.
A ten zápis btfsc flags1,flags2 znamená pouze to, že flags1 je adresa registru a flags2 číslo bitu, který se v registru bude testovat.
kde bit_flag1 mam = 0x00
kde flag1 = 0x01 a melo by to vyjit ven ale nejak mi to nefunguje v simulatoru…
zkousel jsme flag1 zvysovat 0x02, 0x03 ale na nastaveni 0x04 to skoci ven, stejne tak i vyssi bity 0x05, 0x06 atd
jestli mas nadefinovanej nakej port tak skus misto definici pouzit nejdriv cisla : btfss 06,0 , je li bit 0 na adrese 06 (PORTB) jedna preskoc, a
pokud pouzijes flag1 jako pomocnej registr tak mu mmusis nadefinovat volnou adresu , mimo precovni registry procesoru 0x00 az 0x1F pro 1 stranku,staci nad 0x20
skus si odsimulovat todle
FLAG1 EQU 0X20 ;priradi definici numerickou hodnotu
START BTFSS FLAG1,0 ;REGISTR FLAG1 / BIT 0
GOTO PLUS ; JE 0 , pricti
GOTO MINUS ; JE 1 , odecti
PLUS INCF FLAG1,F
GOTO START
MINUS DECF FLAG1,F
GOTO START
END
Jsi velký experimentátor
0x00 je obvykle INDF, čtený vždy jako nula
0x01 TMR0
0x02 PCL
0x03 STATUS
Pohybuješ se v něšťastné oblasi SFR, kde se zrovna nic moc testovat nedá. Pracuj s promněnnou, kterou si defunuješ sám.
jak to tak zkousim tak mi pri zadani hodnoty flagy1 vice jak 4 tak to vzdy projde ale pritom flagy2 mam treba 0x00. asi jsem natvrdlej ale nerozumim tomu.
preci by to melo byt jak popisoval Jankop tedy:
flagy1 je registr, flagy2 je cidlo bitu ktery se ma testovat
tzn pokud mam flagy 2 nastaveno na 0x04 tak chci testovat 4 bit v registru Flagy1. Pokud tedy nastavim flagy1 na 0x04 tak to projde jinak ne. Pokud to chapu sptatne tak su pujdu zastrelit
btfss flagy1,7 ;je v registru cislo 128?
goto $-2 ;NE,tak pricti 1
Je cislo 128,tak program pojede dál[/code]
Cislo 128 je b’10000000’ a testuje se 7 bit na 1, přičte se 1, otestuje se bit atd… a až je číslo 128,tedy b’10000000’ tak program otestuje 7 bit,zjistí že je v 1 a přeskočí goto $-2,tak program pokračuje dál.