robodriver
06.11.2007, 21:00
Hallo Leute,
ich habe ein Problem in meinem Quellcode.
Zunächst mal mein Code in gekürzter Form:
$regfile = "m8def.dat"
$crystal = 4000000
Ddrb = &B00111100
Ddrc = &B00001110
Ddrd = &B10000001
Portb = &B00000000
Portc = &B00000000
Portd = &B00001000
Eingang Alias Pind.3
Code_hoch Alias "0111011110"
Code_rechts Alias "1011101101"
Code_links Alias "0011011110"
Code_runter Alias "1011001101"
Code_enter Alias "0111101101"
Code_frechts Alias "1011011110"
Code_flinks Alias "0011101100"
Error_led Alias Portd.7
Dim Statusbit As Byte
'Bits im Statusbyte:
Faceauf Alias 0
Get_data Alias 1
Menue Alias 2
On Int1 Ir_dataempfang
Enable Int1
Enable Interrupts
Hauptschleife:
Do
Loop
Ir_dataempfang:
'Dieser Teil ist für euch unbedeutend-----
Set Error_led
For A = 0 To 71
Temp(a) = Eingang
Waitus 902
Next A
Code = ""
For A = 49 To 58
Tmp = Temp(a)
Code = Code + Str(tmp)
Next A
'-------------------------------------------
If Code = Code_rechts Then
If Statusbit.menue = 1 Then
Menue_cnt = Menue_cnt + 1
Locate 2 , 1
If Menue_cnt > 4 Then Menue_cnt = 1
If Menue_cnt < 1 Then Menue_cnt = 4
If Menue_cnt = 1 Then Lcd "Fahr alleine rum"
If Menue_cnt = 2 Then Lcd " manuell fahren "
If Menue_cnt = 3 Then Lcd " Raumtemperatur "
If Menue_cnt = 4 Then Lcd " Akku Spannung "
End If
End If
If Code = Code_enter Then
If Statusbit.menue = 0 Then
Statusbit.menue = 1
Cls
Locate 1 , 4
Lcd "Hauptmenõ"
Locate 2 , 1
Lcd "Fahr alleine rum"
Menue_cnt = 1
Else
Cls
Locate 1 , 2
Lcd "Menõ verlassen"
Statusbit.menue = 0
End If
End If
Do
'Warte bis Taste wieder losgelassen wurde
A = A + 1
If A > 125 Then
Goto Losgelassen
End If
If Eingang = 0 Then A = 1
Waitms 1
Loop
Losgelassen:
Reset Error_led
Return
So, nun zu meinem Problem:
Das öffnen und schließen des Menüs über die enter-Taste funktioniert einwandfrei.
Nun habe ich aber ein Problem mit der rechts-Taste:
Wenn diese betätigt wird springt er in die Entsprechende If-Schleife. Wenn er bei dem Befehl Menue_cnt = Menue_cnt + 1 ankommt ist diese Variable allerdings IMMER 0 und somit springt er an dieser Stelle immer auf 1. (was auf dem Display dann "Fahr alleine rum" entspricht.
Hoffe irgendjemand versteht was ich meine....
Irgendwie wird die Variable Menue_cnt nach meinen bisherigen Beobachtungen bei jedem Interrpt-Aufruf auf 0 gesetzt (Habe mir die Variable an verschiedenen Stellen auf dem Display mal anzeigen lassen. Nach auslösen der Interrupts über enter ist sie 1 und beim nächsten Interruptaufruf ist sie schon wieder 0). Woran liegt das?
Kann sich das jemand erklären? Was kann man dagegen tun? Oder ist doch noch ein Fehler im Quellcode?
tausend dank schonmal an diejenigen die sich die Mühe machen und versuchen mir zu helfen. Bin für jedne Tipp dankbar.
Gruß Robodriver
PS: Einstellungen:
HW Stack = 64
Soft Stack = 16
Framesize = 32
ich habe ein Problem in meinem Quellcode.
Zunächst mal mein Code in gekürzter Form:
$regfile = "m8def.dat"
$crystal = 4000000
Ddrb = &B00111100
Ddrc = &B00001110
Ddrd = &B10000001
Portb = &B00000000
Portc = &B00000000
Portd = &B00001000
Eingang Alias Pind.3
Code_hoch Alias "0111011110"
Code_rechts Alias "1011101101"
Code_links Alias "0011011110"
Code_runter Alias "1011001101"
Code_enter Alias "0111101101"
Code_frechts Alias "1011011110"
Code_flinks Alias "0011101100"
Error_led Alias Portd.7
Dim Statusbit As Byte
'Bits im Statusbyte:
Faceauf Alias 0
Get_data Alias 1
Menue Alias 2
On Int1 Ir_dataempfang
Enable Int1
Enable Interrupts
Hauptschleife:
Do
Loop
Ir_dataempfang:
'Dieser Teil ist für euch unbedeutend-----
Set Error_led
For A = 0 To 71
Temp(a) = Eingang
Waitus 902
Next A
Code = ""
For A = 49 To 58
Tmp = Temp(a)
Code = Code + Str(tmp)
Next A
'-------------------------------------------
If Code = Code_rechts Then
If Statusbit.menue = 1 Then
Menue_cnt = Menue_cnt + 1
Locate 2 , 1
If Menue_cnt > 4 Then Menue_cnt = 1
If Menue_cnt < 1 Then Menue_cnt = 4
If Menue_cnt = 1 Then Lcd "Fahr alleine rum"
If Menue_cnt = 2 Then Lcd " manuell fahren "
If Menue_cnt = 3 Then Lcd " Raumtemperatur "
If Menue_cnt = 4 Then Lcd " Akku Spannung "
End If
End If
If Code = Code_enter Then
If Statusbit.menue = 0 Then
Statusbit.menue = 1
Cls
Locate 1 , 4
Lcd "Hauptmenõ"
Locate 2 , 1
Lcd "Fahr alleine rum"
Menue_cnt = 1
Else
Cls
Locate 1 , 2
Lcd "Menõ verlassen"
Statusbit.menue = 0
End If
End If
Do
'Warte bis Taste wieder losgelassen wurde
A = A + 1
If A > 125 Then
Goto Losgelassen
End If
If Eingang = 0 Then A = 1
Waitms 1
Loop
Losgelassen:
Reset Error_led
Return
So, nun zu meinem Problem:
Das öffnen und schließen des Menüs über die enter-Taste funktioniert einwandfrei.
Nun habe ich aber ein Problem mit der rechts-Taste:
Wenn diese betätigt wird springt er in die Entsprechende If-Schleife. Wenn er bei dem Befehl Menue_cnt = Menue_cnt + 1 ankommt ist diese Variable allerdings IMMER 0 und somit springt er an dieser Stelle immer auf 1. (was auf dem Display dann "Fahr alleine rum" entspricht.
Hoffe irgendjemand versteht was ich meine....
Irgendwie wird die Variable Menue_cnt nach meinen bisherigen Beobachtungen bei jedem Interrpt-Aufruf auf 0 gesetzt (Habe mir die Variable an verschiedenen Stellen auf dem Display mal anzeigen lassen. Nach auslösen der Interrupts über enter ist sie 1 und beim nächsten Interruptaufruf ist sie schon wieder 0). Woran liegt das?
Kann sich das jemand erklären? Was kann man dagegen tun? Oder ist doch noch ein Fehler im Quellcode?
tausend dank schonmal an diejenigen die sich die Mühe machen und versuchen mir zu helfen. Bin für jedne Tipp dankbar.
Gruß Robodriver
PS: Einstellungen:
HW Stack = 64
Soft Stack = 16
Framesize = 32