sexta-feira, 12 de agosto de 2016

Exemplo de configuração e uso da INT0



/*
 * File:   Int_atv_1_1.c
 * Author: Pilger
 *
 * Created on 19 de Agosto de 2017, 06:44
 * Interrupção - Atividade 01-1
 * Exemplo de configuração e uso de Interrupção externa - INT0
 * Ação interrupção INT0: Troca o estado da saída (led)
 * Funções com protótipos
 */

#define led LATDbits.LATD0

#include <xc.h>
#include "C:\h\Config_PIC18F4550.h"

//prototipos de funções
void inicia_regs (void);
void interrupt ISR_alta_prioridade (void);
void config_int (void);
void config_int0 (void);


void main(void) {
    inicia_regs();
    config_int();
    config_int0();  // configura as interrupções
    while (1){
    }
}

void inicia_regs (void){
     // Configura todas as portas multiplexadas com o módulo conversor A/D, como I/O digital. (cap13)
    ADCON1= 0x0F;
    TRISA = 0x00;
    TRISB = 0x01;   // define a B0 como entrada (INT0)  - onde estão as chaves
    TRISD = 0x00;   // define a porta D como saída      - onde está o LCD
    TRISE = 0x00;   // define a porta E como saída      - onde está o Led que indica que passou pela interrupção
    PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; // zeroa todos os pinos
}

// função de interrupção de alta prioridade
void interrupt ISR_alta_prioridade (void){
    led = ~led;            // Inverte o estado da saída
    INTCONbits.INT0IF = 0; // Limpa o flag de ativação da interrupçãp
}

// função de configuração geral de interrupções
void config_int (void){  // configurações gerais a todas as interrupçãoes
    RCONbits.IPEN = 1;   // Habilita interrupção com nível de prioridade. End 0x08 - alta e 0x18 - baixo
    INTCONbits.GIEH = 1; // Habilita todas as interrupções de alta prioridade
    INTCONbits.GIEL = 0; // Desabilita todas as interrupções de baixa prioridade
}

// função de configuração da Interrupção externa 0
void config_int0 (void){     // configurações específicas a INT0
    INTCONbits.INT0IE = 1;   // Ativa a inerrupção externa INT0 (RB0)
    INTCON2bits.INTEDG0 = 0; // Interrupção externa INT0 na borda de descida
    INTCONbits.INT0IF = 0;   // Limpa o flag bit da interrupção externa INT0

}

_________________________________________________________________

Nenhum comentário:

Postar um comentário