Ahora pones
#include <xc.inc>
Por las dudas... La extensión del archivo es .s no ?
PROCESSOR 16F877A
#include <xc.inc>
//#include <pic16f877a.inc>
config FOSC=XT
config WDTE=OFF
config PWRTE=ON
config BOREN=ON
config LVP=OFF
config CPD=OFF
config WRT=OFF
config DEBUG=OFF
config CP=OFF
;
; Definicion de variables
;
PSECT MainData,global,class=RAM,space=1,delta=1,noexec
GLOBAL del1, del2, del3, del4, temp, count, recreg
del1: DS 1
del2: DS 1
del3: DS 1
del4: DS 1
temp: DS 1
count: DS 1
recreg: DS 1
;
; Power-On-Reset entry point
;
PSECT Por_Vec,global,class=CODE,delta=2
GLOBAL resetVec
resetVec:
PAGESEL main
goto main
;
; Definicion de variables para interrupcion
;
PSECT Isr_Data,global,class=COMMON,space=1,delta=1,noexec
GLOBAL W_TEMP, ST_TEMP, FS_TEMP, PL_TEMP, Guarda_RESUL
W_TEMP: DS 1
ST_TEMP: DS 1
FS_TEMP: DS 1
PL_TEMP: DS 1
Guarda_RESUL: DS 1
;
; Vector de interruptor and handler
;
PSECT Isr_Vec,global,class=CODE,delta=2
IsrVec:
movwf W_TEMP
swapf STATUS,W
clrf STATUS
movwf ST_TEMP
movf PCLATH, w
movwf PL_TEMP
clrf PCLATH
movf FSR, w
movwf FS_TEMP
IntHandler:
nop
FinInterrupcion:
movf FS_TEMP, w
movwf FSR
movf PL_TEMP, w
movwf PCLATH
swapf ST_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
retfie
;
; Configuracion de puertos y primera parte del programa
; Esta parte va en el BANK0
;
PSECT MainCode,global,class=CODE,delta=2
main:
BANKSEL(PORTB)
clrf PORTB
clrf PORTC
movlw 0x00
BANKSEL(TRISB)
movwf TRISB ; PORT B OUTPUT
movwf TRISC ; PORT C OUTPUT
LOOP:
BANKSEL(PORTB)
movlw 0x00
movwf PORTB
call ChangeC
call delay
movlw 0x0f
movwf PORTB
call ChangeC
call delay
goto LOOP
delay:
BANKSEL(del1)
movlw 2
movwf BANKMASK(del1)
d2:
movlw 0xff
movwf BANKMASK(del2)
d1:
movlw 0xff
movwf BANKMASK(del3)
d3:
decfsz BANKMASK(del3),F
goto d3
decfsz BANKMASK(del2),F
goto d1
decfsz BANKMASK(del1),F
goto d2
return
;
; Rutina para cambiar el puerto C
; Y esta parte va al BANK1
;
PSECT MainPort,global,class=CODE,delta=2
;ORG 08F0h ; Si descomento esta linea sale el error (1347) da igual el numero que ponga
ChangeC:
BANKSEL(PORTC)
movwf PORTC
return
;
; Final del programa
;
END resetVec Estoy bajando el MPLAB X para ayudarte... Lo que me sorprendió ver que el IDE pesaba 1Gb+, que locura.... Esto sin compiladores ni nada.
EDIT: Logre que compilara...
Direcciones de memoria. Parece que llena desde 0x7FF hacia atras.
PSECT MainCode, global, class=CODE, delta=2, abs
ORG 001Fh
main:
PSECT MainPort,global,class=CODE,delta=2,abs
ORG 08F0h
ChangeC:
BANKSEL(ChangeC)
call BANKMASK(ChangeC)
Nuevamente, a no ser que vos le agregaste algo mas, por ejemplo ubicaciones al linker.
Respecto a lo que comentas, seguramente sea porque cambia de pagina, los bancos son de la RAM.
Asi que tenes que usar el PAGESELCódigo: ASM
PAGESEL ChangeC call ChangeC
-Wl Pass comma-separated options directly to the linker
-Xlinker Pass option directly to the linker
Hola Loudness, yo no pude seguir probando, estos dias son caoticos en la escuela, porque hay que hacer informes, cerrar calificaciones, etc. Y los tiempos libres son nulos.
Tampoco probé demasiado porque no pude.