Hi,
ich geh' mal davon aus, dass der obige code nicht in einer ISR ausgeführt wird, denn dann ist er nicht unterbrechbar.
Es gibt zwei Möglichkeiten, wie du auf Tastendrücke reagieren kannst. Entweder du fragst dauernd die Pins ab oder du hast die taster an einem externen Interrupt Eingang (z.B. Pin Change) angeschlossen.
Wenn du selber abfragst und es nur eine Taste oder mehrere Tasten an einem Port sind, dann würde ich nach dem Wait eine If Abfrage einbauen. Etwa so:
Code:
Config Porta = Input
Config Portc = Output
Config Portd = Output
Dim I As Byte , N As Byte , Taste As Byte , Tasten_flag As Byte
If Taste = 1 Then
For I = 1 To 100
For N = 0 To 7
portc.n = 0
Waitms 100
portc.n = 1
If Pina > 0 Then
Tasten_flag = 1
Exit For
End If
Next N
If Tasten_flag = 1 Then
Exit For
End If
Next I
Elseif Taste = 2 Then
For I = 1 To 100
For N = 0 To 7
Portd.n = 0
Waitms 100
Portd.n = 1
If Pina > 0 Then
Tasten_flag = 1
Exit For
End If
Next N
If Tasten_flag = 1 Then
Exit For
End If
Next I
End If
Tasten_flag = 0
Taste = Pina
Bei der Taste 1 habe ich jetzt einfach mal PortC eingeschaltet, bei Taste 2 PortD.
Wenn mehrere tasten gleichzeitig gedrückt sein können, musst die Tastendrücke erst einmal zwischenspeichern.
Löst der Druck einen externen Interrupt aus, dann wird das tasten_flag in der ISR gesetzt und anstelle des "If PINA > 0 Then" abgefragt.
Klaro?
Gruß
Rolf
Lesezeichen