Bascom BASCOM ; Erste Schritte zum Ausprobieren

Hero_123

Mitglied
17 Sep 2010
141
3
18
Sprachen
C
Hallo Heini-14

Dann können es manchmal auch ganz simple Fehler sein, auf die ich selbst nicht komme, und dann bei verschiedenen Versuchenden ganzen Code durcheinander haue.
Dann versuche, den Code zu verstehen. Und wenn Du ihn NICHT verstehst, unterteile ihn in einzelne Abschnitte - bis Du ihn verstehst.
Und wende Dich Neuem NUR DANN ZU, wenn Du das vorherige komplett verstanden hast.

Und ganz ehrlich - Du hast hier sehr viel (und auch dauernd und sofort) Hilfe bekommen.
Irgendwann musst auch Du mal "selber laufen" und das bislang Erlernte ohne zusätzliche Hilfe anwenden können.

mfg

Hero_123
 
  • Like
Wertungen: TommyB

Mikro23

Mitglied
2 Jan 2017
317
24
18
Großraum Hannover
Sprachen
C, Assembler
Nicht schlecht, also wird bereits der Vergleich wegoptimiert.
Nö, der Vergleich ist völlig überflüssig, da das AND bereits das Z-Flag gesetzt oder gelöscht hat.
Bei anderen Vergleichen als gleich oder ungleich Null kann das schon anders aussehen.
Was ist mit If ((Bytevariable AND Bytevariable)>127) Then…?
Aus

CodeBox C und C++
    if ((x & y) > 127) 
wird - mit x und y als unsigned byte - folgendes:


CodeBox Assembler
00000344 MOV R24,R17         Copy register 
00000345 AND R24,R3          Logical AND 
00000346 BRGE PC+0x15        Branch if greater or equal, signed 
Bei signed byte wird der Vergleich komplett wegoptimiert, x & y kann ja nie größer als 127 werden.
Und

CodeBox C und C++
    if ((x & y) < 127)
wird zu:

CodeBox Assembler
00000345 MOV R24,R17         Copy register 
00000346 AND R24,R3          Logical AND 
00000347 CPI R24,0x7F        Compare with immediate 
00000348 BRCC PC+0x15        Branch if carry cleared 
Bei signed byte wird der Vergleich auch diesmal komplett wegoptimiert.

Spaßeshalber nochmal das ganze mit 128. signed habe ich mir gleich geschenkt, da die 128 nicht im Zahlenbereich von signed byte enthalten ist.

CodeBox C und C++
    if ((x & y) > 128)


CodeBox Assembler
00000345 MOV R24,R17         Copy register 
00000346 AND R24,R3          Logical AND 
00000347 CPI R24,0x81        Compare with immediate 
00000348 BRCS PC+0x15        Branch if carry set 


CodeBox C und C++
    if ((x & y) < 128)


CodeBox Assembler
00000345 MOV R24,R17         Copy register 
00000346 AND R24,R3          Logical AND 
00000347 BRLT PC+0x15        Branch if less than, signed 
Wie das aussieht, wenn man mit einer Variablen statt einer Konstanten vergleichen würde, probiere ich vielleicht nächstes mal aus.
Bascom läßt, wie bereits festgestellt, bei der Bedingung einer IF-Instruktion gar keine Rechenoperationen zu. Es dürfen nur (einfache)Bedingungen logisch verknüpft werden
Dann schreibt man halt statt


CodeBox BascomAVR
If ((Bytevariable AND Bytekonstante)=0) Then…


CodeBox BascomAVR
Test = Bytevariable AND Bytekonstante
If Test = 0 Then
 

Heini-14

Premium Benutzer
31 Dez 2018
444
0
16
59
Huglfing
Sprachen
BascomAVR
Dann versuche, den Code zu verstehen. Und wenn Du ihn NICHT verstehst, unterteile ihn in einzelne Abschnitte - bis Du ihn verstehst.
Ok, so habe ich es jetzt auch gemacht. Auf meine Weise, wie ich es verstehe und es handhaben kann. Die Uhr mit Datum bis 2032, was ich unmöglich erreichen werde, funktioniert tatelos.
 

Anhänge

Hero_123

Mitglied
17 Sep 2010
141
3
18
Sprachen
C
Hallo Heini-14

Ok, so habe ich es jetzt auch gemacht. Auf meine Weise, wie ich es verstehe und es handhaben kann. Die Uhr mit Datum bis 2032, was ich unmöglich erreichen werde, funktioniert tatelos.
???

Und was soll Dein angehängtes "LCD_Uhr.zip"?

mfg

Hero_123
 

TommyB

Premium Benutzer
17 Mai 2010
2.111
76
48
36
127.0.0.1 ;)
Sprachen
Assembler, LunaAVR, VB.Net, Python, C#
@Hero_123
Was es soll, kA, aber es beweist, dass er das mit (Year AND 0b00000011) = 0 nicht verstanden hat ;)
Wurde hier schon erklärt.
Und dass mein Code mit Select Case wohl doch nicht so falsch war...
 

Ü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)