2012-03-09 17 views
0

私は、PIC16F84マイクロコントローラ用のeeprom読み取り/書き込みサブルーチンを書く作業があります。私はそのようなコードを書いた:PIC16F84 - eeprom読み取りと書き込み

EEPROM_Read 
     clrw 
     bsf  STATUS, RP0 ; Bank0 
     movlw DATA_EE_ADDR ; Any location in Data EEPROM memory space 
     movwf EEADR  ; Address to read 
     bsf  EECON1, RD ; EE Read 

     movlw EEDATA 
     bcf  STATUS, RP0 ; Bank0 
     return 

EEPROM_Write   
     bcf  INTCON,GIE  ;disable interrupts for EEPROM write 
      banksel  EEADR   ;bank 2 
      movfw  DATA_EE_ADDR  ;load write address to EEPROM address pointer 
      movwf  EEADR 
      movfw  DATA_EE_DATA  ;load write data to EEPROM data buffer 
      movwf  EEDATA 
      banksel  EECON1   ;bank 3 
      bsf   EECON1,WREN   ;enable EEPROM write 
      movlw  0x55 ;unlock codes 
      movwf  EECON2 
      movlw  0xAA 
      movwf  EECON2 
      bsf   EECON1,WR  ;enable EEPROM write 
      btfsc  EECON1,WR  ;wait here until write completes 
      goto  $-1 
      bcf   EECON1,WREN  ;write complete, disable write mode 
      banksel  0 ;bank 0 
      movlw  0 ;are interrupts being used? 
      xorwf  INTCON,W 
      btfss  STATUS,Z 
      bsf  INTCON,GIE  ;yes,enable interrupts 
      return 

それは正しいですか?私はEEProm_Readに問題があります。それは正しく動作しないようです。 EEADRレジスタは、あなたのコードの場合と同様に、メモリバンク、バンク1で0とないであるため

答えて

0

データシートの情報によると、あなたのEEPROMは、コードを読んで、間違っている:

正しいコードです:

BCF STATUS, RP0 ; Bank 0 
MOVLW DATA_EE_ADDR 
MOVWF EEADR   ; Address to read 
BSF STATUS, RP0 ; Bank 1 
BSF EECON1, RD  ; EE Read 
BCF STATUS, RP0 ; Bank 0 
MOVF EEDATA, W  ; W = EEDATA 
関連する問題