countdown timer giebt bei der Sekunden Anzeige HEX Zeichen aus

OP #4080425
Lesenswert?

Ich bin dabei einen 24 Stunden Timer zu realisieren mit einem Atmega16
wegen der Genauigkeit habe ich den Timer1 benutzt mit einem externen 
Quarz.

Sobald ich die Timer Routine einfüge zeigen die Sekunden HEX Zeichen an,
00:12:E4 00:12:D9 usw. sobald ich den Timer1 entferne, oder ausklammere
Läuft sie normal 00:12:23 00:12:22 usw. Was geht da falsch?

$Regfile="m16def.dat"
$Crystal=8000000
$hwstack=80
$swstack=32
$framesize=64

config LCDPIN = pin, db4 = portd.0, db5 = portd.2, db6= portd.4, db7 = 
portd.6, E=portd.1, rs=portd.3
config lcd = 16 * 2
config portd=output
Cursor Off

Config Timer1 = Timer , Prescale = 256    'Konfiguriere Timer1
Enable Timer1                             'schalte den Timer1 ein
On Timer1 Zeit                  'verzweige bei Timer1 überlauf zu 
Isr_von_Timer1
Enable Interrupts
Timer1 = 34285

cls

Config Portb.0 = Input
Config Portb.1 = Input
Config Portb.2 = Input
Config Portb.3 = Input
Config Portb.4 = Input
Config Portb.5 = Output
config Portb.6 = Output

Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 0
Portb.5 = 0

Start_stop Alias Pinb.0 'Start Stopp taste
Setup Alias Pinb.1 'Setup Taste
Minute Alias Pinb.2 'Minuten Taste
Sekunde Alias Pinb.3 'Sekunden Taste
Stunde alias PINb.4 ' Stunden Taste
Relais Alias Portb.5 'Relais Ausgang
Speaker Alias Portb.6 'Buzzer Ausgang

Config Clock = Soft

Dim Sekunden As Byte 'sekunden variable
Dim Minuten As Byte 'minuten variable
Dim Stunden As Byte 'stunden variable
Dim Time_temp(3) As Byte At Sekunden Overlay
Dim Refresh_lcd As Bit
Dim Alarm As Bit
'____________________________________________
Main:
'--------------------------------------------
Do
Cls
Locate 1 , 1
Lcd "Universal Timer"
Locate 2 , 1
Lcd "Setup Dr";CHR(245);"cken"
Bitwait Setup , Reset
Gosub Einstellen
Bitwait Start_stop , Set
Gosub Run
Loop
'____________________________________________
Einstellen:
'--------------------------------------------
Cls
Locate 1 , 1
Lcd "Zeit einstellen"
Refresh_lcd = 1
Alarm = 0
Do
If Refresh_lcd = 1 Then
Locate 2 , 1
Lcd Time(time_temp(1))
Refresh_lcd = 0
End If

'Sekunden einstellen
If Sekunde = 0 Then
If Sekunden < 59 Then Incr Sekunden Else Sekunden = 00
Waitms 160
Refresh_lcd = 1
End If

'Minuten einstellen
If Minute = 0 Then
If Minuten < 59 Then Incr Minuten Else Minuten = 00
Waitms 160
Refresh_lcd = 1
End If

'Stunden einstellen
If stunde =0 Then
If Sekunden <23 Then Incr Stunden Else Stunden = 00
Waitms 160
Refresh_lcd = 1
end IF
Loop Until Start_stop = 0
Return
'____________________________________________
Run:
'--------------------------------------------
Cls
Locate 1 , 1
Lcd "Timer l";CHR(245);"uft"
Locate 2 , 1
Lcd Time(time_temp(1))
Do
Waitms 500
If Sekunden = 0 Then ' Sind die Sekunden auf Null?

If Minuten = 0 Then ' Sind die Minuten auf Null?

if Stunden = 0 then ' Sind auch die Stunden Null? Alarm!
Alarm = 1
Else ' Stunden waren nicht Null!
Decr Stunden ' Um eine Stunde verringern
Minuten = 59 ' Minuten wieder auf 59
Sekunden = 59 ' Sekunden wieder auf 59
End IF

Else ' Minuten waren nicht Null!
Decr Minuten
End If

Else ' Sekunden waren nicht Null!
Decr Sekunden
End If

Locate 2 , 1
Lcd Time(time_temp(1))
Loop Until Alarm = 1 Or Start_stop = 0

If Alarm = 1 Then
Cls
Lcd "Zeit Abgelaufen"
End If
Bitwait Start_stop , Reset
Return

Zeit:                            '1Hz Takt
Timer1 = 34285

Return
Moderator (Firma: Titel) Persönliche Seite #4080692
Lesenswert?

Patrick S. schrieb:
> oder übersehe ich da was?
Ich vermute sehr, dass du einem Phantom nachjagst. Geh mal analytisch 
vor: was passiert denn nach 00:00:09? Wenn tatsächlich Hex ausgegeben 
würde, dann käme danach 00:00:0A.

Und da ist sicher auch ein Bock drin:
1
 'Stunden einstellen
2
 If stunde =0 Then
3
 If Sekunden <23 Then Incr Stunden Else Stunden = 00

Ich gebs ab hier dann auf, denn dieser Code ist ohne Formatierung und 
Einrückungen so unleserlich.
Und auch das hier:
> Minuten = 59 ' Minuten wieder auf 59
Solche Kommentare sind mindestens unnötig, und bestenfalls verwirrend...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren