PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger: Problem mit Integer -overflow und weitere Fragen



Harry252
19.08.2007, 21:18
Hallo,

ich interessiere mich in letzter Zeit sehr für die µC-Technik.
Seit einigen Tagen habe ich versucht Assembler und Basic(Bascom) zu lernen!
Aber bei Assembler hab ich kein Land gesehen! Basic scheint mir etwas mehr zu liegen! Habe irgendwann mal vor mir einen Aquariencomputer zu bauen, will aber erstmal ganz klein anfangen!

Nun zu meinem Problem:

Habe mir einen kleinen Code geschrieben. Wird nur mit Bascom simuliert, da ich es mir noch nicht zutraue das Geld in die Technik zu investieren!


$regfile = "m32def.dat"
$crystal = 4000000
$baud = 9600
$sim

Enable Interrupts
Dim A As Bit
A = 0
Config Porta.0 = Input
Config Portc.0 = Output
Reset Porta.0
Reset Portc.0
Print "Hauptprogramm"
Goto Hauptprogramm

Hauptprogramm:

Do

If Porta.0 = 1 Then Gosub Temp.01
If Porta.0 = 0 Then Gosub Temp.11
Loop

Temp.01:
If A = 0 Then Gosub Temp.02
If A = 1 Then Gosub Hauptprogramm
Return

Temp.02:
A = 1
Portb.0 = 1
Print "Temp.HIGH, Vent. ON"
Return

Temp.11:
If A = 1 Then Gosub Temp.12
If A = 0 Then Gosub Hauptprogramm
Return

Temp.12:
A = 0
Portb.0 = 0
Print "Temp.LOW, Vent. OFF"
Return

End

Bei diesem Code bekomme ich nach einigen Sekunden eine Fehlermeldung (Integer Overflow)!

Könntet ihr mir sagen woran das liegt und was ich dagegen machen kann?

Vielen dank schon mal im Voraus!


MFG

Harry

linux_80
19.08.2007, 22:00
Hallo,

ist ja schon ein hübsches Programm geworden, aber,
das mit dem "Gosub Hauptprogramm" geht so nicht [-X
da kommt er irgendwann durcheinander, denn der merkt sich bei Gosub die Adresse wo er hergekommen ist, und diese Liste ist irgendwann voll, weil kein Return dazu kommt, und dann hängt er sich weg !

Also aus dem Unterprogramm immer mit Return zurück, nicht direkt, per Goto oder Gosub.

Harry252
19.08.2007, 22:17
Danke Linux_80 für die Hilfe!

Jetzt fällt mir sogar auf, das diese 2. If Then Abrage in den Subroutinen überflüssig ist.

Gibt es eigentlich eine Möglichkeit einen Zufallsgenerator zu programmieren der mir dann eine Zufallstemperatur auswirft und dann meinen momentanen Code zwingt PORTA.0 bzw. PORTB.0 zu schalten?


MFG

Harry

linux_80
19.08.2007, 22:27
Der Simulator ist jetzt nicht so mein Ding, ich probier das immer gleich in der Hardware.

Aber beim AVR-Studio-Simulator muss man das auch selber vorher einstellen, damit bei der nächsten If-Abfrage anders entschieden wird.

Harry252
19.08.2007, 22:42
Ich probier lieber erst mit dem Simulator, der ist ja auch umsonst!
Wie ich ja auch geschrieben habe bin ich ein totaler Neuling in dieser
Thematik, deshalb möchte ich mir das Geld noch sparen, außerdem
seh ich auch noch garnicht durch! Ich weiß nicht was ich alles benötige,
am besten etwas fertig aufgebautes damit ich nicht löten muss (gab
schon einige versuche, die alle schief gingen)! Und wenn dann hät
ich gern ein Board mit dem ich nachher auch was anfangen kann z.B.
für den AQ-Computer! Am meisten gefallen mir die Boards von
www.shop.display3000.com! Diese sind aber teuer!

Deshalb erst der Simulator bis mir am besten jemand sagt was ich
gebrauchen könnte!


MFG

Harry