Prosím, potřebuji poradit.
Potřebuji v programu zapisovat do EEPROM. Dříve jsem bez problémů užíval EEPROM PIC16F627. Nyní zkouším PIC16F690 či PIC16F877A nezapíše se nic. Pokud je v adresovaném paměťovém místu jiná hodnota než FF dojde k přepsání na FF. Zkoušel jsem různý kód, ale výsledek je vždy stejný - originál z datasheetu i tento od HONZY:
LIST P = 16F877A, R = DEC
include p16f877A.inc
__CONFIG B'11111100110001'
c1 EQU h'20' ;proměnné pro cykly
c2 EQU h'21'
ORG 0000H
BSF STATUS,RP0
BCF STATUS,RP1 ;nastavena banka1
MOVLW B'00000110'
MOVLW b'00000000' ;binární hodnota do W ;1=input,0=output
MOVWF TRISB ;nastavení portu
BCF STATUS,RP0 ;Banka0
MOVLW b'00000000' ;binarni hodnota pro zhasnuti portu
MOVWF PORTB ;Zapsat do PORTB
;**************************************************************************
; Write EEPROM
; nastav EEADR a EEDATA
;**************************************************************************
banksel EEDATA
movlw 10 ;příprava dat
MOVWF EEDATA ;
movlw 1 ;nastavení adresy
MOVWF EEADR ;do ukazatele
banksel PIR2
bcf PIR2,EEIF ; smaz bit kompletniho zapisu
banksel EECON1
bcf EECON1,EEPGD ; nastaveni datove pameti
bsf EECON1,WREN ; povolit zapis do EEPROM
bcf INTCON,GIE ; !!! zakazano preruseni !!!
;-----------------------; aktivace zapisu
movlw 055h ; povinna povolovací sekvence
movwf EECON2
movlw 0AAh
movwf EECON2
bsf EECON1,WR ; spustit zapis
;-----------------------; konec aktivace
banksel PIR2
btfss PIR2,EEIF ; pockat na konec zapisu
goto $-1
banksel EECON1
bcf EECON1,WREN ; zakazat zapis do EEPROM
banksel 0
bsf INTCON,GIE ; !!! povoleno preruseni !!!
;---------------------------------------------------------------------
banksel PORTB
zacatek BSF PORTB,0 ;rozsviti rb0
CALL cekej ;podprogram cekej
BCF PORTB,0 ;zhasne rb0
BSF PORTB,1
CALL cekej
BCF PORTB,1
BSF PORTB,2
CALL cekej
BCF PORTB,2
BSF PORTB,3
CALL cekej
BCF PORTB,3
BSF PORTB,4
CALL cekej
BCF PORTB,4
BSF PORTB,5
CALL cekej
BCF PORTB,5
BSF PORTB,6
CALL cekej
BCF PORTB,6
BSF PORTB,7
CALL cekej
BCF PORTB,7
GOTO zacatek ;skok na návěstí zacatek
;-----------------------------------------------------------------
;program pro čekání
cekej MOVLW 225 ;podprogram čekání
MOVWF c2 ;trvá asi 0.2s
wait2 MOVLW 255
MOVWF c1
wait1 DECFSZ c1,1
GOTO wait1
DECFSZ c2,1
GOTO wait2
RETURN ;návrat z podprogramu
END ;konec programu
Díky Martin
administrator: přejmenováno z "Nelze zapisovat do EEPROM"