Ir ao conteúdo
  • Cadastre-se

Int0 8051


Crazy Gamer

Posts recomendados

Olá galera. Estou aprendendo a programa assembly e gostaria de saber se só é possível utilizar a int0 (ou a outra interrupção externa) tendo como final o comando reti. Gostaria de saber se é possível quando a int0 for acionada, desviar o programa para outra rotina, para começar a fazer (executar) alguma coisa diferente da anterior e não ter de retornar para a então rotina, como o comando reti faz. É possível configurar isso? Como posso fazer? Grato

Link para o comentário
Compartilhar em outros sites

Olha, o que você descreveu, se entendi bem, é exatamente o que uma interrupção qualquer deve fazer,

- Ela desvia seu programa para um outro endereço, e a partir dele você pode executar alguma outra rotina, e ao final dela basta usar o comando reti, para retornar seu programa a ultima instrução que ele parou + 1.

Veja em codigo:



.org INT0adr ;supondo que esse seja o vetor de interrupção
rjmp executaint ;aqui você desvia para a sua rotina de interrupção.

.
.
.
executaint:
.
{aqui você poe o codigo da sua rotina de interrupção}
.
CLRB bit,registrador ; limpa o flag da interrupção (veja o datasheet para saber mais)
RETI ;aqui é o fim da sua interrupção daqui ela retorna para onde seu porgrama estava no momento que a interrupção foi solicitada.


viu como é simples, infelizmente sou programador de PIC e Motorola (e engatinhando com os AVR), mas tem um pessoal fera aqui em 8051 que vai te dar mais detalhes, mas no geral a estrutura de uma interrupção é essa ok.

abs.

Link para o comentário
Compartilhar em outros sites

Sim, realmente é o que a interrupção realiza. Por isso acho que não é possivel realizar o que eu quero. O que eu gostaria de fazer era desviar o programa para outro lugar, após acionar uma interrupção, e não ter que utilizar o comando reti, para não ter de voltar ao programa que estava sendo executado. Grato pela ajuda. Caso alguem saiba se isso é possível, peço que por favor me ajudem. Muito obrigado.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Se não fizer RETI, duas coisas vão ocorrer.

1) O Apontador de pilha não será decrementado

2) Não será possível o microcontrolador atender novas interrupções, uma vez que pra ele, vai estar tratando a primeira. O RETI habilita novas interrupções por flag que só pode ser restaurado via hardware, portanto não dá pra resetar tal flag via software e ''enganar'' o processador.

Só não entendo porque não quer voltar ao ponto original, já que é uma interrupção.

Então é melhor monitorar o pino e saltar através de um LJMP caso o pino esteja em '0' ou '1'.

Link para o comentário
Compartilhar em outros sites

Bobera xD, eu provavelmente iria começar uma sequencia de leds diferentes rs. Como eu estou aprendendo agora apenas imaginei que talvez um dia seria necessario (seria importante, ou interessante) usar a interrupção para dar um jump automatico, quando precionada, ao invés de ter que ficar verificando um pino.

Muito obrigado soschip pela ajuda. Aprender micontrolado sem ajuda é muito difícil, especialmente essas funções mais complexas que não se ensinam direito nas escolas como interrupções, timers, dptr e por aí vai. Valeu.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!