PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : loop problem



pinoccio
30.04.2006, 18:14
Hi
leider gibt es noch ein Problem bei einem meiner ersten Programme. Sobald der Taster mit Masse verbunden ist, sollte das Programm die Loop-Schleife verlassen und die LED sollte ausgehen.. Dies tut es aber leider net. Der Wichtige teil sieht wie folgt aus.





Starter = 1
Led = 1
Do
If Starter = 0 Then
A = 1
Else
Waitms 1
End If
Loop Until A = 1
Led = 0


Vielen Dank schon einmal

linux_80
30.04.2006, 19:41
Hallo,
kannst Du noch etwas mehr vom Code reinstellen,
zB. die Stelle an der A einen anderen Wert als 1 bekommt.

pinoccio
30.04.2006, 21:21
Dim A As Byte
A = 0

Starter = 1
Led = 1
Do
If Starter = 0 Then
A = 1
Else
Waitms 1
End If
Loop Until A = 1
Led = 0

linux_80
30.04.2006, 21:34
Naja, hilft uns noch nicht recht weiter,
Wer setzt Starter auf 0 ?
Ist das ein Eingangspin, welches, wie ist es verkabelt ?

Was geht jetzt genau nicht, wenn Du den Taster drückst, geht die LED nicht aus, dann bitte mit meiner ersten Fragen weiter machen ;-)

hrei
30.04.2006, 22:07
.... und wie sieht die Konfiguation der Ports aus, wie der Alias für Starter usw...

Pinnoccio, lass' Dir doch nicht alles aus der Nase ziehen, so hochgeheim oder so lang kann Dein Programm doch bei dem Wissensstand noch nicht sein :-).

Grüße
Henrik

Windi
01.05.2006, 08:31
Am Besten einfach das komplette Programm hier reinstellen, dann werden Sie geholfen.

pinoccio
01.05.2006, 14:04
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600



Dim A As Byte
Config Porta.0 = Output
Motorl Alias Porta.0
Config Porta.1 = Output
Motorr Alias Porta. 1
Config Porta.2 = Input
Starter Alias Porta.2
Config Porta.6 = Output
Led Alias Porta.6

A = 0
Starter = 1
Led = 1
Motorl = 0
Motorr = 0
Do
If Starter = 0 Then
A = 1
Else
Waitms 1
End If
Loop Until A = 1
Led = 0
Motorl = 1
Motorr = 1
Wait 5
Motorl = 0
Motorr = 0
mehr wars noch nicht

PicNick
01.05.2006, 14:15
> Starter Alias Porta.2 <

Zum einlesen brauchst du :

Starter Alias Pina.2

Hanni
01.05.2006, 14:18
hmmm .. sehr wirrer Programmierstil *mal anmerk*

so sollte es besser lesbar sein (vor allem, was Schleifen etc angeht):


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Dim A As Byte
Config Porta.0 = Output
Motorl Alias Porta.0
Config Porta.1 = Output
Motorr Alias Porta. 1
Config Porta.2 = Input
Starter Alias Porta.2
Config Porta.6 = Output
Led Alias Porta.6

A = 0
Starter = 1
Led = 1
Motorl = 0
Motorr = 0
Do
If Starter = 0 Then
A = 1
Else
Waitms 1
End If
Loop Until A = 1

Led = 0
Motorl = 1
Motorr = 1
Wait 5
Motorl = 0
Motorr = 0

Ach ja, ich würde mal sagen, da fehlt irgendwie etwas ... und einiges ist auch nicht so ganz richtig ...

z.B. werden Eingänge immer mit PIN und nicht mit PORT ausgelesen
des weiteren scheint mir irgendwas am Ende zu fehlen ...

pinoccio
01.05.2006, 19:00
Hallo noch mal,
vielen dank für die ganzen Antworten, mittlerweile läuft das Programm auch, aber noch eine andere Frage:



$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Config Porta.0 = Output
Motorlv Alias Porta.0
Config Porta.1 = Output
Motorrv Alias Porta.1
Config Porta.2 = Input
Bumpervorne Alias Porta.2
Config Porta.3 = Input
Bumperhinten Alias Porta.3
Config Porta.4 = Output
Led Alias Porta.4
Config Porta.5 = Output
Summer Alias Porta.5

Config Int0 = Low Level
Enable Interrupts
Enable Int0
On Int0 Bums

Portd.2 = 1
Porta.2 = 1
Porta.3 = 1

Do
Motorlv = 1
Motorrv = 1
Led = 0
Waitms 10
Loop
End


Bums:
Motorlv = 0
Motorrv = 0

Do
If Bumpervorne = 0 Then
Led = 1
End If
Loop Until Led = 1


In diesem Programm ist in dem letzten Teil, ab Bums: ein Problem.
Der Interruptteil wird erkannt und die Motoren werden ausgeschaltet. Leider wird die If-Schleife aber ignoriert. Der Schalter aber direkt an den Port angeschlossen, und der Int-Pin über eine kleine Diode.

albundy
01.05.2006, 19:21
du solltetst dir die Antworten genauer durchlesen.

z.B. werden Eingänge immer mit PIN und nicht mit PORT ausgelesen
wenn du das änderst,

Bumpervorne Alias Porta.2
,dann funktioniert auch die Abfrage.

linux_80
01.05.2006, 20:11
Was kommt eigentlich nach dem Loop until ...
Normalerweise ist da Nirwana, wenn man Glück hat wird man wiedergeboren, und der µC beginnt von vorne, aber nur wenn im Speicher danach nirgends sonst was falsches steht !

Edit:
Bascom macht ans ende immer eine endlosschleife, dH. der µC bleibt dann im Prinzip stehen und macht nix mehr !?

hrei
01.05.2006, 20:22
Was kommt eigentlich nach dem Loop until ...
Normalerweise ist da Nirwana, wenn man Glück hat wird man wiedergeboren, und der µC beginnt von vorne, aber nur wenn im Speicher danach nirgends sonst was falsches steht !


Stimmt. Die ISR muss mit einem Return abgeschlossen werden, sonst git es einen Absturz.

Grüße
Henrik