Ir ao conteúdo
  • Cadastre-se

Ajuda com dicas para interrupção....!!!


avinicius

Posts recomendados

Exatamente.

O Timer provoca uma interrupção quando ele estoura.

Mas, é possível, usando apenas um timer, ter várias temporizações.

Vamos supor que você precise de 3 temporizações nos seguintes valores: 1 ms, 5 ms e 10 ms.

Se você configurar o Timer para estourar a cada milissegundo, você já tem a primeira temporização.

Se a cada vez que ele estourar você incrementar uma variável, quando esta variável atingir o valor 5, você tem a segunda temporização e quando ela atingir 10, a terceira.

Link para o comentário
Compartilhar em outros sites

Obrigado.....

Tipo assim, estou treinando timer...só sei fazer apenas 1 estouro.

"mas dessa jogada com a variável é coisa nova pra mim, achei muito interessante"....*)

Não vou pedir que façam para mim.....Vou tentar, em seguida retorno com minhas dúvidas aqui....

Mas, é o seguinte, quero fazer o seguinte programa:

Se , eu precionar B1 apenas uma vez acionará os 3 três leds que começaram a piscar juntos, mas com tempos diferentes um do outro.

LED1 2segundos

LED2 3segundos

LED3 5segundos

Obrigado...mais se quiser dar mais dicas,ficarei grato....

Obrigado pelas respostas >>Mulder_Fox e MatheusLPS...

Link para o comentário
Compartilhar em outros sites

Acredito q seja C do CCS que o colega esteja acostumado.

Mais tarde volto com um exemplo p você.

EDIT:

Fiz do jeito que você quis, cada led pisca num ritimo diferente determinado pelas variáveis p, q e m. Sendo que o timer1 está configurado para estourar a cada 0.5s, se tivermos por exemplo a variável q igual a 4, se pessaram 2 segundos.

Código feito:

#include <16F877A.h>            //O PIC utilizado, obrigatório!
#FUSES NOWDT //Sem Watch dog, evitando reset
#FUSES XT //Crystal de oscilação igual a 4mhz
#FUSES PUT //Tempo de início do PIC
#FUSES NOPROTECT //Codigo sem proteção de leitura, software livre!
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection


#use delay(clock=4000000)

int m,p,q;

#int_TIMER1 //Interrupção do Timer1
void temp1s(void) //Funcão. O que deverá ser feiro a cada interrupão.
{
q++; //Variável q incrementada a cada estouro do Timer1
p++;
m++;
if (q == 4)
{
output_toggle(PIN_B0);
q=0;
}

if (p == 6)
{
output_toggle(PIN_B1);
p=0;
}

if (m == 10)
{
output_toggle(PIN_B2);
m=0;
}

set_timer1 (3036); //Preload do Timer1
}

void main()
{
output_b(0);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Configuração do Timer1 para clock interno = 1E6 dividido por 8

enable_interrupts(INT_TIMER1); //Habilita interrupção timer1
enable_interrupts(global); //habilita interrupcão global
set_timer1 (3036);

while (TRUE);
}

Falou

Link para o comentário
Compartilhar em outros sites

Nossa muito obrigado....

Entendi...o FUSES...

1-)Mais qual a diferença de usar NODEBUG?pra esse programa.....?seria necessário?

Vamos ver se eu entendi....

Em relação aos 3 Leds,que piscaram em tempos diferentes....>>

A lógica de atribuir uma variável para cada Led, com uma variável INT, entendi também....

Só não consegui interpretar direito a jogada das condições, ".......entendi meio que por cima..."...

E.....

E mais uma pergunta...

Qual foi a lógica de você setar os ports B em nivel baixo?

Seria pela lógica de eu apenas ligar uma vez só....?

Bom....só tenho que agradecer....muito obrigado mesmo....

>> Mulder_Fox e MatheusLPS...vocês realmente querem ajudar....percebo isso...Parabéns para vocês...em querer apenas ajudar o próximo...

=)

Link para o comentário
Compartilhar em outros sites

Só não consegui interpretar direito a jogada das condições, ".......entendi meio que por cima..."...

Veja q o TIMER1 está configura para estourar a cada 0.5s ou 500ms. Correto?

Se o TIMER1 leva meio segundo para estourar, quer dizer que se ele estourar duas vezes, nós temos 1 segundo, certo? Se ele estourar 4 vezes, nós temos 2 segundos e assim por diante.

Ora, se ele leva 0.5s para estourar, então se ele estourar 10 vezes, quer dizer q se passaram 5 segundos.

Esse que é o lance das condições!

Qual foi a lógica de você setar os ports B em nivel baixo?

Só para garantir que o PORTB está começando em nível baixo e não flutuando....

Esses fuses são fuses "padrões". Se você perceber, tem sempre em todos os meus códigos. É bem genérico. Por isso o NODEBUG está lá.

Falou

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...