Autor Tema: Como usar ASM en CCS pic18 MULWF y MULLW no me funciona[SOLUCIONADO]  (Leído 5273 veces)

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

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Hola!

Estoy tratando de reducir intrucciones generadas por el compilador , asi ahorrar tiempo.Uso un pic18F252
Leyendo sus especificaciones este contiene Hardware multiplicador de 8x8 con resultado de 16bits

Estoy multiplicando 8*8=16bits en CCS

Código: [Seleccionar]
tiempos[servos]*=40; <---- Esto con el CCS
y me genera este asm que consume 38ciclos
Código: [Seleccionar]
117:               tiempos[servos]*=40; //250 pasos 8us x paso como prescala 0.2xtic
  056E    90D8     BCF 0xfd8, 0, ACCESS
  0570    343D     RLCF 0x3d, W, ACCESS
  0572    6A03     CLRF 0x3, ACCESS
  0574    0F3E     ADDLW 0x3e
  0576    6EE9     MOVWF 0xfe9, ACCESS
  0578    0E00     MOVLW 0
  057A    2003     ADDWFC 0x3, W, ACCESS
  057C    6EEA     MOVWF 0xfea, ACCESS
  057E    CFEC     MOVFF 0xfec, 0x6b
  0582    52ED     MOVF 0xfed, F, ACCESS
  0584    CFEF     MOVFF 0xfef, 0x6a
  0588    6A6D     CLRF 0x6d, ACCESS
  058A    0E28     MOVLW 0x28
  058C    6E6C     MOVWF 0x6c, ACCESS
  058E    DF01     RCALL 0x392
  0590    C001     MOVFF 0x1, 0xfef
  0594    C002     MOVFF 0x2, 0xfec

Revisando las especificaciones la Instruccionconsume solo 1ciclo
Código: [Seleccionar]
MULWF
;Por lo que escribi esto
int aux=50;
#asm
movf   aux,0
MULWF 0x0a

#endasm


en el Disasembley list
Código: [Seleccionar]
78:                #asm
79:                movf aux,0
  050E    5062     MOVF 0x62, W, ACCESS
80:                MULWF 0x0a
  0510    020A     MULWF 0xa, ACCESS
81:                
82:                #endasm

No me da problemas de compilacion pero en el mplab no veo que multiplique , no hay ningun valor en el registro PRODH:PRODL

Alguno de ustedes ha tenido el mismo problema , o trabaja con estas intrucciones con el CCS

Revise el foro de CCS C pero no dan respues y parece que no funciona esa instruccion en el compilador >_<

Agradezco su ayuda

Adjunto imagen, como ven despues de ejecutar no hay ningun resultado , veo que W si carga bien el valor.Pero la multiplicacion no se hace >_<

http://img143.imageshack.us/img143/6749/mulwf.jpg

« Última modificación: 31 de Marzo de 2010, 12:04:48 por un Moderador »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como usar AMS en CCS pic18 MULWF y MULLW no me funciona
« Respuesta #1 en: 31 de Marzo de 2010, 08:39:51 »
Yo acabo de probar esto:

Código: C
  1. char Cte;
  2.  
  3.    Cte=20;
  4.    #asm
  5.       MOVLW 0x0A;
  6.       MULWF Cte
  7.       MOVFF 0xFF3,Cte
  8.    #endasm

Y en CCS 4.093 funciona  :?
No contesto mensajes privados, las consultas en el foro

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Como usar AMS en CCS pic18 MULWF y MULLW no me funciona
« Respuesta #2 en: 31 de Marzo de 2010, 08:59:31 »
al hacer MULWF 0x0a, estás multiplicando el registro W con lo que contiene el lugar de memoria 0x0a, no se que es lo que tienes guardado alli, lo más probable es que sea 0x00.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como usar AMS en CCS pic18 MULWF y MULLW no me funciona
« Respuesta #3 en: 31 de Marzo de 2010, 09:02:20 »
al hacer MULWF 0x0a, estás multiplicando el registro W con lo que contiene el lugar de memoria 0x0a, no se que es lo que tienes guardado alli, lo más probable es que sea 0x00.

No, por lo que se ve en el código, mueve aux a W, donde aux es 50, luego multiplica W*10.

En mi caso hice lo mismo que hacer Cte*=10 y funciono, lo comprobé en proteus que se me olvido mencionar.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Como usar AMS en CCS pic18 MULWF y MULLW no me funciona
« Respuesta #4 en: 31 de Marzo de 2010, 09:20:00 »
 :? :? :? :5] :5] :5]

Probaré nuevamente , Tengo la version 4.105

--------------------------------------------

para que ocupas esto : 
Código: [Seleccionar]
MOVFF 0xFF3,Cte

Con esa linea pasas PRODL a Cte ????


Todavia no obtengo nada de nada en PRODH:PRODL >_<

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Como usar AMS en CCS pic18 MULWF y MULLW no me funciona[SOLUCIONADO]
« Respuesta #5 en: 31 de Marzo de 2010, 09:40:22 »
Gracias por su ayuda

Se ha resuelto el problema y de manera misteriosa >_<

No modifique nada ,se cerró MPLAB y CCS como 3 veces , luego se murio el MPLAB y ahora que probe nuevamente ha funcionado sin problemas. :5] :5] :5] :5]

Probe MULWF y MULLW

Las dos funcionaron correctamente
Código: [Seleccionar]
#asm
movlw 0xff
mullw 0xff
#endasm

Y probe la anterior y el ejemplo que pusiste Suky

Esto de MULWF y MULLW hay unos cuantos post en el foro de CCS con mismos problemas que no les funciona >_<

Muchas gracias!
« Última modificación: 31 de Marzo de 2010, 09:43:37 por AKENAFAB »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como usar AMS en CCS pic18 MULWF y MULLW no me funciona[SOLUCIONADO]
« Respuesta #6 en: 31 de Marzo de 2010, 10:39:31 »
 :shock: Ese MPLAB  :x  :D

No contesto mensajes privados, las consultas en el foro

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Como usar AMS en CCS pic18 MULWF y MULLW no me funciona[SOLUCIONADO]
« Respuesta #7 en: 31 de Marzo de 2010, 11:54:44 »
Me había quedado con la duda, y al final lo simulé.

al hacer
#asm
movlw  0xff
mullw   0xff   
#endasm

la multiplicación la hace correctamente

Al hacer
#asm
movlw  0xff
mulwf    0x0a   
#endasm

en este caso el producto da 0,
me fijo en el lugar de memoria 0x0a, y efectivamente tiene el valor 0,
lo que hice es cargarle 0xff en ese lugar de memoria y ahora si la multiplicación la hace correctamente.


cuando haces
Código: [Seleccionar]
char Cte;
 
   Cte=20;
   #asm
      MOVLW 0x0A;
      MULWF Cte
      MOVFF 0xFF3,Cte
   #endasm

lo que estás haciendo, creo yo, es decirle que multiplique lo que está en el registro W con lo que contiene el lugar de memoria apuntado por Cte, que en este ejemplo vale 20.
Espero se haya entendido lo que dije.


Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Como usar ASM en CCS pic18 MULWF y MULLW no me funciona[SOLUCIONADO]
« Respuesta #8 en: 31 de Marzo de 2010, 17:47:30 »
Asi es pablomanieri

Hice las 2 operaciones como lo comentas e igual cargaba valor en 0x0A , tambien ejecute MULLW , pero ya ven , eran problemas técnicos pues no cambie nada de nada.

Gracias!

Saludos!

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Como usar ASM en CCS pic18 MULWF y MULLW no me funciona[SOLUCIONADO]
« Respuesta #9 en: 31 de Marzo de 2010, 17:52:38 »
ok, aunque no era ese el problema me había quedado con la duda de lo que hacía mulwf. Por eso lo simulé.


 

anything