Pessoal, é o seguinte estou mexendo com timer, já consegui fazer ele contar e tudo, mas queria usar uma interrupção com timer, que de 10s em 10s ele executasse uma função, mas gostaria de fazer isso automatico, exemplo:

void interrupt(){

if(segundos = 10){

   fazer função

}

}

void main(){

while(1){

e não aqui dentro

}

}

entenderam? Se não eu posso tentar explicar novamente, procurei na net, mas nenhum é desse jeito

Exibições: 564

Responder esta

Respostas a este tópico

Não manjo nada de MicroC, mas acho que isso é universal:

A função em interrupção precisa ser o mais rápida e curta possível. O problema é que se acontecer outra interrupção ele pode perder ou ir tratar. Se perder, perdeu. Se for tratar vai gerar uma nova imensa entrada na pilha, que ele usa pra gravar onde estava na hora da interrupção. Conforme a arquitetura existe mais ou menos espaço para a pilha. No caso do PIC existe muito pouca. Já um Z80 poderia ter toda a RAM a disposição..

Enfim, trabalhar com chamada de funções, bibliotecas (ponto flutuante, por ex), e niveis de interrupção (uma interrompoendo outroa) é bastante perigoso, pra não falar proibido. Delay() então, nem se fala.

O que costumo fazer, por ex, seria um "jeitinho":

- Na interrupção vc seta um flag (uma variavel qualquer) que indique a necessidade de rodar a rotina.

- Numa rotina que sempre é chamada, como a de leitura de teclado, vc verifica se o flag está setado. Se sim dispara a função.

Assim vc pode deixar seu programa correr livremente e sempre que for chamada a rotina de teclado sua função é chamada sem prejuizo. Caso seu programa tenha algum loop grande e demorado vc coloca uma leitura de teclado no loop só pra garantir essas funções. Pode aproveitar tb pra criar um "abort".

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço