Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   773 / 1320
(#) Attila86 válasza potyo hozzászólására (») Júl 14, 2010 /
 
Hát ezt nem értem... és hova jön a "da" sor?
(#) icserny válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Idézet:
„De nekem tudnom kellene a legelső és a legutolsó érték címét hogy az FSR0 mutatót rá tudjam állítani.”

Tulajdonképpen melyik memóriába akarsz írni? Mert ha a programmemóriába rakod az adatokat, akkor nem az FSR0 fogja megcímezni, hanem a TBLPTR
Bővebben: Link

A címét pedig tudni fogod, ha címkét teszel elé és utána.
(#) Attila86 válasza icserny hozzászólására (») Júl 14, 2010 /
 
Akkor nem a programmemóriába, hanem az adatmemóriába kellene tenni a táblát. A lényeg hogy az FSR0-ával rá tudjak mutatni minden elemére.

Idézet:
„A címét pedig tudni fogod, ha címkét teszel elé és utána.”

Címkét magába a programkódba szokás tenni, nem!?
(#) icserny válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Idézet:
„és hova jön a "da" sor?”
Majd az orosz nyelvű kiadásba? :hide:
(#) trudnai válasza potyo hozzászólására (») Júl 14, 2010 /
 
Bocsanat, hogy bele szolok, de abszolut modban inkabb igy lenne szep:
  1. CBLOCK 0x100
  2. VALTOZO : d'100'
  3. MASIK_VALTOZO
  4. HARMADIK_V...stb
  5. ENDC

De szerintem az OP konstans tablazatrol szolt, tehat az eredeti uzeneted volt ide valo a cimkekkel es a TBLPTR-el...
(#) icserny válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Van kezdőérték, vagy nincs kezdőérték? Ha van kezdőérték, akkor a programmemóriából kel elővenni a program eleji inicializálásnál (ahogy a korábban belinkelt példában mutattam).

Ha nincs kezdőérték, akkor meg nem kell "DA".
(#) watt válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Ha egy címkét teszel bárhová a programba, arra lehet hivatkozni, és pont azt a címet fogja visszaadni ahol áll. A tömb elejére, közepére, bárhová tehetsz címkét, tudni fogod az elem címét ami elé tetted. Csatoltam egy képet... (16F628)
(#) Attila86 válasza icserny hozzászólására (») Júl 14, 2010 /
 
Van kezdőérték. Gyakorlatilag 100db konstanst szeretnék tárolni, amiből majd a PIC dolgozik.
(#) potyo válasza Attila86 hozzászólására (») Júl 14, 2010 / 1
 
Akkor mit akarsz az FSR0-val, ha konstansok kellenek?

Neked így kell megadni a táblázatot:
  1. KEZDET
  2.         da 0x20, 0x50, 'A', ...
  3. VEGE
  4.         NOP

Lehet, hogy a NOP nemis kell, nem próbáltam.

Az elérés pedig:
  1. MOVFF LOW(KEZDET), TBLPTRL
  2. MOVFF HIGH(KEZDET), TBLPTRH
  3. MOVFF UPPER(KEZDET), TBLPTRU

Vagy pedig a KEZDET konstanshoz hozzáadod, hogy hanyadik elem kellene, és az eredményt teszed a TBLPTRx regiszterekbe.

A táblázat utolsó eleme:
  1. MOVFF LOW(VEGE-1), TBLPTRL
  2. MOVFF HIGH(VEGE-1), TBLPTRH
  3. MOVFF UPPER(VEGE-1), TBLPTRU


A TBLRD utasítás hatására a TABLAT regiszterbe kerül a megcímzett terület tartalma. Nézd meg a TBLRD utasítást, mert van belőle többféle verzió automatikus címnövelés/csökkentésre.

Ha nincs a chipben 64k feletti kódmemória, akkor a TBLPTRU kihagyható.
(#) Hp41C válasza potyo hozzászólására (») Júl 14, 2010 / 1
 
Szia!

Idézet:
„MOVFF LOW(KEZDET), TBLPTRL”
Ez az utasítás nem azt fogja csinálni, amit szeretnél ... Sajnos ki kell írni:
movlw low(KEZDET)
movwf TBLPTRL
stb...
Az indexelésnél még az átviltelre is figyelni kell - vagy ügyes helyre kell tenni a táblát.
Idézet:
„Ha nincs a chipben 64k feletti kódmemória, akkor a TBLPTRU kihagyható.”

És nem olvasod a config vagy az id területet...
(#) Attila86 válasza potyo hozzászólására (») Júl 14, 2010 /
 
Köszönöm, most már sokkal világosabb! Még egy kérdés: Honnan tudhatom azt meg, hogy a tábla végére értem-e már? A TBLPTRU, TBLPTRH, TBLPTRL regisztereket kellene összehasonlítani a VEGE cimke U, H és L regisztereivel?
(#) potyo válasza Hp41C hozzászólására (») Júl 14, 2010 /
 
Idézet:
„Ez az utasítás nem azt fogja csinálni, amit szeretnél ... Sajnos ki kell írni:”
Igazad van...

Idézet:
„És nem olvasod a config vagy az id területet..”
Jelen esetre gondoltam, itt meg ugye nem az a cél.
(#) potyo válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Vagy így, vagy pedig ha a tábla elejéről olvasol folyamatosan, akkor akár egy másik segédváltozót növelsz, és ha az elérte a VEGE-KEZDET-1 értéket, akkor értél az utolsó elemhez.
(#) Attila86 hozzászólása Júl 14, 2010 /
 
Na megyeget a tábla... De nem jó. A 100db konstans 0-tól megy felfele kb ötösével:
0,5,10,15,20,25 stb. 135-ig ki is olvassa, tehát kb a 26. konstansig. Aztán valami teljesen más értéket olvas ki a táblából, noha a TBLPTR értéke csak egyel nőtt továbbra is. Olyan, mintha a "da" direktíva után írt decimális konstansokat a programmemóriában nem egy helyre és szépen sorban pakolta volna le.

Itt van az asm. Csak a megszakítást nézzétek, a főprogram nem lényeges és az jól is működik (egy ötcsatornás szoftveres PWM generátor).
Ha a "hi_isr" cimke után betesztek egy töréspontot a szimulátorban, majd 27-szer engeditek futni a Run gombbal miközben a watch ablakban nézitek a TBLPTR illetve a LED_1_fényerő regiszterek értékét, akkor láthatjátok hogy a 27. vagy 28. töréspontba lépéskor már nem 5-el növekszik a LED_1_fényerő regiszter értéke...
(#) Hp41C válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Szia!

Az a fránya 18F assembler.... Csak akkor csinálja jól, ha páros számú byte van egy sorban, különben az utolsóhoz hozzácsap egy 0 -t és egész szót tesz a memóriába....
(#) Attila86 válasza Hp41C hozzászólására (») Júl 14, 2010 /
 
Szia!
Ööööö... minek kell párosnak lennie?
(#) Hp41C válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Szia!

Törd el a sor 10 db adat legyen minden sorban - szépen leteszi sorban a memóriába...

Egy assembly sorban megadott byte-ok számának párosnak kell lenni ahhoz, hogy sorban egymás után legyenek az adatok a memóriában.

Miért nem használod a mullw 0x05 utasítást ? Lényegesen kisebb helyen elférne... Ha a megszakítási rutinban is használod, a PRODL és PRODH regisztereket is menteni kell.
(#) Attila86 válasza Hp41C hozzászólására (») Júl 14, 2010 /
 
Idézet:
„Törd el a sor 10 db adat legyen minden sorban - szépen leteszi sorban a memóriába...”

Próbáltam, de akkor errort ír rá...
Idézet:
„Miért nem használod a mullw 0x05 utasítást ?”

Mert nem feltétlen mindig 5-ösével kell majd növekednie, a tábla most csak egy próba erejéig van így.
(#) potyo válasza Attila86 hozzászólására (») Júl 14, 2010 / 1
 
Minden sor elé írj de-t:
  1. de d'0',d'5',d'10',d'15',d'20',d'25',d'30',d'35',d'40',d'45'
  2.         de d'50',d'60',d'65',d'70',d'75',d'80',d'85',d'90',d'95',d'100'
  3.         de d'110',d'115',d'120',d'125',d'130',d'135',d'140',d'145',d'150',d'155'
(#) Attila86 válasza potyo hozzászólására (») Júl 14, 2010 /
 
Köszönöm!
Erre van valami ötletetek?
(#) potyo válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Nincs kéznél szimulátor, de mennyi ezeknél az eseteknél a TLBPTR értéke? Meg a View->Program memory alatt mi látszik a programmemóriában ezeken a helyeken (vigyázz, ott kettesével emelkedik soronként a cím)?
(#) icserny válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
1. Amikor belépsz a programmegszakításba, akkor nem feltételezhető, hogy a táblamutató ugyanott áll, ahol az előző megszakításnál volt.

2. A 16 kbájtos mikrovezérlőben fölösleges 24 bites címekkel bajlódni
(#) Hp41C válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Szia!

Olvasd el a táblázatod, kimaradt az 55, a 105, 200 visszafelé a 135, 10
(#) Hp41C válasza icserny hozzászólására (») Júl 14, 2010 /
 
És 100 elemű tömbnél a TBLPTRH -t sem kell figyelni... Egy mullw 0x05 és egy feltételes kivonás megteszi az egészet...
(#) Hp41C válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
Szia!

A high_isr kilépésénél használd a retfie fast utasítást...
(#) Attila86 válasza Hp41C hozzászólására (») Júl 14, 2010 /
 
Tudom, ez direkt van!
(#) Attila86 válasza icserny hozzászólására (») Júl 14, 2010 /
 
A főprogram nem nyúl hozzá a táblamutatóhoz.
(#) Attila86 válasza potyo hozzászólására (») Júl 14, 2010 /
 
A TLBPTR értéke 128-tól felfelé növekszik. Tehát a görbe címke a 128-on van. A Program memory ablakban egyenlőre nem sikerült kiismernem maga, máris nekiesek még egyszer...
(#) Attila86 hozzászólása Júl 14, 2010 /
 
Na...
A retfie-t átírtam retfie fast-ra, a táblámat pedig átírtam hogy ne egy sorban legyen az összes és máris hibátlanul működik a program.
(#) potyo válasza Attila86 hozzászólására (») Júl 14, 2010 /
 
És azt tudod, hogy a RETFIE FAST miért oldotta meg a problémát?
Következő: »»   773 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem