Autor Tema: TIMER  (Leído 2151 veces)

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

Desconectado svt

  • PIC10
  • *
  • Mensajes: 38
TIMER
« en: 16 de Junio de 2005, 10:53:00 »
Hola, quisiera pedir un favor. Se trata que tengo un programa que hace cierta funcion, pero una vez terminada esa funcion, debo ponerlo en espera (con un timer) hasta que me llegue por el puerto serie algo, en cuyo momento se activa una interrupcion que haga que se salga del timer y vuelva a hacer la funcion del sistema.

El tema es el siguiente, nunca he utilizado timers, y no se cuanto tiempo me llevara aprenderlo y ponerlo en la practica. Alguien me podria pasar el trozo de codigo para hacer lo que comento? el tiempo del timer, con que cuente durante 1 seg mas que suficiente. Si alguien me puediera ayudar estaria muy agradecido ya que estoy apurado con el tema. De todas formas, voy a ver si lo puedo sacar por mi parte.


Saludos y gracias de antemano

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: TIMER
« Respuesta #1 en: 16 de Junio de 2005, 13:17:00 »
Buenos pues si lo único que tines que hacer es esperar, aqui te paso un retardo por software de 1 segundo, para un cristal de 4MHz.

Codigo:
;DELAY1S Retardo de 1 seg = ((256*3+3)*256+3)*5 @ 4MHz

delay1s   clrf   contador1
   clrf   contador2
   movlw   0x05
   movwf   contador3
dly1   decfsz   contador1,f
   goto   dly1
   decfsz   contador2,f
   goto   dly1
   decfsz   contador3,f
   goto   dly1
   return   


Los timers son interesantes cuando su función es generar una interrupción para llevar una cuenta de tiempo y que el PIC realiza otras operaciones, pero si lo único que tienes que hacer es esperar por la interrupción de la USART, esto te puede servir.
Si cuando se atienda a la interrupción de la USART quieres salir de la rutina de espera, nada más que tienes que cargar los valores 0xFF en los tres contadores antes de salir de la interrupción. Cuando el programa vuelva a la rutina "delay1s", tardará como máximo 7 ciclos de instrucción en abandonarla.

Desconectado Micom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 783
RE: TIMER
« Respuesta #2 en: 16 de Junio de 2005, 22:25:00 »
Tengo una sugerencia haber si no me equiboco, si solo vas a ponerte a esperar que suceda la interuupcion y no sabes cuanto tiempo es ¿porque no usar un loop infinito? como por ejemplo:

Loop......Goto.......Loop

caes en el loop infinito y cuando llegue el dato y active la interrupcion pues sale de el. Hasta pronto  
El programador GTP USB PLUS es un super programador
GRACIAS dobles amigo SISPIC

Tan solo queda seguir sobreviviendo

Desconectado conate

  • PIC10
  • *
  • Mensajes: 2
RE: TIMER
« Respuesta #3 en: 17 de Junio de 2005, 02:42:00 »
Hola svt:
Reforzando lo que comenta Micom, por tu mensaje, no requieres un retardo sino un loop. Te doy un ejemplo:


 leer      bsfss     porta,0    ;prueba el bit 0 (ra0) del puerto a y salta si es un "1"
             goto      leer

la rutina anterior lo que hace es esperar hasta que se detecte un nivel alto (5v) en la entrada 0 del puerto "a" y va a estar dando vueltas indefinidamente hasta que llegue ese dato. Una vez que llega se sale de ese "loop" y salta para continuar con el programa.
Si el dato que debe llegar es un "0" y no "1", solo cambia el comando por bsfsc.

Espero te sirva. Saludos!!

Desconectado svt

  • PIC10
  • *
  • Mensajes: 38
RE: TIMER
« Respuesta #4 en: 17 de Junio de 2005, 08:03:00 »
Una cosa, he visto que hay algo de un sleep. Este sleep duerme el micro por lo quebaja el consumo. Se puede activar el micro con una int de perifericos (usart), que opinais?, parece mas eficiente no?. ya que no tiene nada que hacer, pues que no consuma energia. Alguien sabria hacerlo con esto del sleep¿


saludos

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: TIMER
« Respuesta #5 en: 17 de Junio de 2005, 09:53:00 »
El SLEEP apaga el oscilador, por lo que los timers se paran y la USAR deja de funcionar. No te sirve si estas esperando un byte del RS-232. Esto sirve para teclados matriciales, LCDs, y todo aquello que no requiera algún timer del micro cuando está "dormido".


 

anything