Porque cuanto tardaría en ejecutar esto?
DELAY
movlw 0xFF
DLOOP
movwf DCOUNT
nop
decfsz DCOUNT,W
goto DLOOP
movlw 0xFF
DLOOP2
movwf DCOUNT
nop
decfsz DCOUNT,W
goto DLOOP2
Gracias
| Temas similares
|
| 15/07/2009 | #1 |
| | Ciclos de reloj y tiempo para delays 16f84
Pues estoy trabajando con delays en un pic16f84a, un cristal de 4MHz, y quiero calcular el tiempo que hago de retardo con una delay. 4 MHz son 4.000.000Hz que quiere decir que una instruccion tarda 4us que son 0,004ms, no? Me parece que no iba así. Cuanto tarda en ejecutar una instrucción? Porque cuanto tardaría en ejecutar esto? DELAY movlw 0xFF DLOOP movwf DCOUNT nop decfsz DCOUNT,W goto DLOOP movlw 0xFF DLOOP2 movwf DCOUNT nop decfsz DCOUNT,W goto DLOOP2 Gracias |
| 15/07/2009 | #3 |
| |
hola...el reloj del pic se divide entre 4....4Mhz/4=1Mhz en pocas palabras las instrucciones duran 1uS. entonces : Código: delay movlw 0xFF
movwf variable_1
delay_1 movlw 0xFF
movwf variable_2
delay_2 decfsz variable_2,F
goto delay_2
decfsz variable_1,F
goto delay_1
return entonces se va a decrementar variable_2 uno en uno, osea va tardar 255 ciclos, cuando termine de decrementar va a decrementar a uno la variable 2, y asi sucesivamente, hasta decrementar la variable 1 hasat cero y regresa.. 255x255=65025 ciclos y eso se multiplica por el tiempo 65025x1uS=65.025 mS de retardo. |
| 15/07/2009 | #4 |
| |
Ah claro ya lo entiendo! Luego para crear un delay de más de medio segundo necesito tres variables, y hacerlas encadenadas en vez de consecutivas. Con tres variables consigo un delay máximo de 255*255*255 que son aprox 16000000 uS= 16 segundos. Por lo que veo, la instrucion de goto no gasta tiempo? Porque hay un poquito más de instrucciones de las que has dicho Lo que tampoco entiendo es porque pones decfsz variable_2, F , no tendría que ser decfsz variable_2,variable_2? porque la idea de incluir de incluir instrucciones de no-operacion para que cada ciclo tenga más instrucciones? |
| 15/07/2009 | #5 |
| |
goto consume 2 ciclos y si afecta...mucho si usas este metdo de temporizacion...yo he usado el timer0... pero por ahora te consego que vas asi bien por ahora... ahora usa decfsz variable_1,F esta instruccion decrementa la variable y la guarada el resultado en el misma variable, variable_2=variable_2-1 y asi... si usas decfsz variable_2,w solo haces.. w=variable_2-1 y no te va funcionar porque el regitro w es donde se guarda temporalmente un valor, y ese valor lo desecha cuando se sobre escribe en w. por ejemplo: movlw 0x01 ;carga w con 1 movlw 0x02 ;borra el uno de w y guarda a w el 2 movwf variable ; y lo que se va a guardar en la variable es lo que tuvo lo ultimo guardado en w. espeor que no te alla confundido |
| 15/07/2009 | #7 |
| Moderador |
Si, puedes hacer bucles anidados para lograr retardos muy largos, las instrucciones duran un ciclo de máquina, para un oscilador de 4MHz es 1µs, exepto las de salto que duran dos ciclos, por ejemplo goto o call, y en las condicionales como decfsz que duran un ciclo mientras la condición no se cumple y dos ciclos cuando la condición se cumple y salta... Si necesitas calcular retardos de forma rápida y fácil usa alguno de estos programas: http://www.golovchenko.org/cgi-bin/delay http://www.todopic.com.ar/utiles/calcular_retardos.zip La F en decfsz variable_2, F indica que el resultado será guardado en el mismo registro variable_2... las instrucciones nop se usa para aumentar el tiempo del bucle o ajustar, cada nop gasta un ciclo de máquina. |
| 13/10/2010 | #8 |
| | Respuesta: Ciclos de reloj y tiempo para delays 16f84
jejeje creo que me ayudarian si tengo un reloj int del pic 16f628a a 37KHz cuanto tiempo tarda cada instruccion. por que si entiendo en el caso de tener un reloj a 4Mhz , un ciclo mauina tarda 4 ciclos reloj entonces 1Mciclos maquina =4Mciclos Reloj, pero de donde sacan eso de que cada instrucion maquina tarda 1us jejeje necesito algo de matematicas si alguien me lo puede explicar y para el reloj de 37Khz interno del pic 16F628A |
| 14/10/2010 | #9 |
| | Respuesta: Ciclos de reloj y tiempo para delays 16f84
Paso a paso Para 4Mhz, un ciclo reloj es 1/4000000=0.25us. Un ciclo máquina son cuatro ciclos reloj 4*0.25us=1us. Para 37Khz, un ciclo reloj es 1/37000=27.027us. Un ciclo máquina 4x27.027us=108.108us. Cada instrucción dura un ciclo máquina, excepto las de salto como goto, call, y las decfs dependen de si se cumple el salto o no. |
| 15/10/2010 | #10 |
| | Respuesta: Ciclos de reloj y tiempo para delays 16f84
Si quieres saber de retardos puedes hacerlo por aquí. http://www.golovchenko.org/cgi-bin/delay Saludo. |
| 15/10/2010 | #11 |
| | Respuesta: Ciclos de reloj y tiempo para delays 16f84
En esta página puedes encontrar una explicación detallada de como realizar retardos por software en microcontroladores pic http://micropic.wordpress.com/2007/0...-por-software/ |
| 15/10/2010 | #12 |
| | Respuesta: Ciclos de reloj y tiempo para delays 16f84 |
| 15/10/2010 | #15 |
| | Respuesta: Ciclos de reloj y tiempo para delays 16f84
Conozco el libro pero la verdad es que nunca lo he usado. Al final no importa si se aprende con el libro o con la página, lo cierto es que la idea es la misma. Lo importante es darse cuenta que siguiendo una lógica muy sencilla se pueden programar retardos de cualquier duración. También hay que tener en cuenta que los retardos son útiles pero tienen su lado oscuro y es que esclavizan al micro a realizar la misma tarea (el retardo en si mismo) durante todo el tiempo que dura éste por lo que se desperdician muchos ciclos de proceso. Una solución para esto puede ser usar alguno de los timers. Por ejemplo el temporizador timer 0. PD: @Meta no te equivocas, pero el otro nick quedó arrumbado hace tiempo así que esto es borrón y cuenta nueva |
| Hace 4 Semanas | #17 |
| | |
| Hace 3 Semanas | #19 |
| Moderador | Puede ser usado para hacer un RTC (Reloj en Tiempo Real) Se basa en usar un cristal de 32768 Hz con el oscilador externo T1OSI, T1OSO de algunos PIC. Este ejemplo puede ser usado como base para lograr retardos de tiempo largos (Horas) Incluso para hacer un reloj con displays en modo multiplex, ya que la temporización no afecta el programa. Notas: Programa para un 16F628A (Aplicable a otros PIC con los cambios básicos al programa) Saludos. |