TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: ErnestAl en 08 de Mayo de 2007, 17:32:10
-
Buenas de nuevo, parece que le he tomado el gusto a esto jejejejej. Con esta rutina puedo obtener un retardo exacto de 0.5seg¿?
retardo movf 0x32
movwf tempi ;retardo de 10ms realizado 50 veces
retar movlw 0xD9 ;mi retardo de partida es un retardo de 10milisegundos
movwf OPTION_REG
bcf INTCON,2
Explora0_5 btfss INTCON,2
goto Explora0_5
decfsz tempi,1
goto retar
return
-
Hola ernest:
Exactamente, wzactamnete no tendrás los 0,5sg, pues aunque repitas 50 veces la rutina de 20msg. el tiempo será un poquitin mayor ues las setencias decfsz tempi,1 y goto retar (por cierto debe ser "retardo") consumen unos ciclos maquina que multiplicados por 50 dara unos microsegundos más.
Fermin
-
Entonces como lo podria hacer?????
-
Hombre depende de la precision que necesites, date cuenta que se está hablando de microsegundos. Tu mismo puedes haver el calculo 50 x los ciclos maquina que consumen las instruciones indicadas (segun sea la frecuencia del cristal que hayas puesto) = tienes el resultado concreto.
Otra forma de realizarlo puede ser por ejemplo Poniempo en tempi=49 en decimal y rellenado con NOP la cantidad de tiempo que te falte.
Otra es si utilizas el buscador existen programas (ya se han expuesto aqui en el foro) los delay que necesiten, incluso con su correspondiente codigo. Si no recuerdo mal uno se llama PICDELAY. Si encuentro el link te lo pongo
fermin
-
Hola de nuevo:
En el link adjunto tienes un gnerador de codigo, pero vamos hay otros muchos. Este en concreto no utiliza el TMR0 como el ejemplo que has puesto, utiliza registos auxuliares. Asi que tu mismo.
http://www.piclist.com/techref/piclist/codegen/delay.htm
Fermin
-
voy a estrujarme un poco los sesos, si quiero aprender assambler necesito controlar los tmr, ahora posteare mis avances, GRACIAS!!!!!
-
Bueno pues con los TMR para hacer el calculo ya sabes lo que te comenté en el post anterior. Los retardos si la precision no es mu importante, estamos halando de alrederdor de 200microsegundos máximo eso con el ejemplo que has puesto.
Si pones 49 cuentas y antes del goto retardo puedes poner los NOP que te falten hasta que ajustes los 0,segundos.
Bueno si mas adelante necesitas mas ayuda ya sabes donde encontrarnos.
Fermin
-
He subido el tiempo de retardo a 1seg y usando un cristal de 4Mhz la rutina se queda de la siguiente manera:
retardo
movlw D'15'
movwf temp
clrf TMR0
bcf INTCON,T0IF
retardo_2 btfss INTCON,T0IF
goto retardo_2
decfsz temp,f
goto retardo_3
return
retardo_3 bcf INTCON,T0IF
goto retardo_2
Estoy simulando con proteus pero el cronometro no se corresponde con el retardo, ¿Esta bien?
-
Si necesitas calcular retardos en ciclos anidados lo mejor es usar un programa que ya viene listo para eso, solo es un ejecutable, se ingresa la velocidad del cristal y el tiempo deseado y el nos genera el código. De esta forma nos olvidamos de los tiempos y nos preocupamos más por el programa. Yo lo he usado y aunque no es 100% preciso si da muy buenos resultados.
El uso de los timer ya sería para manejar tiempos pero aprovechando las interrupciones y eso ya es otro cuento.
Adjunto el archivo.
Saludos
-
Puede que esto te sirva:
http://www.todopic.com.ar/foros/index.php?topic=5968.0
http://www.todopic.com.ar/foros/index.php?topic=12832.0
Suerte.
-
hola ErnestAl
te puedes ayudar con el mplab-sim para saber sobre los tiempos exactos de los retardos.
en esta página (http://www.mister-e.org/pages/utilitiespag.html) hay un programita llamado PICMultiCalc con el que puedes jugar variando la frecuencia del cristal y el timer1 para obtener los tiempos