Só tem que acender um led quando acontecer a interrupção externa...
- Código: Selecionar todos
#include<p18f4520.h>
#pragma config OSC = XT //4Mhz
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PWRT = ON
#include <delays.h>
#include <stdlib.h>
#include <usart.h>
#include <stdio.h>
void ISR_alta_prioridade(void);//protótipo da interrupção
#define led PORTBbits.RB0
#define led2 PORTBbits.RB1
/////////////////////////////////////////////////////
#pragma code int_alta=0x08
void int_alta(void)
{
_asm GOTO ISR_alta_prioridade _endasm
}
#pragma code
/////////////////////////////////////////////////
#pragma interrupt ISR_alta_prioridade
void ISR_alta_prioridade(void)
{
led=1;
INTCON3bits.INT2IF=0;//limpa o flag bit da interrupção externa INT2 -> RB2
}
void main(void)
{
ADCON1 =15; //somente RA0 como analógico
PORTA=0x00; // limpa porta
PORTB=0x00; // limpa portb
PORTC=0x00; // limpa portc
PORTD=0x00; // limpa port
PORTE=0x00; // limpa porte
TRISB=(0b00001100); //
INTCON2bits.INTEDG2=0;//interrupção acontecerá na borda de descida
INTCON3bits.INT2IF=0;//INT2 External Interrupt Flag bit
INTCON3bits.INT2IP=1;//INT2 External Interrupt Priority bit
INTCON3bits.INT2IE=1;//INT2 External Interrupt Enable bit
RCONbits.IPEN=1;//Interrupt Priority Enable bit
INTCONbits.GIEH=1;//Global Interrupt Enable bit
INTCONbits.GIEL=0;//Peripheral Interrupt Enable bit
led2=1;
led=0;
while(1)
{
Delay10KTCYx(100);
}
}
Obrigado