[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