Hallo µC-Gemeinde, dies hier ist mein erster Beitrag in diesem Forum und ich bin mir sicher, dass ich hier jemanden finde, der mir helfen kann. Zu meinem Problem: ich möchte an INT0 einen Interrupt auslösen und an einem Bit an Port E daraufhin einen Peak ausgeben. (Dieses Programm dient zunächst erst einmal zum Testen, also bitte nicht die Sinnigkeit hinterfragen ;) ). Ich habe den Interrupt wie folgt initialisiert: INTCONbits.INT0IF = 0; // INT0IF: INT0 External Interrupt Flag bit INTCON2bits.RBPU = 1; // Enable internal pull-up on port B RCONbits.IPEN = 1; // Enable priority levels on interrupts INTCONbits.GIEH = 1; // Enable High Level interrupts INTCONbits.INT0IE = 1; // Enable the INT0 external interrupt INTCON3bits.INT1IE = 1; // Enable the INT1 external interrupt INTCON3bits.INT1IP = 1; // INT1 External Interrupt Priority bit - High INTCON2bits.INTEDG0 = 1; // INT0 interrupt on rising edge INTCON2bits.INTEDG1 = 1; // INT1 interrupt on rising edge ADCON1=0x0F; // VERY IMPORTANT!!!!!! KEINE AHNUNG WARUM!!!! Das Programm springt erst seitdem in die Interruptroutine, seitdem ich " ADCON1=0x0F; " mitinitialisiert habe. Zuvor hatte ich auch mit " TRISBbits.TRISB0 = 1 " oder " TRISB = 1; " probiert, allerdings erfolglos. Mir ist etwas schleierhaft, warum PORTB mit ADCON1 als Analog-Input initialisiert werden muss um einen Interrupt auslösen zu können. Kann mir das jemand erklären? Vielen Dank schon mal im Voraus! Gruß Steffen
Gast
#4616862
Hallo, im Datenblatt ist es genau beschrieben ADCON1 = 0xf beduetet dass PCFG3:PCFG0 alle auf 1 sind. Und in der Tabelle drunter ist gezeigt, dass 1111 bedeutet dass alle analogen Eingänge in digitale umkonfiguriert werden. Cheers
Tatsächlich!!! Wunderbar, Danke!!