CURSO BÁSICO DE PICRETARDOS POR SOFTWAREA menudo es necesario que nuestros programas usen demoras o retardos,por ejemplo, ...
Observe en el diagrama anterior como a una variable CONTA_1 se le asignaun numero n, posteriormente esta variable se decre...
EJEMPLO:Deseamos hacer un retardo de 100uS, entonces usamos el mismo código:EJEMPLO 2:Deseamos hacer un retardo de 100uS, ...
Observe que ahora tenemos una instrucción nueva: nop, esta instruccióndura 1uS y la operación que realiza es nula, es deci...
2) Sin el nop = 765uS, con el nop = 1025uS.3) Si es posible generar retardos más grandes de esa manera paro hay  métodos m...
Observe como primero se carga a la variable CONTA_2 con m, luegoCONTA_1 se carga con n, luego se decrementa CONTA_1 hasta ...
Recuerde que la fórmula para el retardo simple de un solo bucle usando lainstrucción nop era:                       Retard...
EJERCICIO:Genere el código para hacer un retardo de 1 segundo.Solución: 1 segundo = 1000 mS, notamos de inmediato que será...
Note la facilidad para hacer retardos, Es muy conveniente usar retardos baseredondos con base en 10 es decir, que el retar...
Las subrutinas son segmentos de código que se pueden ejecutar cada vez queel programa principal las llame y cuando termine...
ser un problema si se desea hacer un contador, ya que cuando se pulsa elbotón para incrementar el contador el contador no ...
TRUCOSExiste un truco muy útil llamado multiplicación de retardos base. Este trucoconsiste en usar uno o unos pocos retard...
Lo que hace lo anterior es primero mover a W el 10, luego llama al retardo,en donde aCONTA_2 se le asigna lo que tiene W, ...
LED PARPADEANTE 2: Enciende un led el 20% del tiempo, el led conectado aRB0. Periodo de1 segundo, frecuencia de 1Hz. Usand...
CONTADOR: Incrementa un contador binario que se visualiza en PORTBpresionando un botón conectado a RA0.
Pic retardos por software
Pic retardos por software
Próxima SlideShare
Cargando en…5
×

Pic retardos por software

12.058 visualizaciones

Publicado el

1 comentario
4 recomendaciones
Estadísticas
Notas
Sin descargas
Visualizaciones
Visualizaciones totales
12.058
En SlideShare
0
De insertados
0
Número de insertados
4
Acciones
Compartido
0
Descargas
297
Comentarios
1
Recomendaciones
4
Insertados 0
No insertados

No hay notas en la diapositiva.

Pic retardos por software

  1. 1. CURSO BÁSICO DE PICRETARDOS POR SOFTWAREA menudo es necesario que nuestros programas usen demoras o retardos,por ejemplo, si deseamos hacer parpadear un led cada segundoevidentemente necesitaremos usar un retardo de 1s. Los retardos sonprácticamente omnipresentes en nuestros programas. Y hay dos formas dehacerlos: -Por software -Por TMR0Retardo por SoftwareLos retardos por Software consisten en que el pic se quede “enciclado”durante un tiempo. Es decir, es necesario usar uno o varios contadores quedeberán ser decrementados, cuando dichos contadores lleguen a 0 habráconcluido el retardo. Ejemplo con flujo-grama:
  2. 2. Observe en el diagrama anterior como a una variable CONTA_1 se le asignaun numero n, posteriormente esta variable se decrementa y se pregunta siha llegado a 0, si no ha llegado a0 entonces se vuelve a decrementar, y asísucesivamente hasta que llegue a 0 en cuyo caso es el FIN del retardo. Elprograma se quedo “perdiendo el tiempo” enciclado dando vueltas n vecesObserve que tenemos una instrucción nueva decfsz, esta instrucción esequivalente a decir:Decrementa el registro f y salta si ha llegado a 0.Es una instrucción muy útil y sumamente utilizada principalmente enprocesos que se repiten n numero de veces, tales como lo son los retardos.Muy bien, en este punto entendemos el concepto de un retardo porsoftware, sin embargo surge una duda obvia e importante: ¿Cómo calculo eltiempo que durará un retardo? Muy bien, observemos esta parte del códigoensamblador:Nótese que esta parte es la que se ejecuta n veces hasta que CONTA_1 llegaa 0, así que solo debemos saber cuánto tardan en ejecutarse estas dosinstrucciones, luego lo multiplicamos por n y el resultado es el tiempo quedura el retardo. La instrucción decfsz dura 1us y la instrucción goto dura 2us,así que entre ambas duran 3uS, así pues el retardo durará:
  3. 3. EJEMPLO:Deseamos hacer un retardo de 100uS, entonces usamos el mismo código:EJEMPLO 2:Deseamos hacer un retardo de 100uS, para esto ahora hacemos un pequeñocambio al código en ensamblador del retardo:
  4. 4. Observe que ahora tenemos una instrucción nueva: nop, esta instruccióndura 1uS y la operación que realiza es nula, es decir, no hace nada, entonces¿para que la usamos? Observe esta parte del código:Note que esta parte del código es la que se repite n veces hasta queCONTA_1 llegue a 0(bucle). El bucle ahora tiene 3 instrucciones: nop (1uS),decfsz (1uS) y goto (2uS), que entre lastres suman 4uS, entonces la fórmulapara nuestro retardo cambio: Retardo = 4uS x nDespejamos n y tenemos:Vemos como usando la instrucción nop el numero que cargamos a CONTA_1es más exacto y menor. Se puede ver la utilidad de esta instrucción queaparentemente era ociosa.PREGUNTAS: 1) Realice un retardo que dure 1mS2) 2) ¿Cuanto es el Tiempo máximo que se genera sin la instrucción nop y cuanto con la instrucción nop de los ejemplos anteriores? 3) ¿Es posible generar un retardo mayor agregando mas instrucciones nop?
  5. 5. 2) Sin el nop = 765uS, con el nop = 1025uS.3) Si es posible generar retardos más grandes de esa manera paro hay métodos más efectivos para hacer retardos prolongados.Bucles anidadosComo hemos visto el retardo máximo que se puede generar de las formasenunciadas anteriormente son apenas mayores a 1mS. Para generar retardosmucho mayores necesitamos usar BUCLES ANIDADOS. Estos bucles anidadosconsisten generar un Retardo base que se repetirá n veces, el retardo base sehace de la manera anteriormente mencionada usando un bucle quellamamos bucle interno, y al repetir este retardo base n veces estamosformando un bucle mayor o bucle externo. Veamos el ejemplo en flujo-grama:
  6. 6. Observe como primero se carga a la variable CONTA_2 con m, luegoCONTA_1 se carga con n, luego se decrementa CONTA_1 hasta que llegue a 0en cuyo caso decrementa CONTA_2, siCONTA_2 no es 0 entonces vuelve acargar CONTA_1 con n y se vuelve a repetir el ciclo de decrementar CONTA_1hasta 0, el ciclo se repite m veces hasta que CONTA_2 llegue a 0 en cuyo casoserá el fin del retardo.
  7. 7. Recuerde que la fórmula para el retardo simple de un solo bucle usando lainstrucción nop era: Retardo = n x 4uSUtilizando dos bucles anidados la fórmula del retardo sería la siguiente: Retardo = m x (n x 4uS)Muy simple verdad. Veamos como se traduce a ensamblador:EJEMPLO:Realizar un retardo de 10mS. Recuerde que para un retardo de 1 mSusábamos un retardo simple de un bucle y la variable CONTA_1 leasignábamos 250: Retardo interno= 4uS x 250 = 1000uS = 1mSUsaremos este retardo como retardo base y lo repetiremos 10 veces parahacer un retardo final de 10ms: Retardo = m x (4uS * 250) =10x (1mS) = 10mS Es decir, m = 10 y n =250, con eso logramos el retardo de 10mS
  8. 8. EJERCICIO:Genere el código para hacer un retardo de 1 segundo.Solución: 1 segundo = 1000 mS, notamos de inmediato que será necesario untercer bucle ya que el numero 1000 no podrá ser cargado al CONTA_2 ya quesupera el máximo de 255. Así que nuestra formula con un tercer bucle seriaasí:
  9. 9. Note la facilidad para hacer retardos, Es muy conveniente usar retardos baseredondos con base en 10 es decir, que el retardo base sea de 1mS o 10mS etcpara que solo se repita n veces para calcular y obtener los retardos quedeseemos fácilmente y no tener que calcular tanto.Retardos como subrutinasSupongamos que deseamos hacer un programa para un led parpadeante,que encienda ya pague cada 1 segundo. El código en ensamblador seria así:
  10. 10. Las subrutinas son segmentos de código que se pueden ejecutar cada vez queel programa principal las llame y cuando terminen de ejecutarse regresan a lasiguiente posición de donde fueron llamadas. La instrucción que las manda allamar es CALL y la instrucción que regresa ala siguiente posición de dondefueron llamadas es RETURN.Las subrutinas deben tener un nombre para poder ser llamadas. Son unaherramienta muy útil que ahorra espacio de memoria y facilita laprogramación.Retardos como supresores de reboteSabemos que los elementos mecánicos como los pulsadores producen unefecto llamado rebote. Cuando se presiona un botón este no se cierraidealmente, sino que antes de cerrar se completamente “rebota”produciendo varios pulsos antes de cerrarse completamente. El efecto derebote suele durar menos de 20 ms. Los pulsos falsos debido al rebote suelen
  11. 11. ser un problema si se desea hacer un contador, ya que cuando se pulsa elbotón para incrementar el contador el contador no se incrementa en 1, sinoen varias unidades, ¿Por qué? Pues porque cuenta los pulsos falsosproducidos por el rebote. Los retardos son útiles supresores de rebote.Cuando se pulsa un botón se llama a un retardo de aproximadamente 20ms,después del retardo de 20ms continua el programa, de esta manera lospulsos de rebote no desaparecen pero son completamente omitidos.EJEMPLO:
  12. 12. TRUCOSExiste un truco muy útil llamado multiplicación de retardos base. Este trucoconsiste en usar uno o unos pocos retardos base y solo invocarlos ymultiplicarlos por X para tener tantos retardos como queramos. Así se puedehacer un retardo base de 1ms y generar cuando queramos retardos desde1ms hasta 255ms sin necesidad de hacer 255 retardos diferentes. La formulaque usaríamos seria la siguiente:Por ejemplo, si se desea un retardo de 10 ms solo se haría lo siguiente:
  13. 13. Lo que hace lo anterior es primero mover a W el 10, luego llama al retardo,en donde aCONTA_2 se le asigna lo que tiene W, como el retardo base es de1ms entonces el retardo total es W x 1ms.Podemos hacer 5 retardos base de 1ms de 10ms de 100ms de 1seg y de10seg y así hacer combinaciones para poder hacer todos los retardos posiblesdesde 1ms hasta 2550 segundos. Por ejemplo, si deseamos un retardo de362ms entonces escribiríamos lo siguiente:PRACTICAS DE EJEMPLO PARA COMPILAR Y PROBAR:LED PARPADEANTE: Enciende y apaga un led conectado a RB0 con unaduración de 1segundo.
  14. 14. LED PARPADEANTE 2: Enciende un led el 20% del tiempo, el led conectado aRB0. Periodo de1 segundo, frecuencia de 1Hz. Usando el truco demultiplicación de retardo base.
  15. 15. CONTADOR: Incrementa un contador binario que se visualiza en PORTBpresionando un botón conectado a RA0.

×