Witam,
Rozpocząłem pracę nad programem obsługującym sampler kruszyw i już przy obsłudze menu natknąłem się na problem.
Chodzi o obsługę podprogramu "Mccp2", a mianowicie po podaniu na PINA.3 i PINA.4 przechodzi do podprogramów "Czas_cyklu_up" i "Czas_cyklu_down" jednak po dodaniu lub odjęciu zmiennej "czas_cyklu" nie wraca do "Mccp2" lecz do podprogramu "Menu_ilosc_probek"... Próbowałem modyfikować kod na przeróżne sposoby nawet bez poleceń return, a program i tak wychodzi z obsługi podprogramu...
Wydaje mi się, że jest to jakiś błąd kompilatora, lecz prosiłbym Szanownych Kolegów o rzucenie fachowym okiem na załączony kod... może coś przeoczyłem.
Pozdrawiam
Rozpocząłem pracę nad programem obsługującym sampler kruszyw i już przy obsłudze menu natknąłem się na problem.
$regfile = "m16def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Ddra.2 = 0
Ddra.3 = 0
Ddra.4 = 0
Porta.2 = 1
Porta.3 = 1
Porta.4 = 1
Declare Sub Inicjacja_menu
Declare Sub Menu_czas_cyklu
Declare Sub Mccp2
Declare Sub Czas_cyklu_up
Declare Sub Czas_cyklu_down
Declare Sub Leave_menu_poziom2
Declare Sub Menu_ilosc_probek
Declare Sub Menu_czas_pobierania_probki
Declare Sub Menu_powrot
Declare Sub Menu_up
Declare Sub Menu_down
Declare Sub Leave_menu
Dim Czas_cyklu As Byte
Dim Zmiana As Bit
Dim Zmiana2 As Bit
Dim Menu As Byte
Config Debounce = 50
Czas_cyklu = 60
Zmiana = 0
Zmiana2 = 0
Do
Cls
Debounce Pina.2 , 0 , Inicjacja_menu
Loop
End
Inicjacja_menu:
Menu = 1
Do
Select Case Menu
Case 1 : Gosub Menu_czas_cyklu
Case 2 : Gosub Menu_ilosc_probek
Case 3 : Gosub Menu_czas_pobierania_probki
Case 4 : Gosub Menu_powrot
Case 5 : Return
End Select
Loop
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Menu_czas_cyklu:
Zmiana = 0
Cls
Cursor Off
Lcd "czas cyklu" ; " " ; Czas_cyklu
Waitms 500
Do
Debounce Pina.3 , 0 , Menu_up
Debounce Pina.4 , 0 , Menu_down
Debounce Pina.2 , 0 , Mccp2
If Zmiana = 1 Then
Return
Else
Loop
End If
Mccp2:
Zmiana2 = 0
Do
If Zmiana2 = 1 Then
Zmiana = 1
Return
Else
Cls
Lcd Czas_cyklu
Waitms 500
Debounce Pina.3 , 0 , Czas_cyklu_up
Debounce Pina.4 , 0 , Czas_cyklu_down
Debounce Pina.2 , 0 , Leave_menu_poziom2
End If
Loop
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Menu_ilosc_probek:
Zmiana = 0
Cls
Cursor Off
Lcd "ilosc probek"
Waitms 500
Do
Debounce Pina.3 , 0 , Menu_up
Debounce Pina.4 , 0 , Menu_down
If Zmiana = 1 Then
Return
Else
Loop
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Menu_czas_pobierania_probki:
Zmiana = 0
Cls
Cursor Off
Lcd "czas pobierania probek"
Waitms 500
Do
Debounce Pina.3 , 0 , Menu_up
Debounce Pina.4 , 0 , Menu_down
If Zmiana = 1 Then
Return
Else
Loop
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Menu_powrot:
Zmiana = 0
Cls
Cursor Off
Lcd "powrot"
Waitms 500
Do
Debounce Pina.3 , 0 , Menu_up
Debounce Pina.4 , 0 , Menu_down
Debounce Pina.2 , 0 , Leave_menu
If Zmiana = 1 Then
Return
Else
Loop
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Menu_up:
Zmiana = 1
Incr Menu
If Menu = 5 Then
Menu = 1
End If
Return
Menu_down:
Zmiana = 1
Decr Menu
If Menu = 0 Then
Menu = 4
End If
Return
Leave_menu:
Menu = 5
Zmiana = 1
Return
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Czas_cyklu_up:
Do
Czas_cyklu = Czas_cyklu + 1
If Czas_cyklu = 120 Then
Czas_cyklu = 1
End If
Return
Loop
Czas_cyklu_down:
Do
Czas_cyklu = Czas_cyklu - 1
If Czas_cyklu = 0 Then
Czas_cyklu = 120
End If
Return
Loop
Leave_menu_poziom2:
Zmiana2 = 1
Return
Chodzi o obsługę podprogramu "Mccp2", a mianowicie po podaniu na PINA.3 i PINA.4 przechodzi do podprogramów "Czas_cyklu_up" i "Czas_cyklu_down" jednak po dodaniu lub odjęciu zmiennej "czas_cyklu" nie wraca do "Mccp2" lecz do podprogramu "Menu_ilosc_probek"... Próbowałem modyfikować kod na przeróżne sposoby nawet bez poleceń return, a program i tak wychodzi z obsługi podprogramu...
Wydaje mi się, że jest to jakiś błąd kompilatora, lecz prosiłbym Szanownych Kolegów o rzucenie fachowym okiem na załączony kod... może coś przeoczyłem.
Pozdrawiam
