'____________________ Uhrenroutine __________________________ $external _soft_clock Config Clock = User Const _sectic = 0 Config Date = Dmy , Separator = . '____________________ UHR (hier entsteht der Sekundentakt) __ Config Timer1 = Timer , Prescale = 256 , Clear Timer = 1 Const Ctc_value =(_xtal / 256) - 1 Compare1a = Ctc_value Enable Compare1a On Compare1a Timer1_clock_isr Nosave Time$ = "23:59:55" Date$ = "29.02.12" Dim Curr_sec As Byte Curr_sec = 255sondern auf der Basis Timerkonfiguration und Isr wir bisher
'Sekundentakt für Uhr und 1/5tel Takt zum stellen der Uhr-------------------- Isr_oc2: Incr Count1 If Count1 = 25 Then Count1 = 0 Gosub Tick_200ms End If Incr Count2 If Count2 = 125 Then Count2 = 0 Gosub Tick_1s End If Return
Dim DayOv As Byte Select Case Month Case 1, 3, 5, 7, 8, 10, 12 DayOv = 32 Case 4, 6, 9, 11 DayOv = 31 Case 2 If Year And &b0000_0011 = 0 Then DayOv = 30 Else DayOv = 29 End If End Select If Day >= DayOv Then Incr Month ... ...eine Denkaufgabe gestellt oder wie soll ich mir Zeile 4 und 6 sonst erklären. Wenn Tag größer/gleich DayOv dann Monat hochzählen. Wann ist der Tag 32 ?
Was meinst du damit "Richtig" ? Die vorhandene Konfiguration beibehalten und das stellen der Uhr mit Case, so wie in Beitrag.Richtig, so wie jetzt geht es ja, nur das Stellen müsste man halt etwas anpassen.
End If If Minute = 60 Then Minute = 0 Incr Hour End If If Hour = 24 Then Hour = 0 Select Case Month Case 1 Dayov = 32 Case 3 Dayov = 32 Case 5 Dayov = 32 Case 7 Dayov = 32 Case 8 Dayov = 32 Case 10 Dayov = 32 Case 12 Dayov = 32 Case 4 Dayov = 31 Case 6 Dayov = 31 Case 9 Dayov = 31 Case 11 Dayov = 31 Case 2 If Year And &B0000_0011 = 0 Then Dayov = 30 Else DayOv = 29 End If End Select If Day > Dayov Then Incr Month End If End If Irq.0 = 1 Return
If (Year AND &B0000_0011) = 0 Then
Ihr wollt AND als bitweisen Operator verwenden. If schluckt aber nur logische Operatoren (also sowas wie "If A=5 AND B=7 then…" - da müssen beide Bedingungen wahr sein).Das sollte laut Syntax aber richtig sein. @LotadaC?
Ja, weiß ich. Habe dann auch gleich alles in englisch geändert, sieht professioneller aus.Du weißt schon dass du das von mir ggf. anpassen musst
If Hour = 24 Then Hour = 0 End If Select Case Month Case 1 Dayov = 32 Case 3 Dayov = 32 Case 5 Dayov = 32 Case 7 Dayov = 32 Case 8 Dayov = 32 Case 10 Dayov = 32 Case 12 Dayov = 32 Case 4 Dayov = 31 Case 6 Dayov = 31 Case 9 Dayov = 31 Case 11 Dayov = 31 Case 2 End Select If Temp = 0 Then If(year And &B0000_0011) = 0 Then Dayov = 30 Else Dayov = 29 End If If Day > Dayov Then Incr Month End If End If Irq.0 = 1 Return
Da Bascom sich so anstellt und in der If partou nicht rechnen will brauchst du also noch eine Variable, nennen wir sie Temp. Die bekommt halt vor der If den Wert von Year AND &B0000_0011. Dann If Temp = 0 Then ...
' Called by ISR_Timer2_OV each 1000ms (=1s). ' Still in ISR mode, hence the prefix. Procedure ISR_Tick_1s() Incr Second If Second >= 60 Then Second = 0 Incr Minute End If If Minute >= 60 Then Minute = 0 Incr Hour End If If Hour >= 24 Then Hour = 0 Incr Day End If Dim DayOv As Byte ' Day overflow Select Case Month Case 1, 3, 5, 7, 8, 10, 12 DayOv = 32 Case 4, 6, 9, 11 DayOv = 31 Case 2 If Year And 0b00000011 = 0 Then DayOv = 30 Else DayOv = 29 End If End Select If Day >= DayOv Then Day = 1 Incr Month End If If Month >= 13 Then Month = 1 Incr Year End If EndProc