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