Ich hab jetz ein paar änderungen am programm vorgenommen. Jetzt funktioniert der Timerinterupt, der exteren aber immer noch nicht.
Code:
#include <p18f4620.h>
#include <usart.h>
#include <PortB.h>
#pragma config OSC = HS
#pragma config DEBUG = OFF
#pragma config XINST = OFF
#pragma config WDT = OFF
#pragma config CP0 = OFF
void ISR();
void SetupInt0();
void SetupTimer0();
#pragma code high_vector=0x8
void high_vector(void)
{
_asm GOTO ISR _endasm
}
#pragma code
#pragma interrupt ISR
void ISR(void)
{
if(INTCONbits.TMR0IF)
{
putrsUSART(">>Timer Interrupt\n\r");
INTCONbits.TMR0IF = 0;
}
else if(INTCONbits.INT0IF)
{
putrsUSART(">>INT0\n\r");
INTCONbits.INT0IF = 0; //claer the interrupt flag
}
INTCONbits.GIE = 1;
}
#pragma code
void main()
{
// Open the USART configured as 8N1, 9600 baud
OpenUSART ( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_LOW,
32);
TRISB=0xff;
SetupInt0();
SetupTimer0();
INTCONbits.PEIE = 1; //Peripheral Interrupt Enable
RCONbits.IPEN = 0; // No Interrupt Priority
INTCONbits.GIE = 1; //Global Interrupt Enable
while(1){}
}
void SetupInt0()
{
INTCONbits.INT0IF = 0; //Clear the External Interrupt INT0 Flag
TRISBbits.TRISB1 = 1; //RB0 input
INTCON2bits.INTEDG0 = 0; //External Interrupt Falling Edge Select bit
INTCONbits.INT0IE = 1; //External Interrupt INT0 Enable
}
void SetupTimer0()
{
T0CONbits.T0CS = 0; //Clock source = Internal instruction cycle clock (CLKO)
T0CONbits.T08BIT = 0; // 16Bit Timer
T0CONbits.PSA = 0; // Prescaler
T0CONbits.TMR0ON = 1; // Timer0 on
INTCONbits.TMR0IF = 0;//TMR0 Overflow Interrupt Flag bit
INTCONbits.TMR0IE = 1;// Timer0 Interrupt Enable
}
Vielleicht sieht ja noch irgendjemand den Fehler.
Lesezeichen