Die Variable telnr wird überlaufen.
Wie geschieht denn die IR-Abfrage?
Nimm, wie schon erwähnt, ein Array.
Wenn die IR-Abfrage (Fernbedienungsroutine) per Interrupt z.B. die letzte Ziffer in der Variablen neueziffer ablegt, dann würde ich es so probieren (nicht getestet!):
Code:
$regfile = "m88Adef.dat"
$baud = 19200
$crystal = 8000000
$hwstack = 160
$swstack = 100
$framesize = 100
Dim Position As Byte
Dim Stelefonnr As String * 15
Dim Btelefonnr(15) As Byte At Stelefonnr Overlay
Dim Neueziffer As Byte
Gosub Telnrleeren
Do
Gosub Infrarot
Gosub Zifferntest
Loop
End
Zifferntest:
Select Case Neueziffer 'Ziffer 0-9
Case Is < 10
Gosub Zifferhinzu
Case 13 'Nummer fertig eingegeben also wählen
Gosub Nummernwahl
Case 12 'letzte Stelle löschen
Gosub Zifferweg
Case 11 'alle Stellen löschen
Gosub Telnrleeren
End Select
Return
Infrarot: 'Wenn nicht per Interrupt
Return
Telnrleeren:
For Position = 1 To 15
Btelefonnr(position) = 0 'Nullbyte signalisiert Ende eines Strings
Next Position
Neueziffer = 255
Position = 0
Return
Zifferhinzu:
If Position < 15 Then
Incr Position
Neueziffer = Neueziffer + 48 'ASCii Codes für Zahlen
Btelefonnr(position) = Neueziffer
End If
Return
Zifferweg:
If Position => 1 Then
Decr Position
Btelefonnr(position) = 0
End If
Return
Nummernwahl:
Print "Kommandozumnummerwählen";
Print Stelefonnr
Gosub Telnrleeren
Return
In der IR-Routine dann einfach die Ziffer direkt in die Variable neueziffer schreiben.
Wurde OK gedrückt, dann die 13 reinschreiben.
usw.
Lesezeichen