Página 1 de 1

Ativar Interrupção Externa PIC18F4550 e XC Compiler

MensagemEnviado: 14 Out 2014 21:03
por klebernst
Olá pessoal!

O meu objetivo é fazer com que toda vez que for acionada a Interrupção externa (RB0) o estado do led ligado a RD0 seja invertido, mas não funciona.
O que vocês notam de errado no código?
Código: Selecionar todos
#include <xc.h>
//#include <delays.h>
#include<pic18f4550.h>

#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator (HS))
#pragma config WDT = OFF
#pragma config LVP = OFF

int a;
void interrupt int0(void)             // High priority interrupt
{
    //for (a=0; a<1000; a++){}
    INTCONbits.INT0F = 0;
   
    PORTDbits.RD0 = !PORTDbits.RD0;//!PORTDbits.RD0;
    //PORTDbits.RD0 = 1;
   
}

void interrupt low_priority   LowIsr(void)    //Low priority interrupt
{
   
}



void main(void)
{
    ADCON1 = 15; //Desabilita canal a/d
   
    TRISAbits.RA5 = 0;
    PORTAbits.RA5 = 1; // transistor que habilita os leds no kit
    TRISD = 0;
    PORTD = 0;
    TRISB = 0b00000011;

    INTCONbits.GIE = 1;
    INTCONbits.GIEH = 1;
    INTCONbits.GIEL = 1;
    INTCONbits.INT0IE = 1; //habilita INT0
    INTCONbits.INT0F = 0; //Abaixa a flag de INT0
    RCONbits.IPEN = 1; // Habilita interrupção com nível de prioridade Alto = 0x08 baixo = 0x18


    while(1)
    {
      PORTDbits.RD7 = 1;//Não faz nada
    }
}


Re: Ativar Interrupção Externa PIC18F4550 e XC Compiler

MensagemEnviado: 15 Out 2014 08:29
por xultz
Eu não lembro direito, mas para escrever no pino você não deveria usar o registrador LATDbits.LATD0?

Re: Ativar Interrupção Externa PIC18F4550 e XC Compiler

MensagemEnviado: 16 Out 2014 06:54
por tcpipchip
Código: Selecionar todos
void main()
{
    TRISD=0;                      // Configure PortD as output port
    INTCON=0x10;                  // Enable INT0
    INTCON2=0;                    // Set Falling Edge Trigger for INT0

    INTCON.GIE=1;    // Enable The Global Interrupt
    while(1)
    {
        LATD=0x55;       //Set some value at PortD
    }
}

void interrupt()              // Interrupt ISR
{
    INTCON.INT0IF=0;          // Clear the interrupt 0 flag
    LATD=~LATD;               // Invert (Toggle) the value at PortD
    Delay_ms(1000);           // Delay for 1 sec
}