PIC 16F628 EEPROM
http://pandatron.cz/?156&skola_programovani_pic-12_dil
Škola programování PIC 12
Interní EEPROM
Tyto procesory, narozdíl od Atmelů mají integrovanou malou EEPROM paměť. Tedy paměť, která si uchová svůj obsah i po vypnutí napájení. Její velikost je 128 bytů (u 16F84 jen 64 bytů).
Paměť je možné libovolně číst i do ní zapisovat, nejprve si však ukážeme, jak do ní zapsat data už při programování procesoru.
org 0x2100
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
org 00h
goto INIT
Takhle by tedy měl vypadat úvod programu, pokud chcete při programování procesoru již zapsat data do EEPROM. Řádky samozřejmě nemusí být všechny.
CTIEE movf EADR,W
bsf STATUS,RP0
movwf EEADR
bsf EECON1,RD
movf EEDATA,W
bcf STATUS,RP0
return
Tento podprogram CTIEE slouží ke čtení dat z EEPROM. V úvodu celého programu je ještě třeba vytvořit registr EADR.
Obsluha podprogramu je velice jednoduchá, do registru EADR vložíte adresu ze které chcete číst a poté příkazem CALL CTIEE zavoláte tento podprogram. Ten na určené adrese přečte hodnotu, uloží ji do pracovního registru a skončí.
PISEE bsf STATUS,RP0
btfsc EECON1,WR
goto PISEE
bcf STATUS, RP0
movf EADR,0
bsf STATUS,RP0
movwf EEADR
bcf STATUS,RP0
movf CISLO,0
bsf STATUS,RP0
movwf EEDATA
bsf EECON1,WREN
bcf INTCON,GIE
movlw H'55'
movwf EECON2
movlw H'AA'
movwf EECON2
bsf EECON1,WR
bcf EECON1,WREN
bsf INTCON,GIE
bcf STATUS, RP0
return
Podprogram pro zápis dat je již trochu složitější. Nejprve je třeba si vysvětlit, že se jedná o paměť typu EEPROM, tedy paměť u které zápis trvá i několik ms. Proto je v úvodu podprogramu čekací smyčka, které testuje zda již skončil případný předchozí zápis. Za ní následuje přesun hodnot z registru EADR (adresa) a CISLO (zapisovaná hodnota) do systémových registrů. Poté se zakáží všechna přerušení a dvěma po sobě jdoucími "klíči" (55h a HHh) se odemkne zápis do paměti. Pak se již povolí zápis a je hotovo. Nakonec se ještě zpět povolí všechna přerušení a je konec podprogramu. Zápis dat pak již proběhne automaticky.
Po skončení zápisu se doporučuje provést kontrolní čtení, ale není to třeba.
Zde je ke stažení ukázkový program se všemi těmito ukázkami: