-
-
Erfahrener Benutzer
Roboter Genie
Hallo Hans,
man freu sich ja als Anfänger über alles was funktioniert - ging mir auch nicht anders, und meine ersten Programme sahen echt erheblich schlimmer aus als deine ... 
aber wie immer kann man einiges verbessern. ich glaube, dein programm funktioniert auch jetzt noch nicht optimal. wenn du eine taste drückst, und eine sekunde später eine andere, dann geht der tastendruck verloren, da das programm in der "wait 2" anweisung hängt.
desweiteren musst du alle möglichen kombinationen an tastern abfragen, was viel code bedeutet und bei einem evtl. hinzukommenden taster dann wirklich unübersichtlich wird.
hier aus dem bauch ein paar verbesserungen, ohne das getestet zu haben. ich sitze auch grade nicht an bascom, deswegen wirds sicherlich ein paar schreibfehler geben 
einiges könnte man auch kürzer machen, aber ich schreibe einiges etwas ausführlicher und dabei leider auch umständlicher
$regfile = "8515def.dat"
$crystal = 4000000
Config Lcd = 20 * 4
Config Lcdmode = Port
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6
Config Lcdpin = Pin , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Baud = 9600
Config Portd = Input
Config Portb = Output
'-- Alle Leds ausschalten. Wegen pullup ist 0= eingeschaltet
portb = 255
Cls
dim tasten as byte
tasten=255 'alle bits gesetzt. eine 0 bedeutet: taster gedrückt
'interrupt configurieren. wird ca. 60 mal pro sekunde ausgelöst
config timer0 = counter, prescale=256
on timer0 tastenlesen
enable interrupts
do
if tasten.0 = 0 then gosub t0
if tasten.1 = 0 then gosub t1
if tasten.2 = 0 then gosub t2
if tasten.3 = 0 then gosub t3
loop
t0:
'hier wird das gemacht, was taste 0 auslösen soll
...
tasten.0 = 1 'taste wieder als ungedrückt markieren
return
t1:
'hier wird das gemacht, was taste 1 auslösen soll
...
tasten.1 = 1 'taste wieder zurücksetzen
return
t2:
'hier wird das gemacht, was taste 2 auslösen soll
...
tasten.2 = 1 'taste wieder zurücksetzen
return
t3:
'hier wird das gemacht, was taste 3 auslösen soll
...
tasten.3 = 1 'taste wieder zurücksetzen
return
tastenlesen:
'interrupt-routine: wenn eine tasten gedrückt ist (=0) dann wird die null in der variablen "tasten" vermerkt
'da es per interrupt geschiet, braucht es nicht in der hauptschleife zu stehen und funktioniert auch während das programm irgendwo in einer wait anweisung hängt
if pind.0=0 then tasten.0 = 0
if pind.1=0 then tasten.1 = 0
if pind.2=0 then tasten.2 = 0
if pind.3=0 then tasten.3 = 0
return
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen