Choď na obsah Choď na menu
 

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:

ASM
HEX