Bascom Problem mit Sprungbefehlen Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
Bascom Problem mit Sprungbefehlen |
|
|
|
|
BID = 534186
ElektroNicki Inventar
Beiträge: 6429 Wohnort: Ugobangowangohousen
|
|
Hallo,
bin hier so langsam am Verzweifeln.
Ich versuche ein Programm zu schreiben, dass etwas eigentlich recht simples macht: 8 Ledn und ein Taster; drückt man den Taster ein mal, geht die erste Led an, beim zweiten Mal geht sie aus, beim dritten mal geht die dritte Led an,etc. (Also dass immer nur eine Led leuchtet). Folgendes Programm funktioniert nur leidlich:
Code : |
$regfile "m32def.dat"
$crystal= 8000000
Dim A As byte
A = Pind.4
Do
For A = 1 To 1
Wend
Porta.1 = 1
Wait 1
For A = 1 To 1
Next
Porta.1 = 0
Wait 1
For A = 1 To 1
Next
Porta.2 = 1
Wait 1
For A = 1 To 1
Next
Porta.2 = 0
Wait 1
For A = 1 To 1
Next
Porta.3 = 1
Wait 1
For A = 1 To 1
Next
Porta.3 = 0
Wait 1
For A = 1 To 1
Next
Porta.4 = 1
Wait 1
For A = 1 To 1
Next
Porta.4 = 0
Wait 1
For A = 1 To 1
Next
Porta.5 = 1
Wait 1
For A = 1 To 1
Next
Porta.5 = 0
Wait 1
For A = 1 To 1
Next
Porta.6 = 1
Wait 1
For A = 1 To 1
Next
Porta.6 = 0
Wait 1
For A = 1 To 1
Next
Porta.7 = 1
Wait 1
For A = 1 To 1
Next
Porta.7 = 0
Wait 1
For A = 1 To 1
Next
Porta.8 = 1
Wait 1
For A = 1 To 1
Next
Porta.8 = 0
Wait 5
Loop
End |
|
Die ganzen Klimmzüge habe ich gemacht, weil ich nicht weiß, ob man den Zustand "alles aus" mit rotate hinbekommt, ich habe keine Ahnung wie man das sonst hinbekommen könnte, deshalb frage ich euch, ob ihr a) wisst, wie ich mein Programm so hinbiegen kann, dass es funktioniert, oder b) eine elegantere Lösung parat habt.
PS: a (der Zustand des Tasters) ist als Byte definiert, weil es sonst Fehler hagelt.
PPS: Ich verwende das Pollinboard. Muss ich für die Taster Pull-ups aktiviert haben?
_________________
|
|
BID = 534196
Sunday Neu hier
Beiträge: 49
|
|
Hallo
Weis zwar nicht welchen µC du verwendest,
aber da ich selber Mikrobasic verwende und die
Codes ähnlich sind, hab ich dir mal eine Routine
eingefügt, von meinem Prg. Vielleicht hilft es dir
ja weiter.
b = 1
if PORTA.5 = 1 then ;Taste 5 abfragen
if b = 1 then
PORTA.3 = 1 ;LED an
b = 0
else
b = 1
PORTA.3 = 0 ;LED aus
end if
usw.
SUNDAY.
|
|
BID = 534200
Jornbyte Moderator
Beiträge: 7178
|
Hallo Nicki
Du hast in deinem Programm die Zeilen:
For A=1 To 1
Next
stehen. Diese werden nicht ausgeführt, da bei "Durchlaufe eine Schleife von 1 bis 1" die Bedingung schon erfüllt ist. Daher sind diese Zeilen nutzlos und können ohne Bedenken gelöscht werden.
Du hast auch in der Pinzählung einen Fehler. Richtig ist die Zählung von 0 bis 7 nicht so wie bei dir, von 1 bis 8.
nun zur Erfüllung deiner Aufgabenstelung:
(DO)
verwende den Befehl Bitwait um deinen Taster abzufragen
verwende Rotate um die Led der Reihe nach ein und aus zu schalten
beachte bei Rotate den Wert des einzelnen Bit's
(1, 2, 4, 8, 16, 32, 64, 128)
prüfe (IF) ob du 1 oder 128 ereicht hast, je nach Rotation (rechts, links)
lade das Port(A) mit 0 (Null) um alle LED aus zu schalten
(LOOP)
(END)
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 534202
ElektroNicki Inventar
Beiträge: 6429 Wohnort: Ugobangowangohousen
|
Danke ihr zwei!
@ Jornbyte:
Wenn ich deinen Vorschlag richtig deute, gehen die Ledn nur am "Anfang" und am "Ende" aus.
Hm, ich meinte allerdings folgendes Muster:
00000000
tasterdrück
10000000
tasterdrück
00000000
tasterdrück
01000000
tasterdrück
00000000
tasterdrück
00100000
tasterdrück
00000000
.
.
.
Ich bräuchte also ne Art Tor oder wie man das nennt.
_________________
Gute Nacht.
[ Diese Nachricht wurde geändert von: ElektroNicki am 12 Jul 2008 22:35 ]
[ Diese Nachricht wurde geändert von: ElektroNicki am 12 Jul 2008 22:39 ]
[ Diese Nachricht wurde geändert von: ElektroNicki am 12 Jul 2008 22:42 ]
|
BID = 534204
Racingsascha Schreibmaschine
Beiträge: 2247 Wohnort: Gundelsheim
|
Ich würde das etwa so lösen:
-in eine Speicherzelle 0b00000001 reinschreiben (0x01)
-den Port löschen
schleife
-auf Tastendruck warten
-wenn gedrückt den Port abfragen
-wenn Port nicht 0, Portwert in die Speicherzelle schreiben, um 1 verschieben und den Port löschen
-wenn Port 0, den Wert der Speicherzelle in den Port schreiben.
-goto schleife
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.
|
BID = 534210
ElektroNicki Inventar
Beiträge: 6429 Wohnort: Ugobangowangohousen
|
hey, coole Idee!
_________________
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 182400804 Heute : 578 Gestern : 7426 Online : 284 26.11.2024 4:53 4 Besucher in den letzten 60 Sekunden alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
In 418 Sekunden wird ein Backup gestartet. Bitte beenden Sie alle Eingaben. Das Forum wird dann für 10 Minuten abgeschaltet ! |
|