【问题标题】:Read EEPROM in loop循环读取 EEPROM
【发布时间】:2014-02-26 21:07:38
【问题描述】:

我试图从 PIC16F84(在 MPLAB 中模拟)中的已初始化 EEPROM 中读取信息,但无法理解,为什么在调试器中我总是得到二进制“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

【问题讨论】:

    标签: assembly microcontroller pic microchip mplab


    【解决方案1】:

    你有两个错误!

    1) 在开始读取 EEPROM 时设置指针值,如:

    movl    1 
    movwf   pointer
    

    2)变化:

    movfw       EEADR       ; get address
    

    到...

    movwf       EEADR       ; set address
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      相关资源
      最近更新 更多