Hallo und Guten Tag! Ich habe mir den Bascom AVR Compiler als Demo instaliert, und habe ein kleines Programm getippt. Ein Screenshot davon als Anhang. Nun.... geplant war es so, das die Werte von H,M und S erst in BCD umgewadelt werden sollten, und dann in einen Uhrbaustein geladen. Wenn ich alles richtig kapiert habe sollte doch der Simulator die Werte zeigen, die beim Aufruf der Subrutine "Test" in klammer stehen. Habe ich da was falsch verstanden? Macheich einen Fehler? Ist das ein Bug von Basom? Nix verstehen :o/ Wenn einer probieren will: $regfile = "2313def.dat" 'register file for AT90S2313 $crystal = 10000000 '10MHz crystal Declare Sub Test1(byval H As Byte , Byval M As Byte , Byval S As Byte ) Dim H As Byte , M As Byte , S As Byte 'dim byte Do Call Test1(12 , 40 , 12) Loop Sub Test1(byval H As Byte , Byval M As Byte , Byval S As Byte ) H = Makebcd(h) M = Makebcd(m) S = Makebcd(s) Print "S=" ; S Print "M=" ; M Print "H=" ; H End Sub
Hallo Gabriel Ich denke das das Programm nicht richtig funktioniert wegen: 1. Die Variablen scheinen mir reichlich mehrfach deklariert nämlich zwei mal Declare Sub Test1(byval H As Byte , Byval M As Byte , Byval S As Byte ) Sub Test1(byval H As Byte , Byval M As Byte , Byval S As Byte ) 2. BCD Variablen werden ja in mehreren Registern abgelegt, sie benötigen also mehr als ein byte. versuchs mal mit: $regfile = "2313def.dat" 'register file for AT90S2313 $crystal = 10000000 '10MHz crystal Declare Sub Test1(byval H As Byte , Byval M As Byte , Byval S As Byte ) Dim H As Byte , M As Byte , S As Byte 'dim byte Dim Hbcd as string, mbcd as string, sbcd as string 'bcd soll jeweils bedeuten das das eine "bcd" variable sein soll Do Call Test1(12 , 40 , 12) Loop Sub Test1(byval H As Byte , Byval M As Byte , Byval S As Byte ) hbcd = Makebcd(h) ' hier habe ich die Variablen gewechselt (H -> hbcd ....) mbcd = Makebcd(m) ' und hier auch sbcd = Makebcd(s) ' und hier auch Print "S=" ; sbcd ' und hier auch Print "M=" ; mbcd ' und hier auch Print "H=" ; hbcd ' und hier auch End Sub MFG Nik p.s. sind alles nur vermutungen, in echt habe ich noch nie in Bascom programmiert.
Hi Gabriel, Dein Programm hat gleich zwei auffallende Probleme: 1. Die Deklaration der Sub-Routine verwendet den Befehl "Byval"! Das bedeutet, das die Variablen die Du da an die Sub übergiebst, in direkten Bezug gebracht sind zu den Werten, mit denen die Sub dann arbeitet. Das bedeutet: änderst Du in der Sub einen Wert einer Variabe die Du übergeben hast, dann ist dieser Wert dann auch noch nach abarbeitung der Sub im Hauptprogramm weiter (geändert)gültig. Soll die Variable die Du da an die Sub übergiebst, nicht durch Einflüsse in der Sub verändert werden, dann verwende den Befehl "Byref" Dadurch werden in der Sub nur Temporäre kopieen Deiner Variablenwerte benutzt. (benötigt mehr Speicher und Taktzyklen) 2. Durch die oben beschriebene Problematik sowie der Tatsache das Du in der Sub die Werte in BCD-Format bringst und die Ergebnisse in die gleiche Variable zurück speicherst, wandelst Du, ab dem zweiten Durchlauf Deiner Hauptroutine, (Endlosschleife) deine "BCD" Zahl nochmals in eine "BCD" Zahl um. Und das da dann Zahlen rauskommen, die "weitab des Stundenzeigers" liegen ist klar. ;-) Beachte diese Punkte, und Du erhälst ein sauberes Ergebniss. Gruß Erik
Hallo Leute! Ihr habt mir sehr geholfen! Habe die Variablen mit BYREF definiert, habe auch andere Variablen definiert für die Werte in BCD, jetzt schaut's gut aus :o))) Nochmal Danke für eure Antworten! Schönne Grüsse aus Wien Gabriel
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.