Gast
#1111559
Hi! Ich Programmiere mit dem MPLAB C18 Compiler einen PIC18F4550. Aufgrund der GRÖßE der Projekte möchte ich keinen Assebler-Code verwenden. (Bisherige Assembler Projekte hatten über 10K Zeilen und sind einfach schlecht wartbar). Deshalb bemühe ich mich um den Einstieg mit dem vorhanden C18. Mein Problem: Ich bekomme den INT0 nicht richtig Programmiert. Unter Assembler läuft die Hardware - also muss es an der Software liegen. Hier die Interrupt-CODE Sequenzen: /** V E C T O R R E M A P P I N G #pragma code Interrupt_Vector = 0x08 void Interrupt_Vector( void ) { _asm GOTO ISR _endasm } // Interrupt_Vector( void ) #pragma code /** INITIALISIERUNG TRISB = 0b11111111; temp = PORTB; INTCONbits.RBIF=0; RCONbits.IPEN =0; //Schaltet Interrupt Prioritäten aus. INTCON2 = 0b00000000; INTCON3 = 0b00000000; INTCON2bits.RBPU = 1; // PORTB Pullups OFF INTCONbits.INT0IE = 1; //INT0 External Interrupt Enable bit 1 = Enables the INT0 external interrupt INTCONbits.INT0IF = 0; //Löschen des INT0 Flags INTCONbits.PEIE = 1; // Enable all unmasked periphal interrupts INTCONbits.GIE = 1; // Enable all HighPrio Interrupt /**Routine /********************Interrupt****************************************/ #pragma interrupt ISR void ISR (void) { FREQ = FREQ-1; writeLCD(1); Delay10KTCYx(15); if (LED==0) LED=1 ; else LED=0; INTCONbits.INT0IF = 0; // Int 0 Flag löschen. } //*****************************************************************/ Timerinterrupts habe ich Problemlos hinbekommen, beim INT0 wird jedoch ständig der RBIF des RCON Registers gesetzt! Im Manual steht: "A mismatch condition will continue to set this bit." Soweitsogut. Aber woher kann solch ein MISMATCH kommen? Gerne setzt ich auch den kompletten Code rein - aber die Displayroutinen sind etwas groß. Gruß Stefan