18F4620, problém s PCLATH - někdy počítá po 4

Zdravím všechny.
V novém roce nové problémy. :smiley:

Dnes mi přišel 18F4620. Nové instrukce oproti řadě 16F jsem jakš takš pochopil za chvilku, stačilo pár pokusů a omylů jak v SIM v MPLABu tak reálně na “živo”. :smiley: I2C a PWM už jsem taky rozchodil.

A teď ten problém. Mám problém s tabulkou pomocí ADDWF PCL. Že PCL “počítá” po 2, oproti řadě 16F, s tím jsem se smířil, ale že počítá někdy po 4, a to ještě že nevím kdy po 2 a kdy po 4, tak to mi hlava nebere. Mám

počítá PCL někdy po 2, někdy po 4

ale když dám

tak PCL počítá pořád po 2

Můžete mi někdo vysvětlit, kde dělám chybu, případně co mám špatně a nakopnout mě správným směrem? Dík.

:arrow_right: administrator: přejmenováno z “18F4620, problém s PCLATH”

to som tiez riesil ale nakoniec som to prebehol 4 riadkami kodu. Premenu som f som porovnal s cislom res odcital od kontanty a ked vysledok bol nula tak vykonal prikaz

na miesto jedneho riadku vzniky 4 ale fungovalo to…

Tak jsem to asi vykoumal

použít

Co je to “BRA”, nějaká direktiva pro překladač?

Návod na PIC18F,jinak vše je datasheetu.Taky polovinu věcí zatím skroro nechápuu,ale člověk se učí. PIC 16 oproti 18F je šepleť. A jde to úplmě v poho zvládnout i v ASM. Je TOTO čistě můj názor.

Ano dasa mal som naprogramovane nieco v asm pre 18f ale teraz skoro to iste pisem v Ccku a je to neporovnatelne programovacia rychlost a konfort je to proste o inom… a nemusim riesit komplikovane logicke uvahy akosa da nieco urobit v asm.

Honza3: Pozor na to, že pomocí BRA je možné skákat jen po ±255 adresách.

Já to používám takhle:

TABLE           BRW
                    GOTO          NEKAM1
                    GOTO          NEKAM2
                    GOTO          NEKAM3

Do W nakopneš index tabulky a zavoláš CALL.

Další možnost máš pomocí CALLW

TABLE           GOTO           NEKAM1
                    GOTO           NEKAM2
                    GOTO           NEKAM2

Pro vyvolání indexu z tabulky nakopneš pořadí do W a zavoláš CALLW table :wink:

Používám PIC16F1936 což je kříženec mezi klasickou 16F a 18F.

Já mám v PICu 10 tabulek po 101 hodnotách a tam mu už ADDWF PLC,f dělalo bordel, protože spodní byte PCL nechtěl přetéct a změnit aji horní byte.

Bohůžel mi Cčko nějak neleze do hlavy a zatím to zvládám v ASM. :smiley:

To už jsem taky zjistil, je to stejný jako u 16F, ale to mi nevadí, mám tabulky po 8mi a 13ti, a umístil jsem je pomocí ORG na konec paměti, takže vím kde jsou. A zdůvodu velikosti už nečtu data z EEPROM, ale čtu je z FLASH, je to rychlejší a asi i spolehlivější.
To call vyzkouším. :smiley:

Kolegovia,

pokial pouzivate pripocitanie cisla k programovemu citacu na vytvorenie tabulky cisel, nebranim vam, ale rad by som vas upozornit na schopnost PIC18 velmi jednoducho citat a zapisovat programovu pamat.
Napriklad v datasheete PIC18F4620 je to v kapitole 7 (Flash program memory) podkapitola 7.1 (Table read and table writes).

Ono ten sposob robenia tabuliek cez manipulaciu s PC je dost “o hubu” ked ide o robenie velkych tabuliek, napriklad.

Toto je vec, na ktoru je dobry datasheet.

V datasheete PIC18F4620 je tabulka 24-2, nazvana PIC18Fxxxx instruction set, je to velmi priznacny nazov, lebo obsahuje instrukcnu sadu daneho MCU :slight_smile: to je samozrejme tabulka, ktoru musi mat v malicku kazdy, kto naozaj nieco programuje v assembleri.
Pri instrukcii BRA je, tak ako aj pri inych, uvedeny tvar instrukcneho slova a vidime, ze je to 1101 0nnn nnnn nnnn, kde prvych 5 bitov je operacny kod a nn…n je nejaka konstanta, ako vysvetluju vysvetlivky pred tabulkou. Je zrejme, ze to cislo n ma 11 bitov, co zachytava 2 na 11-tu kombinacii, teda 2048 cisel. Vzhladom na to, ze skoky su prirodzene znamienkove, je to rozsah ±1023 instrukcii.
Tuto rychlu domnienku potvrdzuje aj vysvetlenie instrukcii, ktore sa nachadza za touto tabulkou - je tam jasne napisane, ze instrukcia BRA n prijma argument n z rozsahu -1024<=n<=1023.

Tak ty skoky s CALL jsem zkoušel, ale nějak nepochopil. Zatím teda budu využívat BRA.

Ale po 3 dnech trápení, že mi kolaboval program na přerušení, jsem zjistil, že je dobré si v přerušení schovat i PCLATH, protože v přerušení mám taky jednu tabulku. Zase 3 dny života v háji :smiley: :smiley:

vidis keby si mal cecko…riesil by si ine problemy :smiley:

Asi bych řešil víc problému v C jak teď v ASM :smiley: :smiley: :blush: