Заметил одну особенность, если из подпрограммы выходить преждевременно по команде Return, то выполнение программы начнется, заново а не с того места в главном цикле, откуда эта подпрограмма была вызвана. 
 Глюк или оно так и задуманно, и как вернуться из подпрограммы в тоже самое место? 
 Вот кусок кода с которым работаю, если переменная А=2 тогда после выполнения условия нужно вернуться в основной цикл, не проверяя больше значение этой переменной. На деле получается что после вызова команды Return программа начинается выполняться с самого начала, а не с места вызова подпрограммы. 
 Code
Button: 
  Timer1 = 0 
  Start Timer1 
  Backlight = 1 
    If A = 2 Then 
     A = 0 
     If Tdispl <> Temp Then                    
       Temp = Tdispl 
       Temp_eeprom = Temp                    
       Cls 
       Lcd "Temp rec" 
       Wait 1 
     End If 
     If Hdispl <> Hum Then 
        Hum = Hdispl 
        Hum_eeprom = Hum 
        Cls   
   Lcd "Humidity rec" 
  Wait 1 
  End If 
  Waitms 30  
  Gifr = 64  
  Return 
  End If 
  If A = 1 Then 
   A = 2 
   Hdispl = Hum 
   End If 
  If A = 0 Then 
   A = 1 
   Tdispl = Temp 
  End If 
  Waitms 30   
  Gifr = 64    
 Return