Gast
#998418
Hi,
bin totaler neuling in yC und programmieren. habe aber paar kleine
sachen jetzt schon probiert. leider klappt es bei meiner uhr nicht so
wie es soll und ich weiss leider nicht weiter. hoffe bei euch finde ich
hilfe.
hier der code. könnte man besser schreiben, aber ich wollte es erstmal
nur probieren. leider geht sie nach paar stunden um paar minuten nach.
' ATMEGA8- Uhr-Datum
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
Config Timer1 = Timer , Prescale = 256 'Timer
Konfigurieren
Config Pind.2 = Output
Config Pind.3 = Output
Led1 Alias Portd.2
Led2 Alias Portd.3
On Timer1 Timer_irq
Const Timervorgabe = 3036
Dim Ijahr As Integer
Dim Imonat As Integer
Dim Itag As Integer
Dim Istunde As Integer
Dim Iminute As Integer
Dim Isekunde As Integer
Ijahr = 2008
Imonat = 9
Itag = 25
Istunde = 10
Iminute = 7
Isekunde = 0
Enable Timer1
Enable Interrupts
Do
If Isekunde = 60 Then
Isekunde = 0
If Iminute = 60 Then
Iminute = 0
If Istunde = 24 Then
Istunde = 0
If Ijahr = 2008 Or Ijahr = 2012 Or Ijahr = 2016 Or Ijahr = 2020 Or
Ijahr = 2024 Then
'schaltjahr
If Imonat = 1 Then 'januar
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 2 Then 'februar
If Itag = 29 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 3 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 4 Then
If Itag = 30 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 5 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 6 Then
If Itag = 30 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 7 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 8 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 9 Then
If Itag = 30 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 10 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 11 Then
If Itag = 30 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 12 Then
If Itag = 31 Then
Itag = 1
Imonat = 1
Ijahr = Ijahr + 1
Else
Itag = Itag + 1
End If
Else
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Else
'kein schaltjahr
If Imonat = 1 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 2 Then
If Itag = 28 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 3 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 4 Then
If Itag = 30 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 5 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 6 Then
If Itag = 30 Then
Itag = 1
Imonat = Imonat + 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 7 Then
If Itag = 31 Then
Itag = 1
Imonat = Imonat
+ 1
Else
Itag = Itag + 1
End If
Else
If Imonat = 8 Then
If Itag = 31
Then
Itag = 1
Imonat = Imonat
+ 1
Else
Itag = Itag
+ 1
End If
Else
If Imonat = 9
Then
If Itag = 30
Then
Itag = 1
Imonat = Imonat
+ 1
Else
Itag = Itag
+ 1
End If
Else
If Imonat = 10
Then
If Itag = 31
Then
Itag =
1
Imonat = Imonat +
1
Else
Itag = Itag
+ 1
End If
Else
If Imonat = 11
Then
If Itag = 30
Then
Itag = 1
Imonat = Imonat +
1
Else
Itag = Itag +
1
End
If
Else
Imonat = 12
Then
If Itag = 31 Then
Itag =
1
Imonat = 1
Ijahr = Ijahr
+ 1
Else
Itag = Itag +
1
End
If
Else
End
If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Else
Istunde = Istunde + 1
End If
Else
Iminute = Iminute + 1
End If
Else
'Isekunde = Isekunde + 1
End If
Loop
'Dies ist der Programmteil, der in dem von ihnen gewählten
'Intervall aufgerufen wird
Timer_irq:
Timer1 = Timervorgabe
'Hier könnte nun ihre beliebige IRQ-Routine stehen
'Dabei sollte man darauf achten das diese nicht mehr Zeit
'benötigt, als das Intervall zuläßt
Print Istunde ; ":" ; Iminute ; ":" ; Isekunde ; " -- " ; Itag ; "-"
; Imonat ; "-" ; Ijahr
Isekunde = Isekunde + 1
'Der Zustand der LED wir umgekehrt, wodurch sich blinken in der halben
Frequenz ergibt
'Hohe Frequenzen sind natürlich nicht mehr sichtbar
If Led1 = 1 Then
Led2 = 1
Led1 = 0
Else
Led1 = 1
Led2 = 0
End If
Return
sry wegen der formatierung, wusste leider nicht wie man den code richtig
einfügen kann und der zeilenumbruch hat alles verschoben.
danke schonmal im vorraus.
sven