TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: groundman en 15 de Agosto de 2010, 12:10:48

Título: registros fantasma en el 18F4550
Publicado por: groundman en 15 de Agosto de 2010, 12:10:48
hola.estoy empezando a programar los 18Fxxxx en ensembler.ya que este tema esta dedicado al asm.en los demas me dicen que lo mejor en estos pics,
es acerlo todo en C.
aunque no pongo contra.solo puedo decir que si se quiere aprender bien el funcionamiento de esta serie.hay que empezar desde los cimientos.
otra cosa es que solo nos interese realizar un programa que nos realize una funcion determinada y que nos funcione.cada cual tiene sus preferencias.

en la migracion de los 16F a los 18F me he dado cuenta de que esto es un mundo bastante diferente y con mayor complejidad.sin embargo tenemos
la mitad del trabajo realizado.al haber estudiado las series anteriores.y cullos modulos equivalentes no difieren mucho de entre ellos.solo la forma
en tratar los datos.

como primer problema que se me plantea,resulta que al declarar la etiqueta     include "18F4550.inc"
algunos etiquetas que definen el registro SSPCON2.como son ACKEN,ACKDT,ACKSTAT.con sus respectivos valores 0x04,0x05,0x06.
se introducen en la memoria ram como si los hubiera declarado en un CBLOOK.

tambien estan A,ADCS1,ACTVIE,ACQT0,y ABDOVF con sus respectivos valores 0x00,0x01,0x02,0x03,0x07.
y que ocupan sus respectivas direcciones tambien en la memoria RAM.

como estoy empezando con esta serie.supongo que no he declarado algo en el compilador para que esto no pase.
haber si le a pasado a alguien algo parecido.

saludos.

Título: Re: registros fantasma en el 18F4550
Publicado por: Suky en 15 de Agosto de 2010, 13:18:06
hola.estoy empezando a programar los 18Fxxxx en ensembler.ya que este tema esta dedicado al asm.en los demas me dicen que lo mejor en estos pics,
es acerlo todo en C.
aunque no pongo contra.solo puedo decir que si se quiere aprender bien el funcionamiento de esta serie.hay que empezar desde los cimientos.
otra cosa es que solo nos interese realizar un programa que nos realize una funcion determinada y que nos funcione.cada cual tiene sus preferencias.

E muy cierto lo que comentas, ayuda mucho a entender el funcionamiento. Pero con un par de proyectos alcanza, después sácales provecho y ahorra mucho tiempo programando en C.  ;-)

en la migracion de los 16F a los 18F me he dado cuenta de que esto es un mundo bastante diferente y con mayor complejidad.sin embargo tenemos
la mitad del trabajo realizado.al haber estudiado las series anteriores.y cullos modulos equivalentes no difieren mucho de entre ellos.solo la forma
en tratar los datos.

como primer problema que se me plantea,resulta que al declarar la etiqueta     include "18F4550.inc"
algunos etiquetas que definen el registro SSPCON2.como son ACKEN,ACKDT,ACKSTAT.con sus respectivos valores 0x04,0x05,0x06.
se introducen en la memoria ram como si los hubiera declarado en un CBLOOK.

tambien estan A,ADCS1,ACTVIE,ACQT0,y ABDOVF con sus respectivos valores 0x00,0x01,0x02,0x03,0x07.
y que ocupan sus respectivas direcciones tambien en la memoria RAM.

como estoy empezando con esta serie.supongo que no he declarado algo en el compilador para que esto no pase.
haber si le a pasado a alguien algo parecido.

saludos.



Te refieres a que se define:
Código: [Seleccionar]
SSPCON2         EQU  H'0FC5'
y:
Código: [Seleccionar]
;----- SSPCON2 Bits --------------------------------------------------------
GCEN            EQU  H'0007'
ACKSTAT         EQU  H'0006'
ACKDT           EQU  H'0005'
ACKEN           EQU  H'0004'
RCEN            EQU  H'0003'
PEN             EQU  H'0002'
RSEN            EQU  H'0001'
SEN             EQU  H'0000'

?

Estas definiciones dependen de como lo utilices, si tu haces:

Código: [Seleccionar]
movlw SSPCON2
Estás cargando el valor 0xFC5 al registro W.

Pero en cambio:

Código: [Seleccionar]
movwf SSPCON2
Estás cargando el contenido de W al registro SSPCON2.


Los bits son definidos para trabajar por ejemplo:

Código: [Seleccionar]
bsf SSPCON2, PEN
Estas seteando el bit PEN del registro SSPCON2.


Saludos!
Título: Re: registros fantasma en el 18F4550
Publicado por: groundman en 15 de Agosto de 2010, 15:48:19
gracias suky por tu explicacion.eso lo entiendo.

hay mucho registros en el p18F4550.inc  que se definen sus bit por una etiqueta para facilitar la programacion.
el problema esta en el porque toma el compilador a estas etiquetas como si fueran registros?.

te adjunto el programa para que veas lo que quiero decir.
Título: Re: registros fantasma en el 18F4550
Publicado por: Suky en 15 de Agosto de 2010, 15:55:40
No puedo abrir tu proyecto, porque tiene la simulación de proteus, y por lo visto me falta un archivo...  :5] Guardalo más simple por favor..


Saludos!
Título: Re: registros fantasma en el 18F4550
Publicado por: groundman en 15 de Agosto de 2010, 18:20:29
valla. lo pongo sin simulador.
Título: Re: registros fantasma en el 18F4550
Publicado por: Suky en 15 de Agosto de 2010, 20:33:11
gracias suky por tu explicacion.eso lo entiendo.

hay mucho registros en el p18F4550.inc  que se definen sus bit por una etiqueta para facilitar la programacion.
el problema esta en el porque toma el compilador a estas etiquetas como si fueran registros?.

te adjunto el programa para que veas lo que quiero decir.

Es cierto lo que comentas, toma esas definiciones como registros. Y es porque se utiliza la sentencia xxxx equ 0xXX para la definición. Pero no le des importancia, mientras tu lo utilices de forma correcta no habrá problemas.

Después viendo el código, y por más que estén comentados, ten en cuenta que estos microcontroladores tienen dos vectores de interrupciones ubicados en 0x08 y 0x18.


Saludos!
Título: Re: registros fantasma en el 18F4550
Publicado por: sander en 18 de Agosto de 2010, 11:06:28
Hola groundman hace tiempo estuve siguiendo tus pasos , puse lo que fui haciendo en este post (http://www.todopic.com.ar/foros/index.php?topic=22737.0) talvez y te pueda servir de algo.

Saludos
Título: Re: registros fantasma en el 18F4550
Publicado por: groundman en 21 de Agosto de 2010, 15:40:16

Es cierto lo que comentas, toma esas definiciones como registros. Y es porque se utiliza la sentencia xxxx equ 0xXX para la definición. Pero no le des importancia, mientras tu lo utilices de forma correcta no habrá problemas.

Después viendo el código, y por más que estén comentados, ten en cuenta que estos microcontroladores tienen dos vectores de interrupciones ubicados en 0x08 y 0x18.


Saludos!

tienes razon suky.no importa lo de las etiquetas.mientras los valores de los registros sean los que tienen que ser.aunque podemos confundirnos a la hora de programar si no estamos atentos.


esto debe de ser algun fallo del mplab.por eso  no me voy a romper la cabeza valla a que no tenga solucion.
Título: Re: registros fantasma en el 18F4550
Publicado por: groundman en 21 de Agosto de 2010, 15:42:31
Hola groundman hace tiempo estuve siguiendo tus pasos , puse lo que fui haciendo en este post (http://www.todopic.com.ar/foros/index.php?topic=22737.0) talvez y te pueda servir de algo.

Saludos

gracias sander.me va a resultar muy util tus ejemplos para empezar con esta serie de pic.
Título: Re: registros fantasma en el 18F4550
Publicado por: groundman en 21 de Agosto de 2010, 16:40:49
 :5] no puedo ignorar este error.

resulta que al insertar el archivo .inc y ponerlo a partir de la direccion 0x080 no hay ningun problema.
pero si lo pongo en la 0x079 ya empiezan los errores al compilar.

ya que el mplab ha cojido la configuracion de los bits _CPD_ON_5H del registro CONFIG5H como un registro.
y me ocupa la direccion 0x079 que realmente es un valor a asignar al CONFIG5H.

creo que no estoy declarando alguna directiva del compilador.
esto hay que buscar el fallo como sea. :?