TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: DieccoF en 02 de Abril de 2010, 14:41:41

Título: Alguien me explica este error ??
Publicado 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 ???
Título: Re: Alguien me explica este error ??
Publicado por: AKENAFAB en 02 de Abril de 2010, 15:42:45

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 !
Título: Re: Alguien me explica este error ??
Publicado por: Suky en 02 de Abril de 2010, 16:41:36
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!
Título: Re: Alguien me explica este error ??
Publicado por: AKENAFAB en 02 de Abril de 2010, 19:17:29
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 ^^
Título: Re: Alguien me explica este error ??
Publicado por: alekspm en 22 de Mayo de 2010, 17:20:17
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
Título: Re: Alguien me explica este error ??
Publicado por: Leon Pic en 01 de Octubre de 2010, 01:36:37
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.
Título: Re: Alguien me explica este error ??
Publicado por: migsantiago en 01 de Octubre de 2010, 10:44:53
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.
Título: Re: Alguien me explica este error ??
Publicado por: Leon Pic en 01 de Octubre de 2010, 16:53:10
Muy buena observación Santiago. La verdad que no se me había ocurrido probar.
Pruebo y les cuento.
Título: Re: Alguien me explica este error ??
Publicado por: Leon Pic en 10 de Octubre de 2010, 14:32:42
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.
Título: Re: Alguien me explica este error ??
Publicado por: migsantiago en 10 de Octubre de 2010, 14:49:26
Qué bueno que diste con la solución. Un saludo.
Título: Re:Alguien me explica este error ??
Publicado por: israeliov en 17 de Mayo de 2017, 19:40:27
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!