PIC16F84 - eeprom для чтения и записи - PullRequest
0 голосов
/ 09 марта 2012

У меня есть задача написать подпрограммы чтения / записи eeprom для микроконтроллера PIC16F84.Я написал такой код:

    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.Кажется, что это не работает правильно.

1 Ответ

0 голосов
/ 09 марта 2012

Согласно данным таблицы, ваш код чтения 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
...