Ich hab jetz ein paar änderungen am programm vorgenommen. Jetzt funktioniert der Timerinterupt, der exteren aber immer noch nicht.
Vielleicht sieht ja noch irgendjemand den Fehler.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 }







Zitieren

Lesezeichen