Autor Tema: Ayuda con asm.  (Leído 3045 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado Gorgonas

  • PIC12
  • **
  • Mensajes: 81
Ayuda con asm.
« en: 15 de Septiembre de 2007, 20:52:19 »
Hola he abierto un post en la seccion de c para pasar un proyecto de asm a c, pero bueno, la verdad es que es normal que a la gente no le apetezca lo mas minimo traducir rollos ke ni le interesan, asi que no me keda mas remedio que romperme la cabeza.
Abro este post aqui porke creo que es el sitio adecuado, la cosa es que hay trozos de asm que por mas que intento comprender no lo consigo, a ver si alguien me echa una manillo ;) con lo que por mas que intento no soy capaz de descifrar.

En esta rutina.
------------------------------------
Flash:
        bsf PORTA,3
        call Testlus
        bcf PORTA,3
        call Testlus
        return
-------------------------------
primero enciende el bit 3 de puerto A. llama a testlus lo paga y vuelve a llamar a testlus. Pues bien testlus es esto
--------------------------
Testlus:                       
        movlw H'FF'             
        movwf W1                 

        movlw H'08'             
        movwf W2               

        movlw H'01'           
        movwf W3               

        call Testlusloop
--------------------------
Aki pone el valor FF a w1 08 a w2 y 01 a w3 y llama a testlusloop, que es la rutina que por mas que intento no llego a comprender como funciona realmente, en teoria es un retardo pero no se como funciona.
---------------------------
Testlusloop:
        decfsz W1,F             
        goto Testlusloop

        decfsz W2,F           
        goto Testlusloop

        decfsz W3,F             
        goto Testlusloop
        return
---------------------
van decreciendo todo el rato los registros w1 w2 y w3 e imagino que eso sera lo que hara perder tiempo y sera el retardo pero no se como conocer el tiempo de retardo de la primera funcion donde w1 era ff w2 08 y w3 01.
Para que os hagais una idea otras funciones de retardo que si tienen nombre dentro de la libreria toman los siguiente valores:

100ms w1 FF w2 dc w3 01
15ms w1 FF w2 01 w3 01
1ms w1 50 w2 01 w3 01

La duda de todo este rollo es poder saber cual es el tiempo de la 1 funcion de retardo llamada testlus. Si alguien me ayuda lo agradeceria muchisimo, es bastante complicado esto del asm y no hay tampoco mucha informacion.
Gracias a todo el que haya llegado hasta aqui.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con asm.
« Respuesta #1 en: 16 de Septiembre de 2007, 17:35:05 »
La duda de todo este rollo es poder saber cual es el tiempo de la 1 funcion de retardo llamada testlus. Si alguien me ayuda lo agradeceria muchisimo, es bastante complicado esto del asm y no hay tampoco mucha informacion.
Gracias a todo el que haya llegado hasta aqui.

El retardo es que  tu le programes, como bien te has dado cuenta el retardo depende del valor que hayan tomado cada uno de los registros.

Para sacar un valor super exacto, es algo tedioso y lo mejor es simularlo.  Pero para que tengas una idea de cuanto duraría, te puedo decir que el ciclo de W3 veces se repetirá el ciclo W2, el cual a su vez obligará al ciclo que dura W1 veces a repetirse W2 veces.

En tu caso, se repetira 1 vez (ya que W3=1) la demora de la repetición de 8 veces del bucle W2 el cual hará repetir 255 veces al bucle W1.

Entonces, demorará 255 x 8 x 1 veces todo el bucle.  Lo cual no es lo mismo que instrucciones ya que los goto's duran por ejemplo 2 instrucciones.  Es por ello que te digo de simularlo.

Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda con asm.
« Respuesta #2 en: 17 de Septiembre de 2007, 00:08:47 »
Hola Gorgonas.

Si renegás un poco(mucho), podés obtener la fórmula para calcular analíticamente la cantidad de instrucciones que lleva ejecturar uno de esos bucles.

En tu caso, la fórmula que yo desarrollé es:

cantidad instrucciones = W1*3-1 + (256*3-1) * (W2-1) + W2*3-1 + [(256*3-1)*256+3*256-1]*(W3-1) + W3*3-1

Haciendo la excepción que toda variable(W1,W2 o W3) que ingrese al algoritmo valiendo 0 debe ser ingresada a la fórmula con el valor 256.

Para calcular finalmente el tiempo que lleva en ejecutarse dichas instrucciones, simplemente hacer por ejemplo:

en microsegundos:

uS = cantidad instrucciones * 4/FOSC

o bien en milisengundos:

mS= uS / 1000

Ejemplo:

W1= .129
W2= .47
W3= .16

Según el MPLAB SIM lleva:



2992640 instrucciones.

Comprobemos si mi fórmula es correcta:

cantidad instrucciones = W1*3-1 + (256*3-1) * (W2-1) + W2*3-1 + [(256*3-1)*256+3*256-1]*(W3-1) + W3*3-1   =
cantidad instrucciones = 129*3-1 + (256*3-1) * (47-1) + 47*3-1 + [(256*3-1)*256+3*256-1]*(16-1) + 16*3-1      =
cantidad instrucciones =   386      +        35282            +    140   +               2956785                       +     47        =
cantidad instrucciones =   2992640

Lo que corrobora que mi fórmula es correcta.



"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con asm.
« Respuesta #3 en: 17 de Septiembre de 2007, 08:40:28 »
En tu caso, la fórmula que yo desarrollé es:

Por suerte cuando uno está vago para hacer las cuentas (léase "yo") viene super Bruno y se pone con ello.  :mrgreen: :mrgreen:

Felicitaciones
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Gorgonas

  • PIC12
  • **
  • Mensajes: 81
Re: Ayuda con asm.
« Respuesta #4 en: 17 de Septiembre de 2007, 18:32:09 »
Gracias a los dos por responder y muchas gracias bruno por molestarte en hacer los calculos y poner la formula, ya entiendo perfectamente como funciona el sistema. :D

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda con asm.
« Respuesta #5 en: 22 de Septiembre de 2007, 06:00:21 »
En tu caso, la fórmula que yo desarrollé es:

Por suerte cuando uno está vago para hacer las cuentas (léase "yo") viene super Bruno y se pone con ello.  :mrgreen: :mrgreen:

Felicitaciones

Jaja! Lo hice más a manera de ayuda-memoria. Hacía rato que no calculaba el tiempo que demora un algoritmo en papel...

Gracias a los dos por responder y muchas gracias bruno por molestarte en hacer los calculos y poner la formula, ya entiendo perfectamente como funciona el sistema. :D

Me alegro que te haya servido. Exitos!

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado coromoto

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con asm.
« Respuesta #6 en: 17 de Enero de 2008, 18:27:49 »
hola!! como estan necesito ayuda!! mi problema es en si en el mplab estoy trabajando con la version 7.5v estuve probando un programa de encender y apagar leds que saque del foro mis primeros pasos pasos con el 18f4550 me da perfecto al coilarlo pero cuando voy a buscar la ventana de simulacion para estimular los pines con bajos y altos no logro encontrar la ventana, me meti por ayuda del mplab y la ventana que sale en la misma no aparece en el program por favor cualquier ayuda agradeceria mucho.  :g)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con asm.
« Respuesta #7 en: 17 de Enero de 2008, 21:58:39 »
coromoto para simular estímulos de pines debes ir a

Debugger, Stimulus, New Workbook.  Luego eliges la pestaña Asynch y allí puedes configurar estímulos asíncronos visualmente.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)