PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitte um Hilfe bei Codeproblem



strunz
13.10.2006, 10:54
Hallo Leute,

ich hab da ein kleines Problem. Und zwar:

Warum springt mein Controller nach dem Reset sofort zur Sprungmarke "Fstart"??? Er überspringt also das erste Menü.....




$regfile = "m32def.dat"
$crystal = 1000000
$baud = 9600

Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.1
Config Lcd = 16 * 2

ldi r24, $24 'die Anpassungen für das Reichelt-LCD(162C)
rcall _lcd_control 'die Anpassungen für das Reichelt-LCD
ldi r24, $9 'die Anpassungen für das Reichelt-LCD
rcall _lcd_control 'die Anpassungen für das Reichelt-LCD
ldi r24,$20 'die Anpassungen für das Reichelt-LCD
rcall _lcd_control 'die Anpassungen für das Reichelt-LCD

Initlcd 'LCD initialisieren

Config Porta.0 = Output 'PortA als Output setzten
Config Portd = Input 'PortD Als Input Setzten
Portd = &B11111111 'Internen PullUp´s an PortD aktivieren

Dim Frequenz As Integer
Dim Izeit As Integer
Dim Pzeit As Integer

Dim F As Integer
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer

Config Debounce = 30 'Entprellzeit für Tester auf 30ms
Wait 1 'warte wegen LCD



'Programm Start

'+---------------------------------+
'| Startbildschirm & erste Auswahl |
'+---------------------------------+

Cls 'lösche LCD
Locate 1 , 1
Lcd "1-> Frequenz"
Locate 2 , 1
Lcd "2-> Puls/Pause"

While Pind.2 = 0 Or Pind.3 = 0
Debounce Pind.2 , 0 , Fstart , Sub
Debounce Pind.3 , 0 , Fstart , Sub
Wend




'+---------------------+
'| Frequenz einstellen |
'+---------------------+

Fstart:
F = 10 'setzt F =10
Cls
Locate 1 , 1
Lcd "Frequenz = Hz"
Locate 1 , 12
Lcd F
Locate 2 , 1
Lcd "1->ändern OK->OK"


While Pind.4 = 0 Or Pind.2 = 0
Debounce Pind.2 , 0 , Fok , Sub
Debounce Pind.4 , 0 , Frequenznok , Sub
Wend


.
.
.
.
.

chr-mt
13.10.2006, 11:19
Hi,
wenn pind.2 und pind.3 1 sind, löscht er ja sofort wieder das LCD.
Und wenn einer der Pins 0 ist, geht er auch dahin.
Das erste Menü wird also nicht zu sehen sein.

Du hast keine Hauptschleife im Programm, kein Return, kein End..
Willst du das alles mit Goto's machen ?

Übrigens, das Reichelt 162C geht doch auch ohne extra Anpassung.
Ich verwende die recht oft.

Was bewirkt denn der extra LCD- Code?

Gruß
Christopher

strunz
13.10.2006, 21:44
Danke, hast recht gehabt mit dem ersten teil
Hauptschleife? Return?End? Habe ich alles nicht! Ist vielleicht nicht schön, aber funzt auch ohne.
Mache das alles mit GOSUB. Hast du mir vielleicht ne Hompage, oder ein tutorial, wo das mit der Hauptschleife, END ,RETURN und so erklärt wird?

Bei mir macht das Display ärger wenn ich die Anpassungen(die ich aus einem anderen Forum habe) weglasse. Ich weiss aber nicht was die bewirken.

chr-mt
13.10.2006, 22:49
Ist vielleicht nicht schön, aber funzt auch ohne.
im Prinzip isses eigentlich völlig egal, Hauptsache das Programm läuft ;)

Ich mach's halt so, daß ich im Hauptprogramm eine Schleife habe, die dann weiter verzweigt.

Du mußt bei Tasterabfragen ja normalerweise immer wieder Abfragen, mußt also sowieso im Programm irgendwie zurückspringen.

Bei Gosub brauchst du ein Return, sonst läuft das Programm einfach weiter und springt nicht mehr zurück, wie es soll.

Ich mach's in etwa so:





Taster1 Alias Pind.0
Taster2 Alias Pind.1

Do
Gosub Tasterabfrage
Loop
End 'end program

Tasterabfrage:
If Taster1 = 0 Then
Gosub Label1
End If

If Taster2 = 0 Then
Gosub Label2
End If
Return



Label1:
Cls
Lcd "HAllo"
Return

Label2:
Cls
Lcd "TEST"
Return


'(Man sollte allerdings noch abfragen, ob der Menüpunkt schonmal abgefragt wurde,
'sonst flackert das Display durch die dauernden CLS während dem Tastendrücken und man sieht auch nicht viel ) ;).
'Oder nur eine Zeile löschen / überschreiben etc..



'Das Return läßt das Programm an der Stelle nach dem Gosub-Aufruf weiterarbeiten, springt also zurück.
' Im Gegesatz zum GOTO, bei dem lediglich zum Label gesprungen wird und nicht zurück.

strunz
17.10.2006, 09:40
Ja, allerdings ist es bei mir aussgeschlossen, dass ich wieder zurück in die vorherige schleife komme. ich gehe nämlich immer weiter ins Menü herrein.

Danke aber fü die Tipps.