Autor Tema: retardos en asembler  (Leído 5546 veces)

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

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
retardos en asembler
« en: 06 de Julio de 2006, 13:47:59 »
hola veguepic, gracias por los ejemplos en asembler que estas subiendo pues estoy perfeccionando lo que mas o menos sabia, no entiendo muy bien las demoras como tu las llamas,seria mucha molestia explicarme una de ellas, la mas sencilla con una ya las entenderia. te doy las gracias por anticipado

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: retardos en asembler
« Respuesta #1 en: 08 de Julio de 2006, 13:32:36 »
hola veguepic, gracias por los ejemplos en asembler que estas subiendo pues estoy perfeccionando lo que mas o menos sabia, no entiendo muy bien las demoras como tu las llamas,seria mucha molestia explicarme una de ellas, la mas sencilla con una ya las entenderia. te doy las gracias por anticipado

tapi8 me parece que podrías poner el código de lo que no entiendes y así te podríamos explicar por sobre el mismo.

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 tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: retardos en asembler
« Respuesta #2 en: 08 de Julio de 2006, 16:07:15 »
en los ejemplos en ensamblador de veguepic:
se que demora es temporizacion o delay.Me imagino que loop es bucle pero porque pones PLOOP 1,PLOOP 2,PDEL 1,1,PDEL 1,2 no tengo claras estas expresiones que son esas P que van delante.Porque en las demoras borrais el WDT clear wdt.Perdona pero en algunas cosas estoy muy verde gracias

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: retardos en asembler
« Respuesta #3 en: 08 de Julio de 2006, 17:59:55 »
creo que pdel son etiquetas que las da el mismo programador de retardos y
usted puede combiarlas.
............................
...........................
............
bueno

Desconectado rnelson

  • PIC12
  • **
  • Mensajes: 53
Re: retardos en asembler
« Respuesta #4 en: 08 de Julio de 2006, 21:25:12 »
Hola amigo Tapi8

Creo que te estas enrrollando en algo muy simple, tal y como lo dice el compañero microcom esas deben ser etiquetas o registros creados por el programador, los retardos estan hechos basicamente de decremento de una variable definida por el programador, y aplicado un "decfsz Loop" por ejemplo, cuando llegue a 0 la variable Loop saltara y no ejecutar la siguiente instrucion si no la otra, no se si se entinde???.
Ahora para saber con exactitud los tiempos de retardos si hay que aplicar unas formulas para llegar a los tiempos deseados, aunque aqui en el foro hay un programa que colocandole el tiempo de retardo,  te da el codigo en asm de la subrutina necesaria para llegar a ese retardo.

Espero te sirva de algo.

Atte. Nelson

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: retardos en asembler
« Respuesta #5 en: 08 de Julio de 2006, 22:01:36 »
Hola Tapi8:

Disculpa la demora en responder, pero recien veo tus mensajes.

Las demoras son generadas por el programa Picdel_sp.exe, adjunto pongo el link desde donde podras descargarlo.

http://www.todopic.com.ar/foros/index.php?topic=5968.0

Te cuento que yo solo lo copio y lo pego, pero vamos a analizarlo a ver que sale.

Veamos este ejemplo

Código: ASM
  1. ;       02-06-06
  2. ;       Ejemplo 02
  3. ;       Prende y apagar un led cada 0.5 seg
  4. ;       PIC 16f84a
  5. ;       MPLAB 7.30
  6. ;       PROTEUS 6.9 SP3
  7. ;       Veguepic
  8.  
  9.         LIST    P=16F84A,                               ; usar PIC 16F84A
  10.         #include <p16f84A.inc>
  11.  
  12.         __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC     ; code protec           off
  13.                                                         ; power up timer        on
  14.                                                         ; watchdog              off
  15.                                                         ; osc                   XT
  16.  
  17. PDel0   equ     0C
  18. PDel1   equ     0D
  19.  
  20.  
  21.         ORG     0
  22.         BSF     STATUS,5                                ; activa la pagina 1
  23.         MOVLW   B'00000'                                ; carga 00000 en W
  24.         MOVWF   TRISA                                   ; puerto a todos salidas
  25.         MOVLW   B'00000000'                             ; carga 00000000 en W
  26.         MOVWF   TRISB                                   ; puerto b todos salidaS
  27.         BCF     STATUS,5                                ; volvemos a la pagina 0
  28.  
  29.         MOVLW   B'00000000'                             ; ponemos a cero el
  30.         MOVWF   PORTB                                   ; el puerto b
  31.                                                         ; usando esta opcion se ahorran
  32.                                                         ; 6 bytes en comparacion con el
  33.                                                         ; ejemplo 01
  34.  
  35. INICIO                                                  ; etiqueta
  36.         BSF     PORTB,0                                 ; pone a 1 RB0
  37.         CALL    DEMORA                                  ; llama a demora de 0,5 seg
  38.         BCF     PORTB,0                                 ; pone a 0 RB0
  39.         CALL    DEMORA                                  ; llama a demora de 0,5 seg
  40.         GOTO    INICIO                                  ; va a inicio
  41.  
  42. ;-------------------------------------------------------------
  43. ;       La demora a sido generada con el programa PDEL
  44. ;       Delay 250000 ciclos
  45. ;-------------------------------------------------------------
  46.  
  47. DEMORA  movlw     .197                                  ; 1 set numero de repeticion  (B)
  48.         movwf     PDel0                                 ; 1
  49. PLoop1  movlw     .253                                  ; 1 set numero de repeticion  (A)
  50.         movwf     PDel1                                 ; 1
  51. PLoop2  clrwdt                                          ; 1 clear watchdog
  52.         clrwdt                                          ; 1 ciclo delay
  53.         decfsz    PDel1,1                               ; 1 + (1) es el tiempo 0  ? (A)
  54.         goto      PLoop2                                ; 2 no, loop
  55.         decfsz    PDel0,1                               ; 1 + (1) es el tiempo 0  ? (B)
  56.         goto      PLoop1                                ; 2 no, loop
  57. PDelL1  goto PDelL2                                     ; 2 ciclos delay
  58. PDelL2  
  59.         return                                          ; 2+2 Fin.
  60. ;---------------------------------------
  61.  
  62.         END                                             ; fin de programa
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: retardos en asembler
« Respuesta #6 en: 08 de Julio de 2006, 22:23:02 »
Primero partamos de que el Pic funciona a 4 MHz, por lo general cada instruccion como ANDWF, BCF, BSF, etc. demora 4 ciclos de reloj, osea a 4 MHz podremos ejecutar 1 millon de instrucciones, que en tiempo equivale a que cada instruccion demora 1 microsegundo.

Pero hay instrucciones como CALL , GOTO, RETURN, etc que demoran el doble en ejecutarse osea 2 microsegundos. Otras intrucciones como BTFSC, BTFSS, etc. pueden demorar 1 o 2 microsegundos dependiendo de lo que esten haciendo.

Quedando claro lo anterior veamos el ejemplo

No te confundas con los nombres, estos los pone el programa.

Como dice Nelson, PDel0 y PDel1 variables usadas como contadores que son fijados a cierta valor, estos valores los calcula el programa dependiendo de la demora que necesites.

PLoop1, PLoop2, PDelL1 y PDelL2 son etiquetas, que sirven para realizar los loops y/o consumir tiempo, mas adelante se detallaran.

Ahora nos centraremos en el codigo de la demora:

Código: ASM
  1. DEMORA  movlw     .197                                  ; 1 set numero de repeticion  (B)
  2.         movwf     PDel0                                 ; 1
  3. PLoop1  movlw     .253                                  ; 1 set numero de repeticion  (A)
  4.         movwf     PDel1                                 ; 1
  5. PLoop2  clrwdt                                          ; 1 clear watchdog
  6.         clrwdt                                          ; 1 ciclo delay
  7.         decfsz    PDel1,1                               ; 1 + (1) es el tiempo 0  ? (A)
  8.         goto      PLoop2                                ; 2 no, loop
  9.         decfsz    PDel0,1                               ; 1 + (1) es el tiempo 0  ? (B)
  10.         goto      PLoop1                                ; 2 no, loop
  11. PDelL1  goto PDelL2                                     ; 2 ciclos delay
  12. PDelL2  
  13.         return                                          ; 2+2 Fin.
  14. ;---------------------------------------
« Última modificación: 08 de Julio de 2006, 23:41:46 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: retardos en asembler
« Respuesta #7 en: 08 de Julio de 2006, 22:56:04 »
Cuando el programa llama a DEMORA primero carga el valor de PDel0 y luego el valor de PDel1.

A continuacion borra el Watchdog lo cual no hace otra cosa que consumir 1 microsegundo, pues recuerda que esta desactivado en los fuses, luego lo vuelve a borrar, osea 1 microsegundo mas.

Luego con la instruccion DECFSZ decrementa en 1 el valor de PDel1 y comprueba si este es cero, si no lo es realiza la instruccion GOTO PLoop2, que no es otra cosa que un loop el cual se repite hasta que el valor de PDel1 sea cero, que es cuando se salta el GOTO PLoop2.

Despues de saltarse el GOTO PLoop2 empieza a decrementar el valor de PDel0 y comprueba si no es cero, si no lo es realiza el GOTO PLoop1 el cual carga de nuevo a PDel1, que habia quedado en cero y se repite el parrafo anterior. Esto parece un trabalenguas.

Cuando PDel1 llega a cero se salta de nuevo el GOTO PLoop2  y decrementa otra unidad el valor de PDel0. Este ciclo se repite hasta que el valor de PDel0 sea cero. Que es cuando se salta el GOTO PLoop1.
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: retardos en asembler
« Respuesta #8 en: 08 de Julio de 2006, 23:26:16 »
Luego de saltarse  GOTO PLoop1 estan las etiquetas PDelL1 y PDelL2, ojo no las confundas con PDel0 y PDel1, que no hace otra cosa que consumir ciclos de reloj, son para dar el ajuste final de los tiempos.

De acuerdo a la demora que necesites el programa calcula los valores de PDel0 y PDel1 mas los loops necesarios. Si necesitaras tiempos mas cortos o mas largos puede que use menos o mas variables respectivamente, asi como la cantidad de loops.

Esto lo hace pues sabe cuanto demora cada instruccion cuando le ingresas el valor del clock, y con esto calcula los valores de las variables y los loops.

Ufffffff, pense que esto era mas sencillo, pero ahora me doy cuenta que si yo tuviera que hacer este calculo si que seria complicado, te recomiendo practicar con este programa y asi podras entender mejor como funciona, sobre todo con tiempos muy cortos, pues el codigo generado es mas sencillo y facil de entender.

Espero haberte aclarado en algo el programa y no confundirte mas.

Un saludo
« Última modificación: 08 de Julio de 2006, 23:43:19 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: retardos en asembler
« Respuesta #9 en: 10 de Julio de 2006, 04:40:34 »
gracias veguepic ya me he bajado el programa que hace el las demoras esta muy bien yo las hacia artesanalmente y la verdad es que dan bastante follon aunque de vez en cuando aun las hare asi para no olvidarme.Gracias por la explicacion creo que ya lo entiendo


 

anything