Чтение EEPROM в цикле

Я пытаюсь прочитать информацию из инициализированной EEPROM в PIC16F84 (которая смоделирована в MPLAB), и не могу понять, почему в отладчике я всегда получаю двоичное «1010» (= 0x0A в шестнадцатеричном формате), а в EEPROM есть 3 значения. Я их не правильно инициализировал или может другие значения расставили в другом порядке? список p=16F84 основание счисления шестнадцатеричное

;---------------------------------------------------------------------
RP0         equ 5
STATUS      equ 0x03
EEDATA      equ 0x08
EEADR       equ 0x09
EECON1      equ 0x88
RD          equ 0
;----------------------------------------------------------------------
counter     equ 0x10   
pointer     equ 0x15        
;----------------------------------------------------------------------
BANK0   macro
            bcf STATUS, RP0
        endm

BANK1   macro
            bsf STATUS, RP0
        endm
;----------------------------------------------------------------------

        org         0x2100      ; EEPROM Data
        de          b'1010', b'0110', b'0001'

        org         0x0000      
        goto        start      

start:
        BANK0

        clrw                    ; WREG = 0
        movlw       3           ; WREG = 3
        movwf       counter     ; counter = WREG => 3

init:
        clrw                    ; WREG = 0

read_data:
        incf        pointer, 1  ; pointer += 1
        movf        pointer, 0  ; WREG = pointer

        movfw       EEADR       ; get address
        BANK1
        bsf         EECON1, RD  ; read
        BANK0
        movf        EEDATA, W   ; WREG = EEDATA

        goto        read_data   


done_loop:
        goto done_loop
        end

person Relrin    schedule 26.02.2014    source источник


Ответы (1)


У тебя две ошибки!

1) Установите значение указателя при начале чтения EEPROM, например:

movl    1 
movwf   pointer

2) Изменить:

movfw       EEADR       ; get address

to...

movwf       EEADR       ; set address
person GJ.    schedule 27.02.2014