Autor Tema: Migracion de codigo ccs a asm  (Leído 3766 veces)

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

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Migracion de codigo ccs a asm
« en: 28 de Abril de 2011, 15:45:11 »
Hola a todos, tengo que meter un buclecillo en asm en mi codigo ccs, se trata de un bucle for, es para enviar una variable tipo byte a un pin concreto de mi pic, bit a bit.
yo usaba este bucle:

    for(i=0;i<8;i++)
    output_bit(PIN_X, shift_left(&VAR,1,0));

¿Cual seria su equivalencia en asm?

PD: He estado viendo el tutorial de asm desde cero y esto que pregunto no me queda muy claro.
En el bucle asm añadiria una serie de "NOP" para controlar el tiempo entre bit y bit (bitrate), entiendo que cada instrucción dura 4 ciclos de reloj para incremetar el CP y pasar a la siguiente instrucción, no?

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Migracion de codigo ccs a asm
« Respuesta #1 en: 28 de Abril de 2011, 17:16:30 »
no has dicho que pic vas a utilizar.no todos los pic tienen las mismas instrucciones.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Migracion de codigo ccs a asm
« Respuesta #2 en: 28 de Abril de 2011, 17:26:38 »
No contesto mensajes privados, las consultas en el foro

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Migracion de codigo ccs a asm
« Respuesta #3 en: 28 de Abril de 2011, 17:27:46 »
no has dicho que pic vas a utilizar.no todos los pic tienen las mismas instrucciones.
El 18F4550 con cristal de 20MHz y funcionando a 48Mhz

Gracias!

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Migracion de codigo ccs a asm
« Respuesta #4 en: 28 de Abril de 2011, 17:31:05 »
ok.pues aqui te dejo tambien un trozo de codigo de un programa que realize para un 16f84.creo que no hay ningun problema para ese pic.en todo caso igual puedes optimizar algo mas el codigo.

Código: [Seleccionar]
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<SUBPROGRAMA DE ENVIO DE DATOS>>>>>>>>>>>>>>>>>     

   
ENVIO         bsf      PORTB,1         ;establecer la salida a 1(evitar errores primer caracter)
ENVIO2         clrf   CONTADOR      ;borra el registro CONTADOR de bits
            bcf      PORTB,1         ;bit START   
            call   RETARDO   
           
ENV_1         btfsc   DATO,0         ;comprueva bit 0 del registro DATO(comprovacion de bits a enviar)
            call   UNOS         ;salta a UNOS si el bit leido es 1
            btfss   DATO,0         ;comprueva bit 0 del registro DATO(comprovacion de bits a enviar)
            call   CEROS         ;salta a CEROS si el bit leido es 0
ENV_2         rrf      DATO,F         ;rota a la derecha el registro DATO

            incf   CONTADOR,F      ;incrementa CONTADOR (registro contador de bits)
            movlw   0x08         ;valor de bits a leer
            xorwf   CONTADOR,W      ;comprueva si son 8
            btfss   STATUS,Z      ;si no es 8 repite la comprovacion del siguiente bit
            goto   ENV_1         ;comprueva de nuevo
            bsf      PORTB,1         ;establecer a 1 la salida
            return               ;retorna

UNOS         bsf      PORTB,1         ;saca valor 1 por pin 1 de PORTB
            call   RETARDO         ;tiempo de un bit
            return               ;retorna
CEROS         bcf      PORTB,1         ;saca valor 0 por pin 1 de PORTB
            call   RETARDO         ;tiempo de un bit
            return               ;retorna

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Migracion de codigo ccs a asm
« Respuesta #5 en: 28 de Abril de 2011, 17:56:09 »
Muchisimas gracias a los 2! :)

El problema que yo veo es que lo que necesito enviar es una variable que tengo en mi programa de C, que no se en que posición de la memoria se encuentra para acceder a ella desde asm. Disculpad si no me explico bien ya que en asm estoy muy verde, por eso mi programa es en C :oops: Solo se trataba de meter ese "pequeño" bucle en asm dentro de mi programa en CCS, entonces todas las variables y todas las cosas las tengo declaradas en C en mi programa.
« Última modificación: 28 de Abril de 2011, 18:29:56 por fr4n »

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Migracion de codigo ccs a asm
« Respuesta #6 en: 28 de Abril de 2011, 19:02:14 »
yo de C no se mucho.pero como en cualquer programa,las variables supongo que estaran definidas en algun sitio.lo que hace falta seria saber en que posicion de la memoria esta esa variable.y luego con un acceso indirecto leer ese valor.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Migracion de codigo ccs a asm
« Respuesta #7 en: 28 de Abril de 2011, 21:54:13 »
En CCS presiona F12 y se abre la ventana de ayuda, allí coloca #asm y revisa el ejemplo  ;-)


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

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Migracion de codigo ccs a asm
« Respuesta #8 en: 29 de Abril de 2011, 05:01:34 »
En CCS presiona F12 y se abre la ventana de ayuda, allí coloca #asm y revisa el ejemplo  ;-)


Saludos!
En el ejemplo usa las variable declarada en C, normalmente.
Pero anteriormente al ejemplo dice:
"Be aware that any C code after the #ENDASM and before the end of the function may corrupt the value."

Tampoco entiendo porque pone # delante de un número en hexadecimal.

Saludos!


 

anything