[elektro] ASM30, karakter hivatkozas
Horvath Zsolt
hozso_001 at freemail.hu
Fri Aug 29 09:30:42 CEST 2008
hg12345 írta:
> Az ascii '*' de ez is konstans mint bármi más ezért kell elé a konstans
> jelzés: #.
> Ascii konstans csak byte-os lehet ez nem ismeri a kiterjesztett
> betötérképet.
Aha, ez világos. És logikus.
> Ha két karaktert szeretnél elhelyezni egy regiszterben
> az már string de stringet nem igy kell kezelni DS51307G page 58,
> valahol elhelyezed a memóriában és egy pointerrel (indirekt cimzés)
> végig olvasod.
>
De én nem szeretném a memóriába tenni. ( TBLRD-el csináltam már
ilyet, HD44780
definiálható karaktereit így olvasom ki a memóriából. )
Én most egyszerűen egy szöveget szeretnék kiiratni. Tehát két
betű ASCII kódját
szeretném beleírni egy munkaregiszterbe, de nem akarom az ASCII
táblázatból visszakeresni
a kódokat. Azt hittem, az működik, hogy megadom a két karaktert és a
kódokat beírja, de
ezek szerint nem. Akkor most - ha nem akarom a memóriába letenni az
adatokat - csináljak
belőlük konstansokat ( ASCII kódokkal ) és azokat másoljam a W-be? ( Ez
nem túl elegáns. )
> Mint látod a string jelzése "****", de ez nem konstans! Ezért nem
> tudod konstansként megadni, az ilyen megadáshoz csak terület
> feltöltésnél használható és nem jár semmilyen egyébb hatással. Ha
> szeretnéd késöbb használni akkor gondoskodnod egy hivatkozási
> címről, ez lesz a pointer vagy cim amire indirekt cimzéssel hivatkozol.
>
> Ez nem ennek az ASM-nek a sajátossága, minden ASM forditó igy
> müködik.
>
> Ha tárolt területes megoldást választod, akkor ennél a kontrollernél
> elöre kell gondolkozni! Két megoldás van ami nem egyszerűsiti meg a
> dolgodat.
> Mivel a program memória 24 bites (3byte) és a program memóriá
> tetszöleges 32K szegmense belapozható a RAM területre, de ez 16
> bites :-) igy itt csak az alsó 16 bitet látod a FLASH-ből. (ennek megvan
> oka!).
>
Nemrég - teljesen véletlenül - belenéztem az ERRATA-ba. Azt írta,
ennél a módszernél
komoly gondok lehetnek. Most nem emlékszem a konkrét problémára, de
hüledeztem rajta.
> Ha TBLWR és TBLRD utasitásokkal éred el a FLASH-t akkor mind a 3
> byte-t használhatod tárolásra, kicsit lassabb de tömörebb tárolást
> biztosit, de a program hiba esetén itt végrehajtható kód lesz, .PSTRING
>
> Ha a lapozást használod és RAM szerű elérést, igy .STRING-t kell
> használni, ilyenkor a FLASH-ban NOP utasitások sorozatát látja a
> program. Sokkal gyorsabb és egyszerübb a kiolvasás, de nem szabad
> megfeledkezni a lapozás engedélyezéséről CORCON.PSV=1és a
> PSVPAG regiszter beállításáról. (he nem engedélyezed akkor hardware
> memoria trap hibát generál minden olvasásnál :-().
>
>
>
>
> Ha mindenképpen ragaszkodsz a fenti elhatározásodhoz
> akkor az igy néz ki :
> mov # '1' | ('2'<<8) , W0 ;//ez tényleg lefordul
>
> ez lesz az eredmény :
> 26C8 232310 mov.w #0x3231,0x0000
>
Ez az! Valami ilyesmire gondoltam. Ez is elég 'érdekes', de jobb,
mint két karakterenként
esetleg konstanst definiálni... Köszönöm!
Üdv.: Horváth Zsolt
More information about the Elektro
mailing list