Assembly, código não copila

Estou com problema nesse codigo:
quando eu copilo aparece esse erro:
Error - section ‘.org_2’ can not fit the absolute section. Section ‘.org_2’ start=0x00000018, length=0x00000002

####################################################################
;— registradores de uso geral —
CBLOCK 0x00
work_s
status_s
pc_s
ENDC
;—Vetor de Reset—
org 0x00
goto inicio
;—Vetor de Interrupcao high —
org 0x08
movff WREG,work_s ;salvamento de contexto
movff STATUS,status_s
movff BSR,pc_s

btfss INTCON,TMR0IF ;houve interrupcao
bra exit_int
bcf INTCON,TMR0IF
movlw 0x00
movwf TMR0L
btfss PORTC,0 ;testa se botão precionado
btg LATD,0 ;sim, inverte led

exit_int
movff work_s,WREG ;recupera o contexto
movff status_s,STATUS
movff pc_s,BSR
retfie

;—Vetor de Interrupcao low —
org 0x18
retfie
;—programa principal —
org 0x50
inicio
movlw 0x0F
movwf ADCON1 ;configura I/O Digitais
movlw 0x07
movwf CMCON ;desabilita os comparadores interno
movlw 0xA0
movwf INTCON ;habilita interrupcao global e pelo estouro do TM0
movlw 0x00
movwf TMR0L
movlw 0xC5
movwf T0CON ;liga TM0, modo 8 bits,
bsf TRISC,0
bcf TRISD,0
bcf LATD,0

loop

goto loop

END

########################################
esse código inverte estado de um pino do portd quando aperta o botão.

@paulo2,

Sem identação é muito difícil de entender direito um código em assembly, mas vamos lá.

Normalmente um vetor de interrupção tem pouco espaço de memoria contemplando em algumas vezes apenas 2 bytes para uma instrução jmp/goto.

Experimente fazer o seguinte

org 0x00
goto inicio
;—Vetor de Interrupcao high —
org 0x08
goto interrupcao
.
; codigo principal e loop infinito

interrupcao
; codigo de tratamento da interrupcao
.
.
retfie

Após o código da interrupção arrume a sua rotina inicial logo após o salto da interrupção

Compile e deixe o compilador escolher o endereço do salto para tratamento da interrupção no vetor 0x08

Não esqueça de terminar a rotina de tratamento da interrupção com um retfie e continue salvando o contexto como no seu código.

1 curtida