Página 1 de 1

Aplicação com o Timer

MensagemEnviado: 24 Dez 2008 16:03
por Bardelli
Olá Nobres Colegas...

Eu gostaria de tirar uma dúvida que está martelando minha cabeça:

Imagina que queremos fazer um led Piscar para isso usamos uma função delay_ms(500) entre o output_high e o output_low. Porém durante essa execução do delay_ms literalmente o uC não faz nada de util a nao ser esperar.

O que eu gostaria de fazer é o seguinte: Toda vez que eu quiser um delay_ms, na verdade o programa pula para uma subrotina e fica executando essa subrotina até dar o 500 ms, quando der ele volta novamente para o programa principal e quanto aparecer o delay novamente ele volta na subrotina e continua da onde parou. Alguem tem ideia de como fazer isso??. Uma outra coisa, caso na sub rotina ele termine os calculos antes dos 500 ms, entao ele deve esperar os 500 ms para voltar a rotina principal. Complicado??? alguem ai tem uma luz para dar??

MensagemEnviado: 24 Dez 2008 16:50
por DEJANO
Ola Caro colega!!!
Pelo que eu pude ver voce programa em C. Na verdade isso é muito facil de fazer quando se program em assembler. No caso esse deley_ms é um conjunto de instrucoes que vai gerar os seus 500 ms.
Isso que voce quer fazer se chama multi-tarefa. Normalmente a gente usa a interrupcao para fazer um gerador de 1 ms e entao comeca a contar a partir do momento que voce quer o delay. Quando o tempo requerido for alcançadp voce vai la e acende ou apaga seu led. durante o periodo voce pode fazer o que quizer.
Como eu nao programo em c vou ficar te devendo essa. mas voce pode usar a interrupcao mesmo em c para fazer a temporizacao.O que voce nao pode é usar esse comando delay_ms.
Até +...

MensagemEnviado: 25 Dez 2008 21:32
por jorgeluiz
Uma soluçao e' a que foi apresentada pelo colega acima. Use interrupçao, que dure esse tempo. Outra sugestao, e' usar o PWM do pic (caso ele tenha) com um duty cicle de 50%, (50% hight, 50% low), dai so' colocar o tempo e nao se preocupar com interrupçao.