2012-03-09 5 views
0

У меня есть задача написать eeprom для чтения/записи подпрограмм для микроконтроллера PIC16F84. Я написал такой код: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. Кажется, что это не работает.

ответ

0

Согласно информации, техническое описание код EEPROM чтение это неправильно, потому что EEADR регистр в памяти банка 0, а не в банке 1, как в вашем случае код:

Правильный код:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^