micro genio s

Upload: tecpower

Post on 04-Apr-2018

246 views

Category:

Documents


0 download

TRANSCRIPT

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