Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Crazy Gamer

Int0 8051

Recommended Posts

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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

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

    Editado por soschip

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Muito obrigado soschip. Essa era minha duvida, se eu podia "enganar" o processador. Na verdade o que eu queria fazer era isso mesmo, não ter que monitorar o pino, então pensei se seria possível, utilizar uma interrupção. Obrigado.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Mas por quê você não pode voltar ao ponto em que estava antes da interrupção???

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×