TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: standard en 20 de Febrero de 2007, 12:35:14

Título: Duda MPLAB
Publicado por: standard en 20 de Febrero de 2007, 12:35:14
 Saludos

 Para realizar mi primer proyecto había pensado en el PIC16f87x, que ha sido del que he encontrado más información, pero seleccionándolo en el MPLAB, aparece en rojo la opción compiler. ¿Necesito otro programa para ensamblar el código?
Gracias
Título: Re: Duda MPLAB
Publicado por: maunix en 20 de Febrero de 2007, 13:16:25
Saludos

 Para realizar mi primer proyecto había pensado en el PIC16f87x, que ha sido del que he encontrado más información, pero seleccionándolo en el MPLAB, aparece en rojo la opción compiler. ¿Necesito otro programa para ensamblar el código?
Gracias

Si has instalado bien el MPLAB, debieras haber también instalado el MPASM que te permitirá ensamblar el código.

Qué versión usas? Qué mensaje exacto te aparece? Podrías capturar la pantalla y enviarla?
Saludos
Título: Re: Duda MPLAB
Publicado por: standard en 20 de Febrero de 2007, 16:02:20
La versión es la 7.50.

Si sigo el ejemplo del tutorial, con el  PIC18F8722, consigo ensamblarlo pero si utilizo el PIC16F877 aparece este error:

Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F877 "f877tmpo.asm" /l"f877tmpo.lst" /e"f877tmpo.err" /o"f877tmpo.o"

Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPLink.exe" "C:\Archivos de programa\Microchip\Proy\16f887.lkr" "C:\Archivos de programa\Microchip\Proy\f877tmpo.o" /o"ilumina.cof" /M"ilumina.map"

MPLINK 4.06, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - section 'INT_VECTOR' can not fit the absolute section. Section 'INT_VECTOR' start=0x00000004, length=0x00000010
Errors    : 1

BUILD FAILED: Tue Feb 20 20:01:24 2007
Título: Re: Duda MPLAB
Publicado por: maunix en 20 de Febrero de 2007, 18:48:03
standard algunos comentarios

1) El uso del archivo de linkero .lkr en assembler, solo se usa cuando vas a escribir código en formato "relocatable".  Me parece extraño que uses esa forma de codificar si recién empiezas

2) El código de un 16F877 y un 18F8722 pueden llegar a ser muy diferentes ya que ambos poseen un core muy distinto.  Uno es de 14 bits (el 16F) y el otro de 16 bits (el 18F).

Podrías explayarte algo más y si es posible subir el código fuente, teniendo en cuenta de usar los marcos [ code ] y [ /code ]

Saludos
Título: Re: Duda MPLAB
Publicado por: standard en 22 de Febrero de 2007, 12:16:19
Saludos

Mirando las directivas en http://www2.ate.uniovi.es/fernando/Doc2005/Documentacion/Directivas%20MPASM.pdf (http://www2.ate.uniovi.es/fernando/Doc2005/Documentacion/Directivas%20MPASM.pdf)
y http://ww1.microchip.com/downloads/en/DeviceDoc/30400g.pdf (http://ww1.microchip.com/downloads/en/DeviceDoc/30400g.pdf)  llego a la conclusión de que
Dato11    SET     0x20; Declarar una variable
Cons12    EQU    0x23; Declarar una constante

No tengo claro si EQU reserva una dirección de memoria o si cuando ensambla sustituye la etiqueta por el valor.
Si pongo ésto:
Cons      EQU    0x23

Dato11       SET    0x20
Dato12       SET    0x21
Dato13       SET    0x22
Dato14       SET    0x23

Cuando miro en memoria veo que las direciones 20,21 y 22 son las variables y en la 23 está la constante ¿por qué?
¿Por qué pone la constante en la posición 23 de memoria si 23 es su valor?
gracias
Título: Re: Duda MPLAB
Publicado por: BrunoF en 22 de Febrero de 2007, 12:48:19
Saludos

Mirando las directivas en http://www2.ate.uniovi.es/fernando/Doc2005/Documentacion/Directivas%20MPASM.pdf (http://www2.ate.uniovi.es/fernando/Doc2005/Documentacion/Directivas%20MPASM.pdf)
y http://ww1.microchip.com/downloads/en/DeviceDoc/30400g.pdf (http://ww1.microchip.com/downloads/en/DeviceDoc/30400g.pdf)  llego a la conclusión de que
Dato11    SET     0x20; Declarar una variable
Cons12    EQU    0x23; Declarar una constante

No tengo claro si EQU reserva una dirección de memoria o si cuando ensambla sustituye la etiqueta por el valor.

No reserva la dirección de memoria. Simplemente sustituye el nombre de la constante por el numero de posicion de memoria asignado a la mísma.

Si pongo ésto:
Cons      EQU    0x23

Dato11       SET    0x20
Dato12       SET    0x21
Dato13       SET    0x22
Dato14       SET    0x23

Cuando miro en memoria veo que las direciones 20,21 y 22 son las variables y en la 23 está la constante ¿por qué?
¿Por qué pone la constante en la posición 23 de memoria si 23 es su valor?
gracias

"The set directive is functionally equivalent to the equ directive except that set values may be subsequently altered by other set directives."

Practicamente no hay diferencia.

Saludos.