Post on 04-Apr-2018
7/30/2019 Micro Genio s
1/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
279
As Interrupo externa INT0, INT1 e INT2
O microcontrolador PIC18F452 possui 3 pinos de interrupo externa (INT0, INT1 e INT2), podendo
ser acionadas por mudana de nvel lgico 1 para 0 (borda de descida), ou de 0 para 1 (borda de
subida).
As interrupes externas so independentes entre si, e esto multiplexadas com os pinos RB0 (INT0),
RB1 (INT1) e RB2 (INT2). Para que as interrupes externas funcionem, necessrio configurar e
habil itar sua funo especial, assim como fi zemos com os TIM ERS.
Utilizamos normalmente esses pinos de interrupo externa quando precisamos interromper um
determinado processo e tomar decises imediatas, tais como: sensores de segurana de uma prensa,
pois no importa qual processo a mquina esteja operando, a rotina de interrupo do sensor de
segurana precisa ser executada.
Vamos estudar um pouco sobre cada uma.
Programando a Interrupo externa INT0:
A interrupo externa INT0 do PIC18F452 est mul tiplexada com o pino RB0. Segue um diagrama
estrutural de IN T0, acompanhe:
7/30/2019 Micro Genio s
2/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
280
Figura 13.13 Diagrama estrutural da interrupo externa INT0
Sabemos que todas as interrupes que ocorrem dentro do nosso microcontrolador so geradas por
causa dos flags de sinalizao (bit com final IF na Microchip). A interrupo externa INT0 no
diferente dos demais perifricos, ela internamente possui um bit de sinalizao de status que informa
ao microcontrolador que ocorreu uma mudana de nvel lgico no pino de interrupo.
Podemos programar a interrupo externa por borda de descida ou por borda de subida:
7/30/2019 Micro Genio s
3/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
281
Figura 13.14 Tipos de disparo das interrupes externa IN T0, IN T1 e INT2
Importante:A interrupo externa INT0 somente pode operar como alta prioridade de interrupo, ou seja, no
existe registrador INT0IP para INT0, as demais interrupes INT1 e INT2 permitem ser programadas
em baixa prioridade.
Vamos conhecer os registradores relacionados a INT0:
Registradores responsveis pelas configuraes gerais das interrupes:
INTCON.GIEH:habilita ou desabilita a chave geral das interrupes e as interrupes de alta prioridadeINTCON.GIEL: habili ta ou desabil ita as interrupes de baixa prioridadesRCON.IPEN : habilita ou desabilita as interrupes de baixa ou alta prioridades pertencente a famlia PIC18F
Registradores responsveis pela habilitao da interrupo externa INT0
INTCON.INT0IE : bit de habili tao da interrupo externa INT0INTCON.INT0IF : bit de sinali zao da interrupo externa IN T0TRISB.RB0 = 1 : somos obrigados a programar pino RB0/ IN T0 como entrada
Registrador responsvel pelo t ipo de disparo de IN T0:
INTCON2.INTEDG0 : bit de configurao do modo de disparo da interrupo externa INT01 = Aciona interrupo externa por borda de subida
0 = aciona interrupo externa por borda de descida
Obs: A interrupo INT0 somente pode ser programada em alta prioridade, ou seja, no existe o
registrador INT0IP. Esta limitao est presente no microcontrolador PIC18F452 e PIC18F4520.
7/30/2019 Micro Genio s
4/17
7/30/2019 Micro Genio s
5/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
283
'Programa exemplo: INT0.c
'Cristal: 8MHz - modo HS *
'Microcontrolador PIC18F452 Microchip *
'Tools: Kit PICgenios PIC18F Mdulo Profissional MicroGenios
'Configurao: DIP1 - Chave 09 -ON
'****************************************//**********************************
'Objetivo:'Este programa tem por objetivo acionar a interrupo externa INTO. A cada
'interrupo INTO o portd ser incrementado em 1 unidade atravs da varivel
'contador.
'OBS: no estamos levando em considerao efeitos debouncing que teclas podem
'gerar no pino de interrupo. Nosso principal objetivo acionar a interrupo
'INTO.
'****************************************//****************** ****************/
//'******************** declaraes de variveis ******************************
charcontador=0;
//'****************************************************************************
//'**************** subrotina de alta prioridade de interrupo ***************voidinterrupt(){//'into sempre ser alta prioridade de interrupo...
if(intcon.int0if==1){//'se interrupo into foi acionado, ento ...
contador++; //'incrementa 1 unidade em contador
portd=contador; //'atribui valor de contador a portd
intcon.int0if=0; //'apaga flag de into
}
}
voidmain(){
//'********************* configurao geral das interrupes ******************
intcon.gie=1; //'habilita a chave geral das interrupes
intcon.giel=1;//'habilita o vetor de baixa prioridade de interrupo
rcon.ipen=1; //'define 2 level prioridade de interrupo da famlia pic18f
//'************ configurao de habilitao de interrupo int0**************
intcon.int0ie=1;//'bit de habilitao da interrupo externa int0
intcon.int0if=0;//'bit de sinalizao da interrupo externa int0
trisb.rb0=1; //'somos obrigados a programar pino rb0/int0 como entrada
//'************************** borda de disparo*********************************
intcon2.intedg0=0;//'modo de disparo da interrupo externa int0
//'1 = aciona interrupo externa por borda de subida
//'0 = aciona interrupo externa por borda de descida
//'****************************************************************************
contador=0; //'variavel de incremento a cada estouro de into
trisd=0; //'configura todos os leds do portd como saida
portd=0; //'apaga todos os leds do portdwhile(1);
}
7/30/2019 Micro Genio s
6/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
284
Programando a interrupo externa INT1
O funcionamento da interrupo externa INT1 parecida com a interrupo INT0, sua nica diferena
esta no fato de IN T1 permi ti r ser acionado por baixa pr ior idade de interrupo.
Segue um diagrama estrutural de INT1, acompanhe:
Figura 13.16 Diagrama estrutural da interrupo externa INT1
Vamos conhecer os registradores relacionados a INT1:
Registradores responsveis pelas configuraes gerais das interrupes:
INTCON.GIEH:habilita ou desabilita a chave geral das interrupes e as interrupes de alta prioridadeINTCON.GIEL: habili ta ou desabil ita as interrupes de baixa prioridadesRCON.IPEN : habilita ou desabilita as interrupes de baixa ou alta prioridades pertencente a famlia PIC18F
7/30/2019 Micro Genio s
7/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
285
Registradores responsveis pela habilitao da interrupo externa INT1
INTCON3.INT1IE : bit de habili tao da interrupo externa INT1INTCON3.INT1IF : bit de sinali zao da interrupo externa IN T1INTCON3.INT1IP : bit de habililitao de alta ou baixa prioridade de interrupo externa INT1TRISB.RB1 = 1 : somos obrigados a programar pino RB1/ IN T1 como entrada
Registrador responsvel pelo t ipo de disparo de IN T2:
INTCON2.INTEDG1 : bit de configurao do modo de disparo da interrupo externa INT01 = Aciona interrupo externa por borda de subida
0 = aciona interrupo externa por borda de descida
Exemplo de programa:
Objetivo:
No programa seguinte vamos acrescentar no mesmo programa anterior as interrupes INT0 e INT1,
de forma IN T0 Al ta prioridade de interrupo e IN T1 baixa pr ioridade de interrupo.
INT0 ser responsvel por incrementar uma varivel chamada contador
INT1 ser responsvel por decrementar esta mesma varivel contador
O valor da varivel contador ser apresentado no display LCD no modo 8 bits
O hardware:
Figura 13.17 Acionamento das interrupes externa INT0 e INT1
7/30/2019 Micro Genio s
8/17
7/30/2019 Micro Genio s
9/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
287
lcd8_out(1,1,"contador:"); // 'escreve na primeira linha do lcd
//'********************* configurao geral das interrupes ******************
intcon.gie=1; //'habilita a chave geral das interrupes
intcon.giel=1;//'habilita o vetor de baixa prioridade de interrupo
rcon.ipen=1; // 'define 2 level prioridade de interrupo da famlia pic18f
//'************ configurao de habilitao de interrupo int0**************intcon.int0ie=1;//'bit de habilitao da interrupo externa int0
intcon.int0if=0;//'bit de sinalizao da interrupo externa int0
trisb.rb0=1; //'somos obrigados a programar pino rb0/int0 como entrada
//'************************** borda de disparo de int0 ************************
intcon2.intedg0=0;//'modo de disparo da interrupo externa int0
//'1 = aciona interrupo externa por borda de subida
//'0 = aciona interrupo externa por borda de descida
//'****************************************************************************
intcon3.int1ie=1;//'bit de habilitao da interrupo externa int1
intcon3.int1if=0;//'bit de sinalizao da interrupo externa int1
intcon3.int1ip=0;//'define baixa prioridade de interrupo externa int1trisb.rb1=1; //'somos obrigados a programar pino rb1/int1 como entrada
//'************************** borda de disparo de int1 ************************
intcon2.intedg1 =1;//'modo de disparo da interrupo externa int0
//'1 = aciona interrupo externa por borda de subida
//' 0 = aciona interrupo externa por borda de descida
// '***************************************************************************
contador=0;//'variavel de incremento/decremento a cada interrupo de
//'int0 e int1
while(1){
bytetostr(contador,texto);
lcd8_out(1,10,texto); //'escreve na primeira linha do lcd o valor decontador
}
}
Repare que no programa em estudo INT0 e INT1 esto acionando sua interrupes, uma por borda de
descida (INT0) e outra por borda de subida (IN T1). Como definimos uma interrupo de alta
pr ior idade e outra de baixa pr ior idade, somos obrigados a util izar a funo :
Void interrupt() (alta prioridade de interrupo)
eVoid interrupt_low() (baixa prioridade de interrupo)
Obs: palavra reservada do seu compi lador para tratamento de interrupes de alta e baixa prioridade.
7/30/2019 Micro Genio s
10/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
288
Programando a interrupo externa INT2
O funcionamento da interrupo externa INT2 igual ao da interrupo INT1 e parecido com IN T0,
pois assim como INT1 podemos em INT2 configurar suas pr ior idade de interrupo.
Diagrama estrutural de IN T2:
Figura 13.18 Diagrama estrutural da interrupo externa INT2.
Vamos conhecer os registradores relacionados a INT1:
Registradores responsveis pelas configuraes gerais das interrupes:
INTCON.GIEH:habilita ou desabilita a chave geral das interrupes e as interrupes de alta prioridadeINTCON.GIEL: habili ta ou desabil ita as interrupes de baixa prioridadesRCON.IPEN : habilita ou desabilita as interrupes de baixa ou alta prioridades pertencente a famlia PIC18F
7/30/2019 Micro Genio s
11/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
289
Registradores responsveis pela habilitao da interrupo externa INT2
INTCON3.INT2IE : bit de habili tao da interrupo externa INT2INTCON3.INT2IF : bit de sinali zao da interrupo externa IN T2INTCON3.INT2IP : bit de habililitao de alta ou baixa prioridade de interrupo externa INT2TRISB.RB2 = 1 : somos obrigados a programar pino RB2/ IN T2 como entrada
Registrador responsvel pelo t ipo de disparo de IN T2:
INTCON2.INTEDG2 : bit de configurao do modo de disparo da interrupo externa INT21 = Aciona interrupo externa por borda de subida
0 = aciona interrupo externa por borda de descida
Exemplo de programa:
Objetivo:
Vamos acrescentar no programa anterior (INT0_INT1.c) a interrupo externa INT2, de forma que
nossa varivel contador seja zerada toda vez que INT2 for acionada. INT2 ser acionado por baixa
pr ior idade de interrupo e disparado por borda de descida.
O Hardware:
O mesmo utilizado no programa anterior (INT0_INT1.c ).
Nosso Programa:
/*'****************************************//********************************** 'MicroGenios | MicroControladores *
'Site: www.microgenios.com.br *
'Autor: Fernando Simplcio de Sousa *
' ***************************************//**********************************
'Programa exemplo: INT0_INT1_INT2.c
'Cristal: 8MHz - modo HS *
'Microcontrolador PIC18F452 Microchip *
'Tools: Kit PICgenios PIC18F Mdulo Profissional MicroGenios
'Configurao: DIP1 - Chave 01 -ON
'****************************************//**********************************
'Objetivo:
'Este programa tem por objetivo acionar a interrupo externa INTO e INT1 e
'INT2. A cada interrupo de INT0 a varivel contador ser incrementado em 1
'unidade e a cada interrupo de INT1 esta mesma varivel ser decrementada em
'1 unidade. INT2 ir zerar a varivel contador quando for acionado.
'INTO ser Alta prioridade e INT1 e INT2 baixa prioridade de interrupo
'OBS: no estamos levando em considerao efeitos debouncing que teclas podem
'gerar no pino de interrupo. Nosso principal objetivo acionar a interrupo
'de INT0, INT1 e INT2
'****************************************//**********************************/
7/30/2019 Micro Genio s
12/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
290
//'******************** declaraes de variveis ******************************
charcontador=0;
chartexto[10];
//'****************************************************************************
//'**************** subrotina de alta prioridade de interrupo into ***********voidinterrupt(){//'into sempre ser alta prioridade de interrupo...
if(intcon.int0if==1){//'se interrupo int0 foi acionado, ento ...
contador=contador+1;//'incrementa 1 unidade em contador
intcon.int0if=0; //'apaga flag de into
}
}
//'**************** subrotina de baixa prioridade de interrupo int1 e int2***
voidinterrupt_low(){ //'vetor de baixa prioridade de interrupo
if(intcon3.int1if==1){//'se interrupo int1 foi acionado, ento ...
contador=contador-1; //'decrementa 1 unidade em contador
intcon3.int1if=0; //'apaga flag de int1
}
if(intcon3.int2if==1){//'se interrupo int2 foi acionado, ento
contador=0; //'zera contador
intcon3.int2if=0; // 'apaga flag de int2
}
}
voidmain(){
//'********************* configura display lcd *******************************
trisd=0; //'configura todos os pinos do portd como sada
trise=0; //'configura todos os pinos do porte como saida
adcon1=0x06;//'configura todos os pinos de a/d como i/o de uso geral
lcd8_config(&porte,&portd,2,1,0,7,6,5,4,3,2,1,0);//'configura e inicializa
lcd
lcd8_cmd(lcd_clear); //'apaga display lcd
lcd8_cmd(lcd_cursor_off); //'desliga cursor
lcd8_out(1,1,"contador:"); //'escreve na primeira linha do lcd
//'********************* configurao geral das interrupes ******************
intcon.gie=1; //'habilita a chave geral das interrupes
intcon.giel=1;//'habilita o vetor de baixa prioridade de interrupo
rcon.ipen=1; //'define 2 level prioridade de interrupo da famlia pic18f
//'************ configurao de habilitao de interrupo int0**************intcon.int0ie=1;//'bit de habilitao da interrupo externa int0
intcon.int0if=0;//'bit de sinalizao da interrupo externa int0
trisb.rb0=1; //'somos obrigados a programar pino rb0/int0 como entrada
//'************************** borda de disparo de int0 ************************
intcon2.intedg0=0;//'modo de disparo da interrupo externa int0
//'1 = aciona interrupo externa por borda de subida
//'0 = aciona interrupo externa por borda de descida
// '************ configurao de habilitao de interrupo int1**************
7/30/2019 Micro Genio s
13/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
291
intcon3.int1ie=1;//'bit de habilitao da interrupo externa int1
intcon3.int1if=0;//'bit de sinalizao da interrupo externa int1
intcon3.int1ip=0;//'define baixa prioridade de interrupo externa int1
trisb.rb1=1; //'somos obrigados a programar pino rb1/int1 como entrada
//'************************** borda de disparo de int1 ************************
intcon2.intedg1 =1;//'modo de disparo da interrupo externa int0//'1 = aciona interrupo externa por borda de subida
//' 0 = aciona interrupo externa por borda de descida
//'************ configurao de habilitao de interrupo int2**************
intcon3.int2ie=1;//'bit de habilitao da interrupo externa int2
intcon3.int2if=0;//'bit de sinalizao da interrupo externa int2
intcon3.int2ip=0;//'baixa prioridade de interrupo externa int2
trisb.rb2=1; //'somos obrigados a programar pino rb2/int2 como entrada
//'************************** borda de disparo de int2 ************************
intcon2.intedg2 =0;//'modo de disparo da interrupo externa int2
//'1 = aciona interrupo externa por borda de subida
//' 0 = aciona interrupo externa por borda de descida
//'****************************************************************************
contador=0;//'variavel de incremento/decremento a cada interrupo de
//'int0 e int1
while(1){
bytetostr(contador,texto);
lcd8_out(1,10,texto); //'escreve na primeira linha do lcd o valor de
contador
}
}
Comentrios sobre nosso programa:
Percebam que nosso microcontrolador possui internamente apenas 2 nveis de prioridade de
interrupo. No programa anterior utilizamos 3 interrupes (INT0, INT1 e INT2). Para distinguir as
interrupes de mesma prioridade, como no exemplo de programa, podemos util izar a estrutura i f
analisando qual das interrupes est com seu f lag setado (nvel 1), pois caso a condio for verdadeira,
encontramos o peri frico que gerou a interrupo.
Veja o bloco de interrupo de baixa prioridade, anali sando 2 peri fricos com a mesma pr ior idade:
//**************** subrotina de baixa prioridade de interrupo int1 e int2***
voidinterrupt_low(){ //'vetor de baixa prioridade de interrupo
Analisando se a interrupo foi gerado por INT1
if(intcon3.int1if==1){//'se interrupo int1 foi acionado, ento ...
contador=contador1; //'decrementa 1 unidade em contador
intcon3.int1if=0; //'apaga flag de int1
}
Analisando se a interrupo foi gerado por INT2
if(intcon3.int2if==1){ //'se interrupo int2 foi acionado, ento
contador=0; //'zera contador
7/30/2019 Micro Genio s
14/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
292
intcon3.int2if=0; //'apaga flag de int2
}
}
Inclusive podemos util izar a estrutura if - else .
Nota:Como podemos definir prioridade de interrupo para perifricos de mesma prioridade ?
Diferenciamos colocando em todos os comandos, em blocos de tomada de deciso, o bloco que vier
pr imeiro, ser ele executado primeiro.
Interrupo por mudana de estado
Os microcontroladores PIC (alguns modelos) possuem uma interrupo externa chamada Interrupopor mudana de estado (tambm chamado de RB ou interrupo de teclado) ligado aos pinos RB4,RB5, RB6 e RB7.
Diferente das interrupes externas INT0, INT1 e INT2 que somente podem ser acionadas por borda de
subida ou por borda de descida, as interrupes por mudana de estado acontece nos dois estados.
Acompanhe o esquema abaixo:
Figura 13.19 - Tecla de acionamento de interrupo por mudana de estado
7/30/2019 Micro Genio s
15/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
293
Podemos programar a interrupo por mudana de estado do PIC para detectar o acionamento de uma
simples tecla conectada ao pino RB4. Quando essa tecla for pressionada, ocorrer uma mudana de
estado no pino (passagem de nvel lgico 1 para 0) e a interrupo ocorrer, e ao soltarmos a tecla,
ocorrer uma nova mudana de estado (nvel 0 para 1) e consequentemente uma nova interrupo ser
gerada.
Obs:NO ESTAM OS LEVANDO EM CONTA AS CARACTERSTICAS DE DEBOUNCING DA TECLA.
Analise o grfico de acionamento da interrupo:
Figura 13.20 - Grfico de acionamento de interrupo externa RB
Vamos conhecer os registradores relacionados a interrupo RB:
Registradores responsveis pelas configuraes gerais das interrupes:
INTCON.GIEH:habilita ou desabilita a chave geral das interrupes e as interrupes de alta prioridade
INTCON.GIEL: habili ta ou desabil ita as interrupes de baixa prioridadesRCON.IPEN : habilita ou desabilita as interrupes de baixa ou alta prioridades pertencente a famlia PIC18F
Registradores responsveis pela habilitao da interrupo externa RB
INTCON.RBIF : bit responsvel pelo flag de status da interrupo por mudana de estadoINTCON.RBIE : bit de habilitao da interrupo por mudana de estadoINTCON2.RBIP : bit de configurao de alta ou baixa prioridade de interrupoTRISB = 0B1111xxxx : somos obrigados a programar os pinos RB4, RB5, RB6 e RB7como entradaINTCON.RBPU = 1: desabil ita resistores de pul l up interno do PORTB (obrigatri o)
Para exemplificar, vamos desenvolver um programa de acionamento da interrupo por mudana de
estado.
O programa seguinte tem por funo gerar interrupo por mudana de estado ao pressionarmos a
tecla S2 (conforme figura anterior). E a cada interrupo gerada (nvel lgico 1 para 0 e 0 para 1) dever
alterar o estado lgico de um led conectado ao pino RD0.
7/30/2019 Micro Genio s
16/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
294
Nosso Programa:
/*'****************************************//**********************************
'MicroGenios | MicroControladores *
'Site: www.microgenios.com.br *'Autor: Fernando Simplcio de Sousa *
' ***************************************//**********************************
'Programa exemplo: INT_RB.c
'Cristal: 8MHz - modo HS *
'Microcontrolador PIC18F452 Microchip *
'Tools: Kit PICgenios PIC18F Mdulo Profissional MicroGenios
'Configurao: DIP1 - Chave 09 -ON
'****************************************//***************** *****************
'Objetivo:
'Este programa tem por objetivo habilitar a interrupo por mudana de estado
'RB do microcontrolador.
'Esta interrupo utilizada normalmente em aplicaes com teclados matriciais
'onde podemos conectar aos pinos RB4 a RB7 as linhas da matriz de teclas.
'pois dessa forma no precisamos ficar varrendo as teclas em loop
'****************************************//**********************************/
//'******************** declaraes de variveis ******************************
charcontador=0;
//'****************************************************************************
//'**************** subrotina de alta prioridade de interrupo ***************
voidinterrupt(){ // 'alta prioridade de interrupo...
if(intcon.rbif==1){// 'se interrupo into foi acionado, ento ...
contador=contador+1;// 'incrementa 1 unidade em contador
portd=contador; // 'atribui valor de contador a portd
delay_ms(500); // 'colocamos um comando de delay para
// 'que possamos visualizar no kit melhor os// 'incrementos no portd
intcon.rbif=0; // 'apaga flag de into
}
}
voidmain(){ //'funa principal do programa
//'********************* configurao geral das interrupes ******************
intcon.gie=1; //'habilita a chave geral das interrupes
intcon.giel=1;//'habilita o vetor de baixa prioridade de interrupo
rcon.ipen=1; // 'define 2 level prioridade de interrupo da famlia pic18f
// '************ configurao de habilitao de interrupo int0**************
intcon.rbif=0; //'bit responsvel pelo flag de status da interrupo RB
intcon.rbie =1;//'bit de habilitao da interrupo por mudana de estado
intcon2.rbip=1;//'bit de configurao de alta ou baixa prioridade de
interrupo
trisb=255; //'pinos rb4, rb5, rb6 e rb7 programados como entrada
intcon.rbpu=1; //'desliga os resistores de pull up interno do portb
//'****************************************************************************
7/30/2019 Micro Genio s
17/17
_________________________________________
MicroGenios Treinamentos, Kits de desenvolvimento e muito mais...www.microgenios.com.br | www.portalwebaula.com.br (11) 5084-4518 | 3384-5598
295
contador=0; //'variavel de incremento a cada estouro de into
trisd=0; //'configura todos os leds do portd como saida
portd=0; //'apaga todos os leds do portd
while(1){
}
}
A interrupo por mudana de estado nica para os pinos RB4, RB5, RB6 e RB7, para sabermos qual
pino que gerou a interrupo, podemos uti li zar os comandos de tomada de deciso i f. Veja o programa
seguinte:
Rotina de Interrupo por mudana de estado:
//'**************** subrotina de alta prioridade de interrupo ***************voidinterrupt(){ // 'alta prioridade de interrupo...
if(intcon.rbif==1){// 'se interrupo into foi acionado, ento ..
.
if(portb.rb4==0)portd.rd0=~portd.rd0;//'analisando quem gerou a
if(portb.rb5==0)portd.rd1=~portd.rd1;//'interrupo RB
if(portb.rb6==0)portd.rd2=~portb.rd2;
if(portb.rb7==0)portd.rd3=~portb.rd3;
delay_ms(500); // 'colocamos um comando de delay para
// 'que possamos visualizar no kit melhor os
// 'incrementos no portd
intcon.rbif=0; // 'apaga flag de into
}
}
Aquele pino pertencente ao mdulo RB que tiver seu pino aterrado inverter o estado lgico de um led
conectado ao PORTD. (teste o programa no seu k it PICgenios e veja o funcionamento).