EEPROM PIC16F84A

Dobry den,
zkousim zapsat 1 byte do pameti EEPROM. Vse simuluju v mplabu 8.10.Dal jsem sledovat registry mezi nimiz je EECON2, kam ukladam hodnoty 55h a AAh, ale v tom sledovacim okne registr EECON2 nenabyde zadne hodnoty a do EEPROM se nic nezapise:(
Viz. muj kod:

LIST P=16F84A, R=HEX errorlevel -302 include<p16f84a.inc> __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ORG 000 BCF INTCON,GIE CLRF EEADR MOVLW H'C4' MOVWF EEDATA BANKSEL EECON1 BSF EECON1,WREN MOVLW H'55' MOVWF EECON2 MOVLW H'AA' MOVWF EECON2 BSF EECON1,WR BSF INTCON,GIE END
Kde je chyba? Predem dekuji za odpoved.

Doba trvání tvého programu je podstatně kratší než doba zápisu do EEPROM. Program skončí dřív, než se změna EEPROM projeví. S drobnou úpravou to je vidět:

[code] LIST P=16F84A, R=HEX
errorlevel -302
include<p16f84a.inc>
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
ORG 000
BCF INTCON,GIE
CLRF EEADR
MOVLW H’C4’
MOVWF EEDATA
BANKSEL EECON1
BSF EECON1,WREN
MOVLW H’55’
MOVWF EECON2
MOVLW H’AA’
MOVWF EECON2
BSF EECON1,WR
test
btfsc EECON1,WR
goto test
BSF INTCON,GIE

END
[/code]

[code];******************************** PIC16F84 ********************************
WRITE movwf EEDATA ; !!! W -> EEDATA (nastav EEADR) !!!
;-------------------------------
bsf STATUS,RP0 ; banka 1
bsf EECON1,WREN ; povolit zapis do EEPROM

bcf	INTCON,GIE	; zakazat vsechna preruseni

; ------------------------; aktivace zapisu
movlw 0x55 ; odblokovani zapisu (povinna povolovaci sekvence)
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR ; spustit zapis
; ------------------------; konec aktivace
bsf INTCON,GIE ; povolit vsechna preruseni

bcf	EECON1,WREN	; zakazat zapis do EEPROM
btfsc	EECON1,WR	; pockat na konec zapisu
goto	$-1
bcf	STATUS,RP0	; banka 0

;-------------------------------
return[/code]

První chybu máš v tom, že program končí END, nestihne dokončit zápis. Když před END napíšeš GOTO $, tak program zůstane stát na $ a stihne dokončit zápis.

Dekuji za tak rychle odpovedi. Presto se mi ten registr EECON2, kdyz ho sleduji nenaplni…v okne watch je stale v nem hodnota 0x00. A zapis do EEPROM se mi nepovede…je to stale v te testovaci smycce…jestli to neni nejaka chyba toho simulatoru nebo ja nevim…

Nedívej se na EECON2! Dívej se na hodnotu, kterou chceš zapsat do EEPROM, jestli se tam zapsala!!! Konkrétně na adresu 0x00 hodnotu 0xC4. Mě zapisuje program ode mne (0x00), tak i od Jankopa (0x04).

Dyt sem napsal, zese mi ani nezapise ta hodnota do EEPROM…mam otevreny okno kde sleduju pamet EEPROM. Myslim si, ze s tim ma neco spolecnyho ten registr EECON2, protoze do nej se mi nepovedlo zapsat zadnou hodnotu :frowning: a to jsem zkousel i moznost neprimeho adresovani pres registr FSR 89h…

EECON2 není registr !!! Je to napsáno i v datasheetu. Nelze z něj číst a nenabývá žádné hodnoty. Když spustíš program, který jsem výše uvedl přímo bez krokování, tak se během okamžiku zastaví a v EEPROM bude přepsaná hodnota. To je fakt. nehledej problémy, kde nejsou.

Když použiju v MPLABu program od Jankopa tak je je, tak mi na adresu 0x00 zapíše hodnotu 0x04! EECON2 je POŘÁD 0x00 i když se do něho zapisuje. Máš něco spatně. Zkus ten pokus, je to celej projekt
pokus.rar (9.3 KB)

No konecne se to povedlo!Musel jsem dat RUN a potom jsem musel dat HALT a pak teprv se mi zapsala ta hodnota do EEPROM a program skocil do ty nekonecny smycky goto $

Při krokování to muselo jít taky.

No neslo.Ale kazdopadne to je jedno tedka jsem to hodil do PICA…pustil ho a pak precetl a v EEPROM byla ta hodnota!:slight_smile: Takze to je OK. Dik za pomoc

Nechápu! Proč hodnotu 0x04? Zapisuje 0xC4.

Jinak k tomu problému. Zápis do EEPROM trvá cca 4ms. Simulace tohoto času 4ms s krokováním a defaultním nastavením simulátoru trvá cca 1 a 3/4 hod. Stačilo si počkat :smiley: Tyto závislosti je nutno pochopit.
Pokud chceš vidět zápis do EEPROM bezprostředně, tak stačí nastavit v simulátoru kmitočet procesoru nižší než 1KHz.

Jj, dik! Tedka to funguje hnedka i pri krokovani :slight_smile: Stacilo nastavit tu frekvenci!

Jsem se přepsal, místo C jsem napsal 0!