Autor Tema: unas dudillas específicas de ASM para dspic  (Leído 4282 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado unoquepasa

  • PIC12
  • **
  • Mensajes: 65
unas dudillas específicas de ASM para dspic
« en: 13 de Enero de 2008, 00:34:07 »

       Hola, a todos, estoy empezando con los dspics ya he empezado a escribir un poco de código y empezando a tener los primeros problemas con el MPLAB que no me compila ciertas cosas. Ahí van las dudas:


              1.- ¿Cómo puedo meter un operando en formato de bits en vez de hexadecimal? En un pic por ejemplo se puede escribir b'00110011' pero aquí el MPLAB no se lo traga. Y otra cosa, ¿necesitaría poner #? es decir para meter el valor 1 en W0 sería: MOV.B b'00000001',W0    o sería: MOV.B #b'00000001',W0? Porqué en el libro de pics que estoy siguiendo no pone el #, pero para mí si que debería ponerlo ¿?
             2.- Me puedo referir al w0 como WREG indistintamente en el código sin ninguna diferencia en la práctica? Porque pensaba que sí, pero el mplab ha habido alguna orden que no se ha tragado que pusieses WREG, y lo he cambiado por W0 y ningún problema ¿?
             3.- Tengo unas subrutinas de LCD metidas en un programa principal. Me gustaría sacar la subrutina y meterla en un fichero de ensamblador a parte del principal, usarla en plan librería; pero no tengo muy claro como debo hacerlo. ¿Debo definir las variables que usa la librería en el programa principal o en la de la librería o es indistintamente? Como llamo a la librería... ¿funcionaría un CALL?

Y de momento nada más... creo

Un saludo y gracias!

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
Re: unas dudillas específicas de ASM para dspic
« Respuesta #1 en: 13 de Enero de 2008, 10:02:14 »

[1]   mov    #0b11111001110 , w0  ;

[2]
Código: [Seleccionar]
3.4.4.5 DESTINATION SELECT
The PIC18CXXX-compatible instructions accept WREG as an optional argument to
specify whether the result should be placed into WREG (W0) or into the file register. See
the “dsPIC30F/33F Programmer’s Reference Manual” (DS70157) for more details.
add sym, WREG

[3] deves declarar como global , tanto los procedimientos como los registros que desees .

Poner el include en Source Files del proyecto o tambien creo que con  .include "lcd.s" .   

Código: [Seleccionar]
.section .data
.global _INDICE
.global _LINEAS

.align 2
_LINEAS        : .space 2
_INDICE        : .space 2

.section .text

.global  _lcd_configura

_lcd_configura:
clr _LINEAS
clr _INDICE
mov w0,T4CON
bla
bla

return



Desconectado unoquepasa

  • PIC12
  • **
  • Mensajes: 65
Re: unas dudillas específicas de ASM para dspic
« Respuesta #2 en: 13 de Enero de 2008, 15:46:40 »
        Muchas gracias por la pronta respuesta, pero hay cosas que no me acaban de quedar claras:

     la 1º pregunta, ok con la respuesta, ahora luego lo probaré en el mplab
       la 2º por lo que entiendo que se puede poner WREG perfectamente, es más se refiere a las típicas instrucciones que puedes poner opcionalmente WREG, indicando que el resultado de la operación te lo guarde en ese registro, en vez de en la otra variable con la que estes operando. Pero el mplab no se tragaba WREG, y he tenido que poner W0 en todos los lados ¿?
         3º El codigo que pones supongo que sería ya la libraría del LCD con formato .s ¿Como llamo a la librería con un call?
            Veo también que dices que tengo que añadir un .include LCD.s en el codigo fuente del programa principal. Pero no me queda muy claro el tema de declaracion de variables. Pongamos que necesito una variable solo, llamada MIVARIABLE. Por lo que dices me vale con declararla en la librería y marcarla como global...  para declarar variables en la ram suelo seguir el formato de una plantilla de esta manera:

Código: [Seleccionar]
     
.section .xbss, bss, xmemory
MIVARIABLE: .space 1        ;Allocating space (in bytes) to variable


       Como ves la declaro en una zona de memoria ram llamada X, la pregunta es ¿si he declarado otras cosas ahí en el programa principal el compilador no tiene problemas y no las machaca, es decir sigue declarandolas a continuación de las que ya habían declaradas en el programa principal (efecto de deseado), o por el contrario las sobreescribe encima de las que ya había declaradas (efecto no deseado)? Supongo que no tendrá problemas, pero por asegurarme.
        Entonces segun esa declaración de variable, si añado un .global MIVARIABLE, ya lo tendría?

Muchas gracias y un saludo


EDITO:

          esto me está mosqueando, después de revisar el datasheet, en las operacion pone un ejemplo tipo:

MOV.B   TMR0,WREG

Pero el mplab me da error al hacer justamente: MOV.B   #0x06,WREG

¿alguna idea de porque? Sin embargo con W0 no da ningún problema... es normal o debería de preocuparme?
« Última modificación: 13 de Enero de 2008, 16:02:11 por unoquepasa »

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
Re: unas dudillas específicas de ASM para dspic
« Respuesta #3 en: 13 de Enero de 2008, 18:38:10 »
Example 4-18: Moving Data with WREG
Código: [Seleccionar]
MOV.B 0x1001, WREG         ; move the byte stored at location 0x1001 to W0
MOV 0x1000, WREG           ; move the word stored at location 0x1000 to W0
MOV.B WREG, TBLPAG         ; move the byte stored at W0 to the TBLPAG register
MOV WREG, 0x804            ; move the word stored at W0 to location 0x804

Es que los dsPICS tienen 16 WREG w0..w15 , puedes usar cualquiera de ellos , en este caso WREG entiendo sera igual a w0 .


y raro , si lo incluyo en Sourece files y defino 2 registros con el mismo nombre no da error .
si pones el include ejemplo :  .include "lcd.s" va bien .

Si ... lo que declaras como .global  puedes usarlo en cualquier parte con call,goto etc.

deverias ir provandolo y viendo lo que va haciendo

pop.suerte
retfie


Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: unas dudillas específicas de ASM para dspic
« Respuesta #4 en: 14 de Enero de 2008, 13:54:56 »
hola, el W0 vendría a ser el registro de trabajo de los dspic y también se lo usa como WREG, pero al parecer no se le pueden pasar los valores directamente, por ejm esto compila:

 mov #0x1234,w0
pero esto no: mov #0x1234,WREG

esto compila: dec 0x0850,WREG
pero esto no: dec 0x0850,w0

En todo caso si no va con WREG usa W0.
control de movimiento

Desconectado unoquepasa

  • PIC12
  • **
  • Mensajes: 65
Re: unas dudillas específicas de ASM para dspic
« Respuesta #5 en: 14 de Enero de 2008, 14:47:05 »

         Muchas gracias Renatox, pues tiraré a lo de si no es burro, burra  :mrgreen:. Parece ser por lo que dices, que para cargar valores directamente, use W0, pero para operaciones con otros operandos use WREG , no?

Un saludo!