And fuktion Bascom fehler

Gast #988761
Lesenswert?

Hallo,
ich glaube die 'and' Funktion ist in dieser Konstellation nicht 
anwendbar.
Ausserdem ist der Toggle Befehl für Ausgangsports gedacht, du hast 
jedoch
portb.1 und portb.2 als Input definiert.

Ich vermute folgendes Programm sollte deine Aufgabe erfüllen:

Config Porta.1 = Input
Config Portb.1 = output
Config Portb.2 = output

Do

If Porta.1 = 1 Then
 Toggle Portb.1
 wait 1           'damit Du auch was erkennen kannst
 Toggle Portb.2
 wait 1
End If

 Loop
End

Gruß Jürgen
Gast #988809
Lesenswert?

Hallo,

bei meinem Vorschlag von oben werden die Ports bei jedem 
Schleifendurchlauf
umgeschaltet. Wenn dieser Schaltvorgang nur einmal ausgeführt werden 
soll
brauchst du noch eine Hilfsvariable, die anzeigt, ob der Toggle schon 
erfolgt ist.

dim Hilfsvarible as bit
Config Porta.1 = Input
Config Portb.1 = output
Config Portb.2 = output

Hilfsvariable = 0
Do
if Porta.1 = 0 then Hilfsvariable = 0
 If Porta.1 = 1 Then
  if Hilfsvariable = 0 then
  Hilfsvariable = 1
  Toggle Portb.1
  Toggle Portb.2
  End If
 end if
 Loop
End


ich habs jetzt nich ausprobiert, aber vieleicht hilft es Dir.
Gruß Jürgen
Gast #988814
Lesenswert?

Siehe Rolf

dim Hilfsvarible as bit
Config Porta.1 = Input
Config Portb.1 = output
Config Portb.2 = output

Hilfsvariable = 0
Do
if Pina.1 = 0 then Hilfsvariable = 0
 If Pina.1 = 1 Then
  if Hilfsvariable = 0 then
  Hilfsvariable = 1
  Toggle Portb.1
  Toggle Portb.2
  End If
 end if
 Loop
End
Gast #988850
Lesenswert?

In der Hilfsvariablen merkt sich das Programm ob der Toggle Befehl
seit Programmstart schon einmal ausgeführt wurde.
Wird der Toggle Befehl ausgführt wird gleichzeitig die Hilfsvariable
gesetzt.
Mit der Abfrage  'if Hilfsvariable = 0 then' wird überprüft ob der
der Toggle Befehl schon in einem vorherigen Programmdurchlauf ausgeführt
wurde und wenn nicht, dann wird er nun ausgeführt.

Ich nehme an, das Pina.1 mit einem Taster bedient wird. Hierbei muß noch
das Prellen berücksichtigt werden. Am einfachsten ist dies mit einem
kurzen 'Wait' zu unterdrücken.

Soll bei einem erneuten Tasdendruck wieder ein Toggle erfolgen, muß
nach dem Loslassen der Taste die Hilfsvariable wieder zurückgesetzt 
werden.

Das folgende Programm sollte so im Simulator laufen:
$regfile = "m128def.dat"
$crystal = 1000000

dim Hilfsvarible as bit
Config Porta.1 = Input
Config Portb.1 = output
Config Portb.2 = output

Set Hilfsvarible
Do
'Waitms 100 'zum entprellen einfügen
If Pina.1 = 0 Then Reset Hilfsvarible
 If Pina.1 = 1 Then
  If Hilfsvarible = 0 Then
  Set Hilfsvarible
  Toggle Portb.1
  Toggle Portb.2
  End If
 end if
 Loop
End

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren