BASCOM:Welche Variable speichert bei clock = soft das Datum?

Gast #337719
Lesenswert?
• ▲
▼
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.
Gast #337720
Lesenswert?
• ▲
▼
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
Gast #337721
Lesenswert?
• ▲
▼
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.
Gast #337722
Lesenswert?
• ▲
▼
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:-)
Gast #337723
Lesenswert?
• ▲
▼
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.
Gast #337724
Lesenswert?
• ▲
▼
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,
Gast #337725
Lesenswert?
• ▲
▼
@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?
Gast #337726
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.