Stránka 1 z 1
PIC - absolutní adresování
Napsal: 17 lis 2008, 12:19
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:
Tohle bohužel nefunguje.
Díky za jakékoliv rady.
Napsal: 17 lis 2008, 13:02
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

Napsal: 17 lis 2008, 13:45
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 ...
Napsal: 17 lis 2008, 13:54
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
Napsal: 17 lis 2008, 17:42
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á.
Napsal: 17 lis 2008, 18:57
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.
Napsal: 18 lis 2008, 12:27
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.