[ dejan5 @ 28.02.2008. 00:30 ] @
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. |