Assembler Schaltjahr berechnen

TommyB

Team Bitschubse
17. Mai 2010
2.151
80
48
40
127.0.0.1 ;)
Sprachen
  1. C#
  2. VB.Net
  3. LunaAVR
  4. Assembler
  5. Python
Heyho,

prinzipiell einfach. Ich möchte wissen ob ein Jahr ein Schaltjahr ist.
Einfach die niedrigsten 2 Bits des Jahres auf 0 prüfen, fertig.

Problem ist nur, mein Jahr ist in BCD gespeichert, nicht dezimal.
Gibt es da auch eine einfache Lösung für?
Oder muss ich BCD in Dezimal umrechnen? Wenn ja wie?


Später könnte ich mich ja auf das Bit im DCF Signal (kommt noch dazu) verlassen, aber naja, gibt auch mal Empfangsfehler ^^
 
Hi Tommy,

prinzipiell einfach. Ich möchte wissen ob ein Jahr ein Schaltjahr ist.
Einfach die niedrigsten 2 Bits des Jahres auf 0 prüfen, fertig.
prinzipiell schon aber das ist nicht die ganze Lösung.

wikipedia - Schaltjahr

Ein Jahr muß durch 4 teilbar sein. => Schaltjahr
Es darf nicht durch 100 teilbar sein. => kein Schaltjahr
Außer es ist auch durch 400 teilbar. => dann doch ein Schaltjahr

Gruß
Dino
 
Hi Dino,

Das bissl mit /4 reicht mir, weil ich bezweifle stark dass meine Schaltung (Soll mal ne Funkuhr werden wenn sie groß ist) in 100 Jahren noch funktioniert. Und selbst wenn, alle 100 Jahre ne Uhr neu zu stellen halte ich für einen akzeptablen Aufwand ;)
 
Hi Tommy,

Problem ist nur, mein Jahr ist in BCD gespeichert, nicht dezimal.

Bedeutet, die 4 Stellen der Jahreszahl liegen getrennt vor ? Also für z.B. 2012 eine "2", eine "0", eine "1" und eine "2" ?

Vereinfacht reicht es auch aus, nur die 10er und 1er der Jahreszahl (also in diesem Jahr "12") zu nehmen.
Einfach die beiden Werte zusammenfassen, indem du die 10er Stelle * 10 plus die 1er Stelle in einem Byte zusammenrechnest und das dann auf die beiden niedrigsten Bytes prüfen.

Gruß
Pirx
 
Hey :)

Richtig, die Zehner sind im oberen, die Einer im unterem Halb-Byte. Und ich speicher eh nur die letzten 2 Zahlen des Jahres :)
Also 0x12 = 0b 0001 0010 = (20)12 (Leerzeichen nur der Übersichtlichkeit eingefügt)

Ja ich hatte auch schon an ähnliches gedacht. Einfach 10x den oberen Teil und zum unterem addieren. Leider gibt es in dem Controller (mega168) afaik MUL nicht. Wollte so eine Select Case ähnliche Situation eigentlich gerne vermeiden. Musste schon sowas wegen dem Datum einbinden. (ist eigentlich schon mal wem aufgefallen wie blöd das eigentlich ist mit mal 30, mal 28, mal 31 Tage? ^^')

Hatte gehofft es gäbe da auch eine 2 Zeilen Patent Lösung wie bei einem dezimalem Jahr.
Hatte auch irgendwo mal was gefunden aber in einer Programmiersprache die so aussah als wäre aus Bascom, C, ASM und irgendwas was ich nicht kenne ein gemeinsames Kind entstanden 0.o
 
Echt jetzt? 0,0
Man lernt nie aus... Teste ich das nachher mal :)
 
Siehe Controllerdatenblatt (S.347), Abschnitt 32 "Instruction Set Summary" unter "Arithmetic and Logic Instructions" die letzten 6...
 
Soo nach einiger Zeit Bastelpause hab ichs denn doch noch hin bekommen. Das mit MUL hat geklappt wie oben beschrieben :)
Danke nochmal :)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)