AT89S52-Je možné uložit data do vnitřní paměti a vypnout MCU

Zdravím, študoval jsem datasheety k tomuto MCU a nikde jsem se nedočetl, že by bylo možno uložit nějaká data do paměti, následně vypnout procesor a po zapnutí s uloženými daty opět pracovat. Třeba jsem se přehlédl, ale pokud to opravdu nejde, je nějaká možnost jak to provést?

Honza

:arrow_right: administrator: přejmenováno z "AT89S52 - vnitřní paměť"

AT89S52 nemá vnitřní EEPROM paměť, takže ne, nedá se uložit data a po resetu je znovu načíst. Musí se použít externí EEPROM nebo CMOS a do té uložit co je třeba.

Pokud potřebuješ mcu s touto architekturou a interní EEPROM, tak bys musel použít 89S8253 nebo starší 89S8252. Ten druhý však již Atmel nedoporučuje pro nová zařízení.

Díky za odpověďi. Prostuduji datasheet jakým způsobem ukládat do vnitřní EEPROM a integráč zakoupím. Avšak jen 89S8252. Podle netu 89S8253 můj programátor nepodporuje.

Honza

Tak jsem to početl a podle této věty:
The on-chip EEPROM data memory is selected by setting the EEMEN bit in the EECON register
at SFR address location 96H. The EEPROM address range is from 000H to 7FFH. MOVX
instructions are used to access the EEPROM. To access off-chip data memory with the MOVX
instructions, the EEMEN bit needs to be set to “0”.

bych to chápal tak, že stačí příkazem MOVX ukládat hodnotu v rozsahu 000H až 7FFH do adresy 96H, přičemž po resetu procesoru tato hodnota zůstane?

Honza

To jsi pochopil špatně. Uložením “1” do bitu EEMEN v registru EECON, který se nachází v SFR na adrese 96h nastavíš to, že instrukce MOVX, která normálně čte/zapisuje data do externí paměti, bude číst/zapisovat do interní EEPROM. Rozsah adres interní EEPROM je 000h-7FFh. Pokud potřebuješ číst/zapisovat do externí paměti, miusíš výše zmíněný bit nastavit na “0”.

Áha. Moc to neovládám, tak jsem to nepochopil. Našel jsem tyto stránky
mikroe.com/chapters/view/67/ … ontroller/
a pokud to už chápu, tak stačí udělat toto?

mov 96h,#00001011b

a pak už jen stačí pomocí movx dávat data do EEPROM takto?

movx 000h,nějaká data

Jen nevím, zda ty prvni 2 bity RDY/BSY a WRTINH mám ponechat v log.1 jak je v té tabulce

Díky, Honza

A nebo stačí jen udělat?
setb 96h

SETB můžeš použít pouze na bitově adresovatelná místa, takže nevím, jestli to tady lze.

RDY/BSY a /WRTINH jsou readonly signály.

Když si přečteš, co píšou o těchto 2 signálech v tom odkazu, který jsi sem dal, pak zjistíš, že když je RDY/BSY signál v log. 0, pak je EEPROM zaneprázdněna zápisem hodnoty a trvá to cca 4 ms. Pokud je v log. 1, můžeš zapsat další byte. /WRTINH znamená, že pokud je v log. 1, můžeš s EEPROM normálně pracovat. Pokud je v log. 0, pak to znamená, že HW detekoval příiš nízké napětí pro zápis do EEPROM a tudíž nelze do EEPROM zapisovat a případná rozpracovaná operace je/byla zrušena.

Díky za překlad. Ani s googlem jsem nechápal souvislosti. Hned po restartu je podle toho odkazu nastaven bit 0 a 1 do log.1 a zbytek v log.0.
Když tedy nastavím ještě navíc k tomu do log.1 EEEMEN (zpřístupní interní EEPROM) a zároveň před zápisem do pamětí musím nastavit do log.1 EEMWE a po dokončení zápisu vrátit do log.0?

Kouknul jsem na tohle do datasheetu a pokud to správně chápu, tak EEMEN přepíná zápis do interní EEPROM pomocí intstrukce MOVX s DPTR pointrem. EEMWE povoluje instrukci zápis bytu do EEPROM pomocí instrukce MOVX. Nicméně tohle budeš asi muset vyzkoušet sám, protože má jediná 89S8253 šlape v DCF hodinách, které jsem postavil před asi 4 roky a opravdu ji odtud nemám chuť dolovat.