Você está na página 1de 9

Centro de Tecnologia Microgenios - Todos os direitos reservados

Clique aqui para Imprimir o doc umento

As Interrupções do PIC18F452

 1.0 Interrupção externas


 1.1 Programando a Interrupção externa INT0:
 1.2 Programando a Interrupção externa INT1:
 1.3 Programando a Interrupção externa INT2:

As Interrupção externa

O microcontrolador PIC18F452 possui 3 pinos de interrupção externa, podendo ser


acionadas por mudança de nível lógico 1 para 0 (borda de descida), ou de 0 para 1
(borda de subida).

As interrupção externas são independentes entre si, e estão multiplexadas com os pinos
RB0 (INT0), RB1 (INT1) e RB2 (INT2). Para que as interrupções externas funcionem,
são necessário configurar e habilitar sua função no PIC. vamos estudar um pouco sobre
cada interrupção externa:

Programando a Interrupção externa INT0:


A interrupção interna INT0 do PIC18F452 está multiplexada com o pino RB0. Podemos
programar a interrupção externa por borda de descida ou por borda de subida:
Registradores de configuração da interrupção externa INT0:

INTCON.INT0IE : bit de habilitação da interrupção externa INT0


INTCON.INT0IF : bit de sinalização da interrupção externa INT0
INTCON2.INTEDG0 : bit de configuração do modo de disparo da interrupção externa
INT0
1 = Aciona interrupção externa por borda de subida
0 = aciona interrupção externa por borda de descida

Obs: a interrupção externa INT0, por hardware, é de alta prioridade, não sendo
possível defini-lá como baixa prioridade.

Diagrama de hardware:
Programa exemplo:

Para exemplificar o funcionamento da interrpção externa INT0, vamos criar um


programa cuja função é acionar a interrupção externa INT0 a cada pulso proveniente de
um sensor inflavermelho. A interrupção será disparada por borda de descida. A cada
disparo da interrupção INT0, iremos incrementar uma unidade um uma variável
chamada "contador" e enviar o valor dessa variável no portd.

Esquema elétrico:
Programa:

/*********************************************************************
*********
Centro de Tecnologia Microgenios
Proprama: Interrupção TIMER1
Objetivo: incrementar uma unidade no portb a cada interrupção externa
INT0
**********************************************************************
*********/

//************************** rotina de interrupção


***********************************

void interrupt(){ //vetor de interrupção

contador++; //inverte o estado do pino RD0


portb = contador;
intcon.int0if = 0; //apaga flag sinalizador de interrupção externa
INT0
//temos que apagar esse flag para que uma nova
interrupção ocorra
}

//********************** programa principal


*******************************************
void main() { //função principal do programa

intcon2.rbpu = 0; //programa resistore de pull us interno do pic


//caso não venhamos a colocar resistores de pull up
externos
//temos que habilitar esse bit. (lembre-se que é
habilitado em 0)

trisb.f0 = 1; //configura pino RB0 como entrada


trisd = 0; //configura portd como saida
portd = 0; //resseta todos os pinos do portd

intcon = 0b11010001; //habilita interrupção geral


//habilita interrupção de periféricos
//habilita interrupção externa INT0
//resseta bit sinalizador da interrupção EXTERNA
INT0
intcon2.intedg0 = 0; //aciona interrupção por borda de descida
Rcon.ipen = 1; //define como dois niveis de prioridade de interrupção
presente nos PIC18F

while(1); //fica em loop infinito aguardando o acionamento da


interrupção por mudança de estado.

voltar para o topo da pagina

Programando a interrupção externa INT1:

O funcionamento da interrupção externa INT1 é igual a da interrupção INT0, sua única


diferença esta no fato dos registradores de configuração serem outros:

Registradores de configuração da interrupção externa INT1:

INTCON3.INT1IE : bit de habilitação da interrupção externa INT1


INTCON3.INT1IF : bit de sinalização da interrupção externa INT1
INTCON2.INTEDG1 : bit de configuração do modo de disparo da interrupção externa
INT1
1 = Aciona interrupção externa por borda de subida
0 = aciona interrupção externa por borda de descida
INTCON3.INT1IP : bit de habilitação de alta ou baixa prioridade de interrupção
externa INT1

Diagrama de hardware:
Exemplo de programa:

/******************************************************************************
centro de tecnologia microgenios
proprama: interrupção timer1
objetivo: incrementar uma unidade no portd a cada interrupção externa int1
*******************************************************************************/

//************************** rotina de interrupção


***********************************
char contador = 0;

void interrupt() //vetor de interrupção


{
contador++;
portd = contador;
intcon3.int1if = 0; //apaga flag sinalizador de interrupção externa
int1
//temos que apagar esse flag para que uma nova
interrupção ocorra
}

//********************** programa principal


*******************************************

void main() //função principal do programa


{

intcon2.rbpu = 0; //programa resistore de pull us interno do pic


//caso não venhamos a colocar resistores de pull up
externos
//temos que habilitar esse bit. (lembre-se que é
habilitado em 0)

//*********************** configura interrupção geral


***************************************
intcon.gieh = 1; //liga chave geral das interrupções
intcon.giel = 1; //liga interrupções de baixa prioridade
rcon.ipen = 1; //defini dois vetores de interrupção presente nos pic18f

//*********************** configura interrupção int1


***************************************

intcon3.int1ie = 1; // bit de habilitação da interrupção externa int1


intcon3.int1if = 0; // bit de sinalização da interrupção externa int1
intcon2.intedg1 = 0;// bit de configuração do modo de disparo da interrupção
externa int1
intcon3.int1ip = 1; //defini alta prioridade na interrupção externa int1

trisb.f0 = 1; //configura pino rb0 como entrada


trisd = 0; //configura portd como saida
portd = 0; //resseta todos os pinos do portd

while(1); //fica em loop infinito aguardando o acionamento da


interrupção por mudança de estado.

voltar para o topo da pagina

Programando a interrupção externa INT2:

O funcionamento da interrupção externa INT2 é igual a da interrupção INT1 e INT0:

Registradores de configuração da interrupção externa INT2:

INTCON3.INT2IE : bit de habilitação da interrupção externa INT2


INTCON3.INT2IF : bit de sinalização da interrupção externa INT2
INTCON2.INTEDG2 : bit de configuração do modo de disparo da interrupção externa
INT2
1 = Aciona interrupção externa por borda de subida
0 = aciona interrupção externa por borda de descida
INTCON3.INT2IP: bit de habilitação de alta ou baixa prioridade de interrupção
externa INT2
Exemplo de programa:

/******************************************************************************
centro de tecnologia microgenios
proprama: interrupção timer1
objetivo: incrementar uma unidade no portd a cada interrupção externa int2
*******************************************************************************/

//************************** rotina de interrupção


***********************************
char contador = 0;

void interrupt() //vetor de interrupção


{
contador++;
portd = contador;
intcon3.int2if = 0; //apaga flag sinalizador de interrupção externa
int2
//temos que apagar esse flag para que uma nova
interrupção ocorra
}

//********************** programa principal


*******************************************

void main() //função principal do programa


{
intcon2.rbpu = 0; //programa resistore de pull us interno do pic
//caso não venhamos a colocar resistores de pull up
externos
//temos que habilitar esse bit. (lembre-se que é
habilitado em 0)

//*********************** configura interrupção geral


***************************************
intcon.gieh = 1; //liga chave geral das interrupções
intcon.giel = 1; //liga interrupções de baixa prioridade
rcon.ipen = 1; //defini dois vetores de interrupção presente nos pic18f

//*********************** configura interrupção int1


***************************************
intcon3.int2ie = 1;// bit de habilitação da interrupção externa int2
intcon3.int2if = 0; // bit de sinalização da interrupção externa int2
intcon2.intedg2 = 0;// bit de configuração do modo de disparo da interrupção
externa int2
intcon3.int2ip = 1;// bit de habilitação de alta ou baixa prioridade de
interrupção externa int2

trisb.f0 = 1; //configura pino rb0 como entrada


trisd = 0; //configura portd como saida
portd = 0; //resseta todos os pinos do portd

while(1); //fica em loop infinito aguardando o acionamento da


interrupção por mudança de estado.

voltar para o topo da pagina

Centro de Tecnologia Microgenios - Curso de Microcontroladores PIC - Programação


em C
Microgenios © 1998 - 2007. Todos os direitos reservados. É proibido cópia parcial ou
integral desse material sem prévio aviso. Maiores informações:
suporte@microgenios.com.br

Você também pode gostar