PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : If Then und Else If



Bqube
26.12.2008, 21:14
Hallo leute,
ich habe ein kleines Problem und zwar hab ich mir schon die Hilfe durchgelesen aber ich komme nicht weiter.




$regfile = "m8def.dat"

$crystal = 4000000

$baud = 9600

Config Portc.0 = Output
Config Portc.1 = Input
Config Portc.2 = Input


Led Alias Portc.0
Taster Alias Portc.1
Tastera Alias Portc.2

do

If Taster = 1 Then
Led = 1
Else If Taster = 0 Then
Led = 0
Else If Tastera = 1 Then
eins:
Led = 1
Waitms 100
Led = 0
Waitms 100
Goto eins
End IF

Loop


Das soll so Funktionieren das wenn ich den einen Taster drücke die Led an ist also Dauerhaft und wenn ich sie los lasse wieder aus geht. Wenn ich aber nun den andere Taster drücke soll die Led anfangen zu Blinken und das in einer dauerschleife warum geht das nicht so ich hab das ganze nur auf ne andere art und weise hinbekommen und zwar so



$regfile = "m8def.dat"

$crystal = 4000000

$baud = 9600

Config Portc.0 = Output
Config Portc.1 = Input
Config Portc.2 = Input
Config Portc.3 = Output

Led Alias Portc.0
Leda Alias Portc.3
Taster Alias Portc.1
Tastera Alias Portc.2

Do
D:
If Taster = 1 Then
Led = 1
Else
Led = 0
End If

E:
If Tastera = 1 Then
Goto L
Else
Goto D
End If

L:
Leda = 1
Waitms 1
Leda = 0
Waitms 1
Goto E

Loop


Kann mir einer von euch da helfen.
danke schonmal
Mfg P.Gnauck

patti16
26.12.2008, 21:31
Hallo

schreib mal waitms 500 dann wirst du das Blinken sehen vorher nicht weil es viel zu schnell ist für dein Auge.

oder schreibe

z.b. toggle portb.0

Jaecko
26.12.2008, 21:32
Hab grad ein kleines Verständnisproblem, was das Ding genau tun soll.
Aber evtl. gehts ja, wenn du in einer IF 2 Abfragen prüfst, also etwa so:
If Taster1 = 0 AND Taster2 = 0 Then...
If Taster1 = 1 AND Taster2 = 0 Then...
If Taster1 = 0 AND Taster2 = 1 Then...
If Taster1 = 1 AND Taster2 = 1 Then...

Wären dann 4 Zustände, je nach dem welcher Taster gedrückt/nicht gedrückt ist.

jeffrey
26.12.2008, 21:34
hallo,
also erst mal, würd ich die ganzen gotos weg lassen, da blickt ja keiner durch, was da wann wo hin springt.
dann kann ich mir nicht vorstellen, dass des 2. geht, weil da blinkt die led ja mit 500hz, glaub net, dass man des sehen kann.
und beim 2. sollte ja dann das blinken ja wieder aufhören, wenn man den taster los lässt, beim ersten nicht.
allerdings wird beim ersten deine led nie anfangen zu blinken, weil die bedingung nie abgefragt werden wird.
mfg jeffrey

Bqube
27.12.2008, 00:47
Den zweiten Code hab ich mit einem AVR Simulator Getestet da kann man die geschwindigkeit einstellen von daher seh ich die LED Blinken *gg* nur mien Problem ist oder auch die Frage wie das richtig Funktioniert mit den
IF befehlen weil wenn ich das so mache mit

If .....Than
......
Else If ...... Than
......
Else If ...... Than
End If

da sagt mein Bascom Compiler immer Error aber warum ??

AUnruh
27.12.2008, 01:08
If .....Than
......
Else If ...... Than
......
Else If ...... Than
End If

da sagt mein Bascom Compiler immer Error aber warum ??

Schau mal in die Hilfe:

Syntax
IF expression THEN
[ ELSEIF expression THEN ]
[ ELSE ]
END IF

evtl. wäre es einfacher und übersichtlicher wenn Du das per:

Syntax
SELECT CASE var
CASE test1 : statements
[CASE test2 : statements ]
CASE ELSE : statements
END SELECT

versuchst zu lösen. So viele If then / ElseIf...End if machen das ganze sehr unübersichtlich. Ist aber nur meine persönliche Meinung O:)

Gruss // André

jeffrey
27.12.2008, 01:18
hi,
also da sind schreibfehler drin. probier mal elseif ... then.
gn8 jeffrey

Bqube
27.12.2008, 19:33
Ich hab alles versucht ich weiß nicht ob ich zu doof dafür bin aber ich will das ich Eine Led mit einem Taster an und ausschalten kann und wenn ich einen anderen Taster drücke soll sie Blinken nur ich bekomme es so hin



D:
If Taster = 1 Then
Led = 1
Else
Led = 0
End If

E:
If Tastera = 1 Then
Goto L
Else
Goto D
End If

L:
Leda = 1
Waitms 1
Leda = 0
Waitms 1
Goto E



Aber mit Elseif und die sache mit dem Case versteh ich schonmal garnet ?

for_ro
27.12.2008, 21:13
Mal abgesehen davon, dass du dir die Goto's besser abgewöhnen solltest, ist deine Leuchtzeit von 1ms (1/1000 sec) schon recht kurz, ebenso die Auszeit.
Das können deine Augen nicht erkennen. Mach mal Wait 1, dann siehst du was blinken.

Gruß

Rolf

jeffrey
27.12.2008, 23:46
hi,
probier des doch mal so:




If Taster = 1 Then
Led = 1
Else
Led = 0
End If

while Tastera = 1
toggle Led
waitms 500
wend




mfg jeffrey

Bqube
28.12.2008, 04:10
Danke für die Hilfe aber wenn ich den Tastera Drücke dann bleibt der Portc.0 einfach nur auf High und geht nimmer zurück.
Schau mal auf das Bild was ich Hochgeladen hab da kann man erkennen das der Tastera also Portc.2 nicht High ist aber der Ausgang an der Led ist es.
Mfg P.Gnauck

jeffrey
28.12.2008, 21:59
hi,
hast du deine simulationszeit auch enstprechend eingestellt?
mfg jeffrey