Programmiere zur Zeit an einem größeren Projekt mit Bascom (Wiederspruch?), bei dem nebenher auch noch die Zeit angezeigt werden soll. Über.. Enable Interrupts Config Date = Dmy , Separator = . Config Clock = Soft Date$ = "27.05.06" Time$ = "18:00:00" werden Zeit und Datum errechnet und auch korrekt ausgegeben. Jetzt suche ich nach einer eleganten , einfachen Möglichkeit, die Uhr bzw das Datum zu stellen. Ansatz: Denke, der Knackpunkt ist die Variable, in der die Sekunden, bzw. Tage gespeichert werden. Wenn ich die "stellen" könnte, würde auch die angezeigte Zeit / das Datum gestellt werden. Auf manuellem Weg ist es ja kein Problem... _sec = sec +1 if _sec > 59 then _sec = 0 _min = _min + 1 end if if _min > 59 then _min = 0 _hour = hour + 1 ... usw usw usw , allerdings wäre der andere Weg, direkt an der Variable anzugreifen doch eleganter. Kann mir jemand sagen, wie diese Variablen (die ja über clock = soft erstellt werden) heissen? mit Tomaten auf den Augen, Micha B.
When you use the CONFIG CLOCK directive the compiler will DIM the following variables automatic : _sec , _min , _hour, _day , _month , _year The variables TIME$ and DATE$ will also be dimensioned. These are special variables since they are treated different. See TIME$ and DATE$. The _sec, _min and other internal variables can be changed by the user too. But of course changing their values will change the DATE$/TIME$ variables. Auf Deutsch: Der Compiler dimensioniert die Variablen _sec, _min usw. von allein. Wenn Du einen Taster an einen Pin setzt, kannst Du die Variablen verändern und die Uhr stellen. Sinngemäß:(If Pinb0 = 0 then _sec = _sec + 1) MfG Paul
Mit dem Befehl Config Clock = Soft erstellt BASCOM-AVR die Byte-Variablen _Sec, _min, hour, _day, _month, _year sowie die String-Variablen Time$ und Date$ mit je 8 Bytes (+ Terminations-Byte 00H) Vorausgesetzt ein 32.768Hz Quarz íst an die Pins TOSC1 und TOSC2 angeschlossen, aktualisiert eine ISR Routine ausgelöst durch den entsprechenden 8-Bit Timer die Variablen _Sec ... _Year. Die Zeit stellen/verändern kann man entweder über diese 6 Variablen _Sec .. _Year oder üblicherweise durch Zuweisung der Variablen Time$ und Date$ mit den entsprechenden Zeit- bzw Datumstrings. Der Datumstring muss im Format definiert wie im Config Date sein. BASCOM-AVR befüllt/verändert dann intern die Variablen _Sec ... _Year. Wird die aktuelle Zeit oder das Datum zur Ausgabe in einem String benötigt, verwendet man ebenfalls die Variable Time$ und Date$ BASCOM-AVR benutzt auch hier die Variablen _Sec ... _year zur Erstellung dieser String-Variablen.
Danke für die Antworten, war mir soweit jedoch bereits bekannt. Ich hatte die Hoffnung, es gäbe EINE Variable, von der aus dann die _sec... _hour bzw. _day ... _year errechnet werden. Schade, also doch von Hand.... Danke für die schnellen Antworten:-)
Was willst du denn machen? Wenn man die Uhr mit Tasten stellen will, wäre es müssig z.B. bei der Umstellung von Sommer- auf Winterzeit um eine Stunde zurück (oder war es doch vor?) 3600 Sekunden zurück zu zählen. Das wäre nämlich der mindestens der Wert, den man bräuchte, wenn alle Stellen in einer einzigen Variablen gespeichert werden. Für andere Anwendungen ist diese Aufteilung meiner Ansicht nach auch unproblematisch, sofern man mit ein paar IF-THEN-Abfragen (kann BASCOM auch switch-case-Abfragen?) leben kann.
Schau mal in der Hilfe unter SYSSEC() nach. Man kann die Zeit in eine Long-Variable umrechnen und wieder zurück. SYSSEC ist die Anzahl der Sekunden vom 1.1.2000 00:00:00. Ob das allerdings die beste Lösung für dein Problem ist, weiß ich nicht,
@advors: Hab's inzwischen per Hand gelöst... lediglich die Schaltjahrgeschichte ist dabei echt lästig. :-) Aber interessieren würd's mich trotzdem: SYSSEC kann doch nur den Weg auslesen, bzw. ausrechnen, wie kann ich mit SYSSEC die einzelnen Variablen ändern?
Dim lSec as Long lSec = SysSec() ' Anzahl Sekunden aus Softclock lSec = lSec + 3600 ' z.B. 1 Stunde vorstellen ' Zurückschreiben in 2 Schritten mit Time and Date _Sec = Time(lSec) ' nimmt den Tagesteil aus lSec _Day = Date(lSec) ' nimmt die Anzahl Tage aus lSec
@Rahul Freilich kann Bascom auch Case-Verzweigungen. Ist doch eine feine Programmiersprache! :-)) MfG Paul
@advors: Danke ! ;-) Das ist die Lösung!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.