Autor Tema: convertir asm en CCS  (Leído 567 veces)

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

Desconectado zelote

  • PIC10
  • *
  • Mensajes: 1
convertir asm en CCS
« en: 30 de Marzo de 2018, 13:12:03 »
buenos dias, alguien me puede ayudar a convertir, asm xc16 a asm CCS, o simplemente a ccs
gracias.

este es en XC16:
asm("MOV _Multiplier, W4");
asm("MOV _P1TPER, W5");
asm("MOV #_Result, W0");
asm("MPY W4*W5, A");
asm("SAC A, [W0]");

como seria en  CCS

Conectado Eduardo2

  • PIC16
  • ***
  • Mensajes: 110
Re:convertir asm en CCS
« Respuesta #1 en: 30 de Marzo de 2018, 23:53:43 »
buenos dias, alguien me puede ayudar a convertir, asm xc16 a asm CCS, o simplemente a ccs
gracias.

este es en XC16:
asm("MOV _Multiplier, W4");
asm("MOV _P1TPER, W5");
asm("MOV #_Result, W0");
asm("MPY W4*W5, A");
asm("SAC A, [W0]");

como seria en  CCS

Es una multiplicación entre dos variables de 16bit (resultado de 32)

Tenés que haber declarado:

    int16 _Multiplier ;
    int16 _P1TPER     ;
    int32 _Result     ;

Y después multiplicar

/*
    asm("MOV _Multiplier, W4");
    asm("MOV _P1TPER, W5");
    asm("MOV #_Result, W0");
    asm("MPY W4*W5, A"); 
    asm("SAC A, [W0]");
*/
    _Result = _Multiplier*_P1TPER     ;




Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 6994
Re:convertir asm en CCS
« Respuesta #2 en: 31 de Marzo de 2018, 08:42:44 »
P1TPER es el registro del duty del PWM
En XC16 se usa el ASM para las instrucciones de DSP, ya que no las tiene en cuenta el compilador, no se CCS si lo hace.

Y XC8/XC16 le agrega el guion bajo a sus variables por eso necesita de las mismas en ASM, en cambio CCS no. Si quisiera hacerlo en C directamente seria:

Código: C
  1.     int16 Multiplier;
  2.     int32 Result;
  3.     //Aca falta definir el P1TPER, registro de duty del PWM
  4.  
  5.     Result = Multiplier * P1TPER;

Y en ASM como decia CCS no agrega el guion bajo, el problema es que no se si la sintaxis para indicar cual es la direccion es la misma, ya que result solo carga la direccion del mismo y no su valor.

Y pienso que seria asi, si es que se definen las variables como antes y se define el registro tambien como una variable. Pero puras conjeturas nomas.

Código: [Seleccionar]
asm("MOV Multiplier, W4");
asm("MOV P1TPER, W5");
asm("MOV #Result, W0");
asm("MPY W4*W5, A");
asm("SAC A, [W0]");


 

anything