Hi,
also das mit der Taste is doch einfach. Du darfst halt nicht den Eingang an der die Taste hängt in der ISR untersuchen, sondern eine Variable. Außerhalb der ISR setzt du diese Variable auf eins, wenn die Taste gedrückt wird:
Code:Dim Taste as Bit Taste = 0 ... If Pinc.0 = 1 Then 'Das muss in eine Schleife Taste = 1 Endif .... Timer0_isr: Tcnt0 = 26 If Taste = 1 Then ...
Du verwendest in deiner ISR einen Wait Befehl. Dadurch kann die ISR nicht abgearbeitet werden, da nach ein paar Millisekunden ein neuer Interrupt ausgelöst wird. In einer ISR sollte so wenig wie möglich passieren (z.B. Variablen ändern). Und mit Hilfe dieser geänderten Variablen kannst du dann außerhalb der ISR die gewünschten Aktionen ausführen.
Also mit 100ms aufblinken meinst du wohl, dass die LED 100ms angeht und danach wieder aus. Du musst auch hier mit Variablen arbeiten. Du setzt eine Variable auf 1 (anstatt Led2 = 1 Wait 1 Led2 = 0 ). Nun weiß das Programm, dass es beim nächsten Aufruf der ISR Led2 einschalten muss. Du fügst also eine If Abfrage dazu und schaltest in dieser die LED ein, zusätzlich musst du noch eine Variable hochzählen um zu wissen wieviel Zeit vergangen ist. Wenn die Zeit um ist wird die LED ausgeschaltet und alle Variablen wieder auf 0 gesetzt.
MfG







Zitieren

Lesezeichen