Hallo zusammen, ich weiß irgendwie nicht mehr weiter: Erstmal zur Hard / Software: Pic 16F627 mit PICKIT2 MPLAB X mit HItech C Compiler Situation: RB0 = Eingang für Interrupt RB1..7 = ausgang, blinkende LEDs RA0 = Ausgang; Ein/ Aus durch interrupt Es läuft auch soweit nur das Interrupt bedingte ausschalten von RA0 funktioniert nicht. Ich habe das gefühl, das nach 1maligem durchlaufen des Interrupts irgendein bit gesetzt/gelöscht wird, das weitere interrupts verhindert, finde aber den Fehler nicht. Wäre über jede hilfe Dankbar! Viele Grüße Ben ___Code___ #include <stdio.h> #include <stdlib.h> #include <htc.h> #define _XTAL_FREQ 4000000 __CONFIG(FOSC_XT & WDTE_OFF & MCLRE_OFF & LVP_OFF & CP_OFF & BOREN_OFF); void interrupt test_int (void) { if (PORTAbits.RA0 == 0){ PORTAbits.RA0 = 1; } else { PORTAbits.RA0 = 0; } INTF =0; // INTE = 1; // GIE = 1; return; } void init (void); void main(void) { init(); while(1){ PORTB = 0xFE; __delay_ms(1000); PORTB = 0x00; __delay_ms(1000); } } void init (void){ TRISA = 0xFE; TRISB = 0x01; INTE = 1; PORTA = 0x00; PORTB = 0x00; ei(); }
PORTA.RA0 wird immer 0 (oder 1 - weiss ich jetzt nicht auswendig) liefern da PORTA nach einem Reset immer als ANALOG-Port definiert ist. Für DIGITAL-Betrieb muss vorher der Comperator abgeschaltet werden (CMCON = 0x07)! (Datenblatt p.29)
:
Bearbeitet durch User
Hallo, das war zu einfach... wie oft ich schon in diese Falle getappt bin -.- Vielen Dank! Und auch gleich die nächste Frage: muss ich eigentlich in der ISR auch das w/Status register sichern oder macht er das von alleine? Werde da nicht so ganz schlau aus dem datenblatt. Viele Grüße Ben
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.