V mojom poste som ti spomenul, ze musis pouzit instrukciu MOVX, ktora sa na to pouziva:
wikipedia píše:
External memory - what makes it "external" is that it must be accessed using the MOVX (Move eXternal) instruction
Ak pouzivas nepriame adresovanie, tak sa zrejme nevyhnes pouzitiu registra DPTR, kde bude uchovana 16-bitova adresa zdrojoveho retazca. Inak by si mohol pouzit registre R0, R1, ale tie su iba 8-bitove. Moja otazka znie, preco sa chces vyhnut pouzitiu registra DPTR? Ak ho potrebujes pouzivat viac krat, mozes jeho hodnotu napr ulozit do zasobnika, zmenit hodnotu a potom spatne obnovit povodnu hodnotu zo zasobnika. V kazdom pripade, nepouzivaj instrukciu MOVC, ta totiz kopiruje data z internej pamatovej oblasti, nie z externej ( mozno to je prave ten problem, ktory mas a uz vyssie som ti spominal, ze pouzi MOVX ). Zrejme si si nepozrel ten link, tak tu ti vlozim priamo obsah textu, co som tym mal na mysli ( hrubym textom zvyraznim dolezite casti ):
MOVC:
www.keil.com píše:
The MOVC instruction moves a byte from the code or program memory to the accumulator
MOVX:
www.keil.com píše:
The MOVX instruction transfers data between the accumulator and external data memory. External memory may be addressed via 16-bits in the DPTR register or via 8-bits in the R0 or R1 registers.