Upis u eeprom za Pic16F628A
Evo deo listinga, tj. poziva za upis u eeprom i samog ciklusa upisa u isti:
UpisEEprom
call Wait
movf podatak1,0 ;podatak u W
MOVWF CONFIG_DATA ;priprema podatak1 za upis
movf BROJEE,0
MOVWF CONFIG_ADDR ;adresa u eepromu na koju se snima
call Upis
movf podatak2,0
MOVWF CONFIG_DATA
incf BROJEE,1 ;priprema podatak2 za upis
movf BROJEE,0
MOVWF CONFIG_ADDR
call Upis
incf BROJEE,1
movlw d'112' ;provera lokacije EEproma
xorwf BROJEE,0 ;ukupno za upis 112(0-111)
btfsc STATUS,2
clrf BROJEE
return
;DATA EEPROM WRITE
; podesi adresu i podatak
Upis
MOVF CONFIG_ADDR,W ;priprema adrese u EEprom za upis
BSF STATUS, RP0 ; Bank 1
MOVWF EEADR ; ADRESA EEPROM LOKACIJE
BCF STATUS, RP0 ; Bank 0
MOVF CONFIG_DATA,W ; Podatak koji se upisuje(podatak1...)
BSF STATUS, RP0 ; Bank 1
MOVWF EEDATA ; PODATAK ZA UPIS
BSF EECON1,WREN ; Dozvola Upisa
BCF INTCON, GIE ; Iskljuci INTerapte
MOVLW 0X55 ;
MOVWF EECON2 ; Prvi kljuc
MOVLW 0XAA ;
MOVWF EECON2 ; Drugi kljuc
BSF EECON1,WR ; Set WR bit - UPISI
btfsc EECON1,WR
goto $-1
nop ;probano i bez ovoga
BCF EECON1, WREN ; Zabrana Upisa
BSF INTCON,GIE ; Dozvoli INTerapte.
;PROVERA UPISA
MOVF EEDATA, W ; last written value in 'W'
BSF EECON1, RD ; start read at current address
SUBWF EEDATA, W ; subtract W from EEDATA
BTFSS STATUS, Z ; ZERO flag set?
GOTO write_error ; No, there was a write-error
BCF STATUS, RP0 ; Bank0
return ; continue program
write_error
NOP
GOTO INIT ;ovo je test
Dakle, ne verujem da postoji greška u ovim potprogramima (jer su rutine iz datascheet-a), ali u MPLAB-u 7.62 i na pločici(u praksi) nema upisa u eeprom. Prilikom simulacije korak po korak u MPLAB-u dolazim na labelu write_error, znači nema upisa.
Potprogram UpisEEprom lepo puni registre, dok u potprogramu Upis registar, EECON2 se ne puni ključem, a EECON1 lepo setuje bitove WREN i WR. Ipak upis u zadatu lokaciju CONFIG_ADDR - EEADR ne postoji.
Gde je greška?????
Da li postoji mogućnost da PLC prebaci zbog dužine celog programa (kao sa tabelom)? Program zauzima preko 500 bajta.
programske memorije.
Evo deo listinga, tj. poziva za upis u eeprom i samog ciklusa upisa u isti:
UpisEEprom
call Wait
movf podatak1,0 ;podatak u W
MOVWF CONFIG_DATA ;priprema podatak1 za upis
movf BROJEE,0
MOVWF CONFIG_ADDR ;adresa u eepromu na koju se snima
call Upis
movf podatak2,0
MOVWF CONFIG_DATA
incf BROJEE,1 ;priprema podatak2 za upis
movf BROJEE,0
MOVWF CONFIG_ADDR
call Upis
incf BROJEE,1
movlw d'112' ;provera lokacije EEproma
xorwf BROJEE,0 ;ukupno za upis 112(0-111)
btfsc STATUS,2
clrf BROJEE
return
;DATA EEPROM WRITE
; podesi adresu i podatak
Upis
MOVF CONFIG_ADDR,W ;priprema adrese u EEprom za upis
BSF STATUS, RP0 ; Bank 1
MOVWF EEADR ; ADRESA EEPROM LOKACIJE
BCF STATUS, RP0 ; Bank 0
MOVF CONFIG_DATA,W ; Podatak koji se upisuje(podatak1...)
BSF STATUS, RP0 ; Bank 1
MOVWF EEDATA ; PODATAK ZA UPIS
BSF EECON1,WREN ; Dozvola Upisa
BCF INTCON, GIE ; Iskljuci INTerapte
MOVLW 0X55 ;
MOVWF EECON2 ; Prvi kljuc
MOVLW 0XAA ;
MOVWF EECON2 ; Drugi kljuc
BSF EECON1,WR ; Set WR bit - UPISI
btfsc EECON1,WR
goto $-1
nop ;probano i bez ovoga
BCF EECON1, WREN ; Zabrana Upisa
BSF INTCON,GIE ; Dozvoli INTerapte.
;PROVERA UPISA
MOVF EEDATA, W ; last written value in 'W'
BSF EECON1, RD ; start read at current address
SUBWF EEDATA, W ; subtract W from EEDATA
BTFSS STATUS, Z ; ZERO flag set?
GOTO write_error ; No, there was a write-error
BCF STATUS, RP0 ; Bank0
return ; continue program
write_error
NOP
GOTO INIT ;ovo je test
Dakle, ne verujem da postoji greška u ovim potprogramima (jer su rutine iz datascheet-a), ali u MPLAB-u 7.62 i na pločici(u praksi) nema upisa u eeprom. Prilikom simulacije korak po korak u MPLAB-u dolazim na labelu write_error, znači nema upisa.
Potprogram UpisEEprom lepo puni registre, dok u potprogramu Upis registar, EECON2 se ne puni ključem, a EECON1 lepo setuje bitove WREN i WR. Ipak upis u zadatu lokaciju CONFIG_ADDR - EEADR ne postoji.
Gde je greška?????
Da li postoji mogućnost da PLC prebaci zbog dužine celog programa (kao sa tabelom)? Program zauzima preko 500 bajta.
programske memorije.