PIC - absolutní adresování

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
tmm

PIC - absolutní adresování

#1 Příspěvek od tmm »

Zdravím, programuju PIC16F628A a potřeboval bych vědět, zda je možné, popř. jak, zapisovat/číst do/z adresy (Flash paměť), kterou mám uloženou v nějakém registru ...

V klasickém asembleru stačí hodit název proměnné do hranatých závorek [], tady to bohužel nejde a nevím, jak vhodně využít symbol $

Jednoduše - potřeboval bych do pracovního registru uložit obsah bajtu, jehož adresu mám uloženou v registru ADRESA - asi takto:

Kód: Vybrat vše

MOVF    [ADRESA],0

Tohle bohužel nefunguje.

Díky za jakékoliv rady.
Uživatelský avatar
mihal
Příspěvky: 1844
Registrován: 06 dub 2005, 00:00
Bydliště: Zilina

#2 Příspěvek od mihal »

u motoroly je mov $1000,premenna obdoba lda $1000;sta premenna; cize hodnotu z adresy 1000h do premenna. Skusil by som to bez zatvoriek, pripadne zhliadni datasheet :wink:
tmm

#3 Příspěvek od tmm »

Tak mám pocit, že takhle to stejně nepůjde ... adresu musím zadat přímo při programování, ovlivnit ji hodnotou proměnné prostě nejde :(

Ale našel jsem si v datasheetu informace o nepřímém adresování pomocí registrů INDF a FSR, bohužel se to týká nejspíš pouze paměti RAM, která je příliš malá...

Paměť flash je u toho typu PIC 2048 bajtů a potřeboval bych ji využít, ale začínám mít pocit, že to nejde ... z/do této paměti jde číst/zapisovat pouze při programování PICka ...
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#4 Příspěvek od mikollar »

do FLASH pamatie ide zapiovat aj citat programoma ale len pri vyssich radach napr 16F877A, este sa da vyuzit EEPROM ale ta nieje tiez velmi velka
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#5 Příspěvek od piitr »

Já dělám jen s PIC16F84, ale tohle bude nejspíš podobné. To INDF a FSR jsi našel dobře. To je přesně ono. PIC řeší nepřímou adresaci takhle, nemá na to adresní mód. Samozřejmě to jde pouze v té RAMce, jak jsi psal. Do FLASH paměti pro kód takhle zapisovat nejde. To jde, pokud vím, opravdu jen při programování. PIC má totiž paměť pro kód a data oddělenou. Myslím, že se tomu říká Harvardská architektura. Pro jednočipy je to celkem vhodné. Dokonce to jde tak daleko, že ta velikost 2048 není v bajtech, ale ve slovech, která jsou dlouhá 14 bitů nebo tak nějak. Takže bys to stejně nezpracoval osmibitovým procesorem.

Řešení: Pokud chceš i zapisovat, tak to prostě nejde. Jen v té RAMce. Pokud chceš jen číst data z nějaké tabulky konstant, tak použij instrukce ADDWF PCL a RETLW. V datasheetu najdeš, jak se to dělá.
tmm

#6 Příspěvek od tmm »

Jednalo se mi o to, že bych měl někde v paměti uložené data, které bych smyčkou četl a podle nich bych řídil výstupy na pinech - tyto data bych chtěl ale občas jednoduše přepsat (např. jednoduchý soft na PC ve spojení se sériovou komunikací (USART) - potřebuju cca 1600 bajtů paměti, takže proto nepřipadá v úvahu EEPROM)

Tak to nakonec asi vyřeším externí EEPROM pamětí, 8k vyjde asi na 12Kč, takže vpodstatě neomezený prostor :)

Díky všem za pomoc.
Uživatelský avatar
marzou
Příspěvky: 130
Registrován: 24 čer 2007, 00:00

#7 Příspěvek od marzou »

jen stručně: od PIC18F by mělo jít do programové paměti FLASH i zapisovat, v instrukční sadě jsou pro to nové instrukce, se kterými je jednoduší i čtení, myslím, že využívají i autoinkrementálního ukazatele.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“