hi,
i'm currently working on a menu selection using pic 16f886 and lcd 4x20. my problem is the pic only execute the first subroutine only....here is the code sample

tx:
Code:
@ DEVICE HS_OSC
define osc  20
define ADC_bits     10
define ADC_CLOCK    3
DEFINE ADC_SAMPLEUS 50

        TRISA   = %11111111
        ADCON0  = %00000001
        ADCON1  = %10010000
        suhu1 var word
        suhu2 var word
        dta     VAR WORD
        volt    VAR WORD
        x       var word                                      
main:
ADCIN 0,dta             ' ADC port=AN0 
high portb.0
suhu1=(dta-215)*13    '215=utk offset sebab start dri 1v bkn start dri 0v
suhu2=suhu1-5504
SEROUT2 PORTC.6,84, [" WQ101-ADC:",dta,dec suhu2/100,46,dec2 suhu2,248,67,10]  
low portb.0
PAUSE 200
GOTO main
rx(menu selection part):
Code:
@ DEVICE HS_OSC
define OSC 20
DEFINE LCD4X20 1
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50

DEFINE HSER_BAUD 9600
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 129

dta var word
dta1 var word
led var portb.0
m var portB.1
ANSEL = 0          'All Digital, konfigurasi ini utk jadikan semua port
ANSELH = 0  

push var byte : push = 1
goto screen1

main: 
    if portB.1=1 then                               'arrow down
        push = push+1 : goto selection : endif
    if portA.1=1 then                               'arrow up
        push = push-1 : goto selection : endif
    pause 5000
    goto main
    
selection:
    pause 200
    if push=1 then screen1
    if push=2 then screen2
    if push=3 then screen3
    if push=4 then screen4
    if push=5 then screen5
    if push=6 then screen6
    if push=7 then screen7
    if push=8 then screen8
    if push=9 then
        push = 1 : goto screen1 : endif  
    if push=0 then
        push = 8 : goto screen8 : endif
    goto main 

screen1:
    LCDOUT $FE,1,$7E,  "|Mode1|   |Mode5|"    '$7E= ARROW PADA LCD
    LCDOUT $FE,$C0+1,  "|Mode2|   |Mode6|"
    LCDOUT $FE,$94+1,  "|Mode3|   |Mode7|"
    LCDOUT $FE,$D4+1,  "|Mode4|   |Mode8|"
    
    GOSUB TEMP
    GOto MAIN
    
TEMP:high LED : pause 300
hserout ["+++"]
    hserin 2000,main,[dta1(0),dta1(1)]
    serout2 portb.2, 16468,[dta1(0), dta1(1)]
    LCDOUT $FE,1,"STATUS: ",DTA1(0),DTA1(1):pause 2000   
    serin2 portc.7,84,[wait(" "),dta(0),DTA(1),DTA(2),DTA(3),DTA(4),DTA(5),DTA(6),DTA(7),DTA(8),dta(9),dta(10),dta(11),dta(12),DTA(13),DTA(14),DTA(15)]
    pause 50
    serout2 portc.5,16468,[dta(0),DTA(1),DTA(2),DTA(3),DTA(4),DTA(5),DTA(6),DTA(7),DTA(8),dta(9),dta(10),dta(11),dta(12),DTA(13),DTA(14),DTA(15),13]
    LCDOUT $FE,$C0,dta(0),DTA(1),DTA(2),DTA(3),DTA(4),DTA(5),DTA(6),DTA(7),DTA(8),dta(9),dta(10),dta(11),dta(12),DTA(13),DTA(14),DTA(15)
    RETURN   
   

screen2: 
    LCDOUT $FE,1,     " |Mode1|   |Mode5|"
    LCDOUT $FE,$C0,$7E,"|Mode2|   |Mode6|"
    LCDOUT $FE,$94+1,  "|Mode3|   |Mode7|"
    LCDOUT $FE,$D4+1,  "|Mode4|   |Mode8|"
    low led 'led off when arrow at mode 2 in LCD
  
    goto main 
        
screen3:
    LCDOUT $FE,1,     " |Mode1|   |Mode5|"
    LCDOUT $FE,$C0+1,  "|Mode2|   |Mode6|"
    LCDOUT $FE,$94,$7E,"|Mode3|   |Mode7|"
    LCDOUT $FE,$D4+1,  "|Mode4|   |Mode8|"
    goto main
    
screen4:
    LCDOUT $FE,1,     " |Mode1|   |Mode5|"
    LCDOUT $FE,$C0+1,  "|Mode2|   |Mode6|"
    LCDOUT $FE,$94+1,  "|Mode3|   |Mode7|"
    LCDOUT $FE,$D4,$7E,"|Mode4|   |Mode8|"
    goto main
    
screen5:
    LCDOUT $FE,1,     " |Mode1|  ",$7E,"|Mode5|"
    LCDOUT $FE,$C0+1,  "|Mode2|   |Mode6|"
    LCDOUT $FE,$94+1,  "|Mode3|   |Mode7|"
    LCDOUT $FE,$D4+1,  "|Mode4|   |Mode8|"
    goto main

screen6:
    LCDOUT $FE,1,    " |Mode1|   |Mode5|"
    LCDOUT $FE,$C0+1, "|Mode2|  ",$7E,"|Mode6|"
    LCDOUT $FE,$94+1, "|Mode3|   |Mode7|"
    LCDOUT $FE,$D4+1, "|Mode4|   |Mode8|"
    goto main
        
screen7:
    LCDOUT $FE,1,    " |Mode1|   |Mode5|"
    LCDOUT $FE,$C0+1, "|Mode2|   |Mode6|"
    LCDOUT $FE,$94+1, "|Mode3|  ",$7E,"|Mode7|"
    LCDOUT $FE,$D4+1, "|Mode4|   |Mode8|"
    goto main
    
screen8:
    LCDOUT $FE,1,    " |Mode1|   |Mode5|"
    LCDOUT $FE,$C0+1, "|Mode2|   |Mode6|"
    LCDOUT $FE,$94+1, "|Mode3|   |Mode7|"
    LCDOUT $FE,$D4+1, "|Mode4|  ",$7E,"|Mode8|"
    goto main