mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom Simulator


Autor: Gabriel G (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Erik Matthias Topel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Gabriel G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.