TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: DieccoF en 02 de Abril de 2010, 14:41:41
-
Estoy trabajando con el 16F873 y en el mplab me surge este error.. alguien me lo explica ??
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\mplink.exe" /p16F873 "Nuevo Diefcom.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"Nuevo Diefcom.cof" /M"Nuevo Diefcom.map" /W
MPLINK 4.30.01, Linker
Copyright (c) 2009 Microchip Technology Inc.
Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x00001934
Errors : 1
Link step failed.
----------------------------------------------------------------------
Debug build of project `C:\Documents and Settings\Administrador\Escritorio\Nuevo Diefcom\Nuevo Diefcom.mcp' failed.
Language tool versions: MPASMWIN.exe v5.30.01, mplink.exe v4.30.01
Preprocessor symbol `__DEBUG' is defined.
Fri Apr 02 14:50:43 2010
----------------------------------------------------------------------
BUILD FAILED
No puedo continuar.... Habre superado el rango del pic ???
-
No has indicado desde que posicion inicia tu programa
Esta Org0 --- Reset
Org 0x004 ... Interrupcion
Luego Org --0x020 programa <---- Uso 20 porque apartir de esa direccion ya no hay registros.
--------------------------------------------------------
Si puedes sube tu programa !
-
Akena, a que registros te refieres en "<---- Uso 20 porque apartir de esa direccion ya no hay registros.", me parece que hay una confusión :undecided:
Saludos!
-
Para establecer el origen de programa
y Evitar escribir en los SFR.
Ya que estos se encuentran en la parte baja de los bancos de memoria de programa.
Si ando muy confundido xD corriganme Tiene tiempo que no acaricio assembly xDD :D :D :D
----------------------------------------------------------------------------------------
Creo que lo confundi con la RAM :P
Y el error que marca es ese que no ha establecido el origen del programa ^^
-
Hola, espero te sirva este ejemplo para corregir ese tipo de errores.
El code no tiene nada de dificultad. Puede compilarlo para cualquier modelo de PIC, solo cambia, en el renglon que dice LIST P=16Fxxx, por ejemplo P=16F873.
Y en donde dice INCLUDE <P16Fxxx.INC> por la libreria del PIC que vas a utilizar. Ejemplo: INCLUDE <P16F873.INI>.
El error que te genera puede deberse a que no indicas donde esta el vector de RESET, yo por ejemplo utilizo esto: RESET ORG 0x00 , goto INICIO y ORG 0x05.
El CP, WDT, PWRTE y el OSCilator los configuro por software en esta palabra de control: __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
Y siempre me cambio del Banco 0 al Banco 1. Estoy a tus órdenes. Atte. alekspm.
;Se han conectado 2 pulsadores en RA1 y RA2 hacia GND con una resistencia de 10k hacia Vcc.
;En RB0 y RB1 se conectan dos LEDs. El programa debe mostrar cuándo el valor lógico que
;introducen ambos pulsadores= 0. Para ello, si ambos pulsadores introducen un 0, los LEDs
;deben encenderse, y en los demás casos permanecen apagados.
LIST P=16Fxxx ;Se indica el tipo de procesador
RADIX HEX ;Sistema de numeración, todo en hexadecimal
INCLUDE <P16Fxxx.INC> ;Definición de registros internos en una librería
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
RESET ORG 0x00 ;Inicio en el vector de RESET
goto INICIO ;Salta a la primera instrucción del programa
ORG 0x05 ;Salta el vector de interrupción
INICIO bsf STATUS, RP0 ;Cambio la banco 1
bcf STATUS, RP1
clrf TRISB ;Puerta B como salida
movlw b'00000110' ;Puerta A como E/S digitales
movwf ADCON1
movlw b'00000110' ;RA1 y RA2 como entradas
movwf TRISA
bcf STATUS, RP0 ;Cambio al banco 0
clrf PORTB ;Borrado de LEDs
clrf PORTA ;Borrado de líneas no utilizadas en puerta A
BUCLE movf PORTA, W
btfss STATUS, Z ;Comprobación de Z= 1
goto APAGAR ;Si RA1 y RA2= 1
goto ENCENDER ;Si RA1 y RA2= 0
APAGAR clrf PORTB ;Se apagan los LEDs
goto BUCLE ;Para volver a comprobar
ENCENDER movlw 0x03 ;Se encienden los LEDs en RB0 y RB1
movwf PORTB
goto BUCLE ;Para volver a comprobar
END
-
Hola a todos.
Tengo el mismo problema pero el problema no es por la falta de ORG 0x00 y ORG 0x04
¿Cuál puede ser el problema real?
Estoy utilizando el MPLAB IDE 8.50.00.00 y el PIC 16F877
MPLINK 4.35, Linker
Copyright (c) 1998-2010 Microchip Technology Inc.
Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x000016a8
Errors : 1
Link step failed.
-
Hola a todos.
Tengo el mismo problema pero el problema no es por la falta de ORG 0x00 y ORG 0x04
¿Cuál puede ser el problema real?
Estoy utilizando el MPLAB IDE 8.50.00.00 y el PIC 16F877
MPLINK 4.35, Linker
Copyright (c) 1998-2010 Microchip Technology Inc.
Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x000016a8
Errors : 1
Link step failed.
Prueba dividiendo el programa en 2 partes. La primera parte la colocas en org 4 y la segunda parte la colocas en la segunda mitad de memoria de programa.
Talvez tengas una rutina call que no pueda direccionarse.
-
Muy buena observación Santiago. La verdad que no se me había ocurrido probar.
Pruebo y les cuento.
-
Ante todo quiero pedir disculpas por haber tardado 9 días en decir como solucioné el error.
Efectivamente, el problema es como lo indicaba Santiago.
No me había percatado de que había superado ampliamente los 2K de memoria de programa y no había dividido el programa. Con poner en el lugar correcto la directiva ORG 0x800 se solucionó el error.
Se me complicó tener que contar los 2047 líneas de instrucción por lo que busqué una manera de forzar a que el MPASM genere el archivo hex y por medio de la ventana de Program Memory ver donde está la segunda página.
Para ello cambié la configuración de compilar el proyecto de Relocatable a Absolute.
Con la opción Absolute, el MPASM me generó el hex y la ventana Program Memory se cargó con las instrucciones y pude ver más fácil en donde está la segunda página.
Para cambiar esta configuración (Relocatable; Absolute) hay que ir a:
Project ---> Built Opción ---> Project.
Elegir la etiqueta "MPASM/C17/C18 Suite y elegir la opción deseada.
Gracias mig por indicarme el posible problema y que fue ese.
-
Qué bueno que diste con la solución. Un saludo.
-
hola amigo, se que a pasado mucho tiempo des de que soluciono el problema espero me pueda ayudar.
tengo un problema muy parecido con el chip 16f877a que tiene 8K de memoria, al parecer mi programa se paso la cantidad de memoria y necesito dividirlo seguí sus indicaciones para cambiar a absolute pero mi error continua, creo que estoy poniendo en la linea incorrecta el
org 800h, como debo saber en que linea de ir esa dirección?
le agradeciere mucho si me puede ayudar con esa información!
saludos!