16f628'de EEPROM'a veri yazma

Başlatan alabora, 31 Mayıs 2006, 14:50:19

alabora

İyi günler;
Yukarıda da yazdığım gibi 16f628in eeprom belleğine veri yazmak istiyorum. burada araştırdım ama dökümana rastlayamadım. Datasheetde de okudum. Orada yazanları yaptım ama MPLAB'da simüle ederken eepromda dataları göremiyorum. Ya ben mantığı kapamadım. bana dataları nasıl yazacağımı anlatırsanız sevinirim...

alabora

Devam olarak da yazdığım kodu ilave ediyorum....

************************************   
#include   P16F628.INC
ERRORLEVEL -203,-302

ADRS_REG EQU 0X20
DATA_REG EQU 0X21
BEKLE_REG EQU 0X22


   ORG 00
   GOTO MAIN

MAIN
   CLRF ADRS_REG
   CLRF DATA_REG
   BANKSEL EEADR
   CLRF EEADR
   CLRF EEDATA
   MOVLW H'7F'
   MOVWF ADRS_REG
   MOVLW H'00'
   MOVWF DATA_REG
   
EPPROM_
   BANKSEL EEADR
   MOVF ADRS_REG,0
   MOVWF EEADR
   MOVF DATA_REG,0
   movwf EEDATA
   BCF INTCON,GIE
   bsf EECON1,WREN
   BTFSC EECON1,WR
   GOTO $-1
   BSF EECON1,WR   
   DECFSZ ADRS_REG
   GOTO EPPROM_
   GOTO BITIR
   
BEKLE   
   MOVLW H'0F'
   MOVWF BEKLE_REG
DONGU
   DECFSZ BEKLE_REG,1
GOTO DONGU
   RETURN
BITIR   
   END
*****************************

dogada

sayın ,alabora benim 628A için kullandığım asm aşağıda biraz düzenleyip
kullanabilirsin.

EE_SAYAÇ_YAZ
   bsf      STATUS,RP0      ;
   movlw      0x12         ;EEPROM ADRESİNİ
   movwf      EEADR      ;BELİRLE
   bcf      STATUS,RP0      ;
   movf      YAZILACAKDEGER,w   ;DEĞERİ ATA
   call      EE_YAZ         ;
   movlw   0x12           ;
   call      EE_OKU         ;
   bcf      STATUS,RP0      ;
   xorwf      YAZILACAKDEGER,w   ;EEPROM KAYDI OĞRU MU?
   btfss      STATUS,Z         ;
   goto      $-11            ;DEĞİL TEKRAR YAZ



EE_YAZ
   bsf      STATUS,RP0      ;
   movwf      EEDATA      ;VERİYİ EEDATA'YA AKTAR
   bcf      STATUS,RP0       ;
   bcf       PIR1, EEIF          ;
   bsf      STATUS,RP0      ;
   movf      INTCON   ,w      ;   
   movwf   INTCON_GEÇİCİ      ;
   movlw      0x00         ;
   movwf    INTCON         ;
   movf       PIE1,w         ;
   movwf   PIE1_GEÇİCİ      ;
   movlw   0x00            ;
   movwf    PIE1            ;
   bsf      EECON1,WREN      ;
   movlw      0x55         ;BU BÖLÜMÜ KULLANMAK
   movwf      EECON2      ;ZORUNLU
   movlw      0xAA         ;
   movwf      EECON2      ;
   bsf      EECON1,WR         ;
   clrwdt
   btfsc      EECON1,WR         ;
   goto      $-2            ;
   bcf       EECON1,WREN       ;
   movf      INTCON_GEÇİCİ,w   ;
   movwf      INTCON      ;
   movf       PIE1_GEÇİCİ,w      ;
   movwf      PIE1         ;
   bcf      STATUS,RP0      ;
   return   
EE_OKU
   bsf      STATUS,RP0      ;
   movwf      EEADR      ;
   bsf      EECON1,RD         ;
   movf      EEDATA,w         ;
   return
******