Zaslal: po listopad 17 2008, 12:19 Předmět: PIC - absolutní adresování
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:
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
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 ...
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á.
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
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.
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.