在 PIC16F1782 中实现查找 Table

Implementing Lookup Table in PIC16F1782

我正在使用 PIC16F1782 并尝试执行 retlw 查找 table。我已经编写了与 microchip AN556(实现 Table 读取) 有关的代码,但它不起作用。我使用 MPLAB X IDE v3.05 模拟了这段代码,发现 MOVLW HIGH IF_TABLE 将 0x80 设置为似乎是错误的WREG。然后 PC 会得到一个错误的值,当我调用 IF_TABLE 时,程序会转到错误的地方。如果你能帮助我,我将不胜感激。

ORG 0H
GOTO MAIN
;simple ISR for TIMER0 OverFlow
ORG 0004H
BTFSS INTCON,2
RETFIE
MOVLW 0X01
XORWF PORTA,F
BCF INTCON,2
RETFIE


MAIN
;OSCON,DACCON and portA configurations
BANKSEL OSCCON
MOVLW B'11110000'
MOVWF OSCCON
BANKSEL DACCON0
MOVLW B'10110000'
MOVWF DACCON0
BANKSEL OPTION_REG
MOVLW B'10000001'
MOVWF OPTION_REG
BANKSEL INTCON
MOVLW B'10100000'
MOVWF INTCON
BANKSEL TRISA
BANKSEL PORTA ;
CLRF PORTA ;Init PORTA
BANKSEL LATA ;Data Latch
CLRF LATA ;
BANKSEL ANSELA ;
CLRF ANSELA ;digital I/O
BANKSEL TRISA ;
MOVLW B'00000000'
MOVWF TRISA
BANKSEL PORTA
BSF PORTA,0

CLRF 0X27
CLRF 0X28
;the problem is in RPT loop
RPT:

MOVF 0X27,W
MOVWF 0X28
MOVLW LOW IF_TABLE

ADDWF 0X28,F

MOVLW HIGH IF_TABLE
BTFSC STATUS,C
ADDLW 1

MOVWF PCLATH

MOVF 0X28,W

CALL IF_TABLE

BANKSEL DACCON1
MOVWF DACCON1

INCF 0X27,F

GOTO RPT


IF_TABLE:

MOVWF PCL
RETLW D'126'
RETLW D'128'
RETLW D'131'
RETLW D'136'
.
.
.
END

要指向 table 中的实际插槽,您必须在索引中添加一个:

RPT:

MOVF 0X27,W
MOVWF 0X28
INCF 0x28,F         ; add here
MOVLW LOW IF_TABLE

此外,在 BANKSEL DACCON1 之后,您需要切换回组零

BANKSEL DACCON1
MOVWF DACCON1
BANKSEL 0X27     ; switch back here
INCF 0X27,F