Página 1 de 1

Interrupção INT0 e INT1

MensagemEnviado: 12 Dez 2006 11:39
por rubenprom
Embora parece que seja facil, alguem poderia me dar um dica de como usar a interrupção no 8051. No codigo de programação. Eu Utilizo C, mas nao teria problemas com o Assembler.

eu setei o IE=0x95 -> (IE = 10011010) pois minha intensão é utilzar o INT1 e o INT0.

MensagemEnviado: 12 Dez 2006 12:18
por Iran
Se seu compilador for o SDCC poderá ser assim:
Código: Selecionar todos
//-----------------------------------------------------------------------------
//    Rotina de Tratamento de Interupção Externa 0
//-----------------------------------------------------------------------------

void int0_isr(void) interrupt 0

  {
        Aqui vai o código de tratamento de sua interrupção
  }


Antes vc tem de habilitar globalmente e individualmente as interrupções que deseja usar, definir borda ou nível para as externas, etc...

int0_isr é o nome que dei a rotina, pode ser o que vc escolher.

O número que aparece depois da palavra interrupt corresponde a ordem das interrupções na tabela de vetores, assim a primeira é 0 a segunda é 1, ...etc...

Espere outras respostas

Zé Iran.

MensagemEnviado: 12 Dez 2006 12:53
por Maurício
o Iran tá certo !
é isso mesmo !!
e o formato de declaração do SDCC serve tb para o Keil:

Código: Selecionar todos
void trata_ISR0 ( void ) interrupt 0     // para INT0
{
    // seu código aqui
}

void trata_ISR1 ( void ) interrupt 2    // para INT1
{
    // seu código aqui
}


sem esquecer que se a detecção for por nível, e se o sinal estiver baixo qdo a interrupção for atendida, vai disparar outra interrupção, dentro da interrupção.
pra resolver este problema, é necessário desabilitar a interrupção externa quando vc entrar no tratamento dessa interrupção, e recuperar o estado quando vc sair do tratamento.
uma coisa desse tipo aqui:

Código: Selecionar todos
void trata_ISR0 ( void ) interrupt 0
{
    IE0 = 0;    // desabilita a interrupção externa 0

    // seu código aqui

    IE0 = 1;    // habilita a interrupção externa 0
}

acho que é isso. experimenta aí.

[]'s

RETI.

MensagemEnviado: 12 Dez 2006 13:17
por rubenprom
Acho que Iran ta certo, sobre a declaração, primeiro devo habilitar as interrupções globalmente e depois fazer o tratamento. Tou testando apenas com um famoso PISCA LED



PD: Funcionou mesmo, consegui implementar a rotina de interrupção!

Muito Obrigado