PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierung => Denkfehler?



Feratu
03.02.2008, 22:44
Hi
Bin grade dabei eine Art Zeitschaltuhr mit LCD zu bauen.
Ist im Grunde fertig nur ein kleines Problem besteht:

Es ist wie folg aufgebaut:

So sieht die Anzeige aus
00:00:00
01:29:01 z.b.
usw

die Variablen sind so aufgebaut:
hms = hour minute sec so nebenbei ^^
Lcd Hms(1) ; Hms(2) ; ":" ; Hms(3) ; Hms(4) ; ":" ; Hms(5) ; Hms(6)

Das Problem sieht so aus:
Ich drücke auf OK dann sollte eigentlich umgehend der Timer anfangen runter zu zählen,... tut er aber nicht.
Es dauert jedesmal rellativ genau 5 sec bis angezeigt wird das der wert abgezogen wurde.
Aber der angezeigte wert stimmt also es wird keine Sekunde vergessen oder übersprungen.
Nur das LCD Display zeigt es 5 sec verzögert an.

Hat jemand eine erklärung/Lösung hierfür? oder ein Vorschlag wie man soetwas einfacher realisiert?

Hier der Code:


Do
Locate 2 , 7 'Cursor auf 1 Zeile, 1 Spalte
Lcd Hms(1) ; Hms(2) ; ":" ; Hms(3) ; Hms(4) ; ":" ; Hms(5) ; Hms(6) 'String auf Display anzeigen
Waitms 100
If Bumm = 1 Then
Portb.2 = 1
Bumm = 1
End If

Loop

'-------------------------------------------------------------------------------
'------- Timer 1 ISR
'-------------------------------------------------------------------------------
Isr_von_timer1: 'ISR von Timer1
Dim Nr_z(2) As Byte 'zusammenzähl Variable
Timer1 = 34285 'Timer auf 1 Sec einstellen
If Hms_frg = 1 Then 'freigaben Abfrage

If Hms(6) = 0 Then 'fang von hinten an
Hms(6) = Hms_max(6)

If Hms(5) = 0 Then 'Ziffer 5 = 0 => auf max(5) setzen
Hms(5) = Hms_max(5)
If Hms(4) = 0 Then 'Ziffer 4 = 0 => auf max(4) setzen
Hms(4) = Hms_max(4)
If Hms(3) = 0 Then
Hms(3) = Hms_max(3) 'Ziffer 3 = 0 => auf max(3) setzen

If Hms(2) = 0 Then 'Ziffer 2 = 0 => auf max(2) setzen
Hms(2) = Hms_max(2)
If Hms(1) = 0 Then 'Ziffer 1 = 0 => auf max(1) setzen
Hms_frg = 0
Bumm = 1 'Alles 0 Ende Verlauf
Cls

Else
Decr Hms(1)
End If

Else
Decr Hms(2)
End If
Else
Decr Hms(3)
End If
Else
Decr Hms(4)
End If

Else
Decr Hms(5)
End If

Else
Decr Hms(6)
End If


If Zuend(1) < 3 Then
If Zuend(1) = 1 Then
Portb.1 = 1
Waitms 200
Portb.1 = 0
Else
Nr_z(2) = 0
For Nr_z(1) = 1 To 5
Nr_z(2) = Nr_z(2) + Hms(nr_z(1))
Next Nr_z(1)
If Nr_z(2) = 0 Then
Portb.1 = 1
Waitms 200
Portb.1 = 0
End If
End If
End If

End If



Return
End

mfg