Revizar 6 botones y hacer rutinas de acuerdo a cada uno, Proton ide

Hola, necesito revisar el estado de 6 botones conectados a un regulador de 5v. y activar para cada boton 2 o 3 relevadores. Ademas una entrada analógica para generar una salida analógica por medio de pwm y activar 2 salidas .

El chiste es que se hagan 2 o 3 funciones a la ves sin que se note el brinco entre rutina y rutina.

les adjunto lo que tengo.

gracias de antemano por la ayuda.

Código:
	Device = 16F873A
        Xtal  4

        Adin_Res 10 ' RESOLUCION DE 10 BITS
Adin_Tad FRC ' OSCILADOR RC PARA LA CONVERSION
Adin_Stime 100 ' TUEMPO DE CARGA DE 100u S
        
       
        

         Dim incremento As Word
        Dim ciclo As Word
        Dim Result As Float
        Dim Total As Float
        Dim X As Byte
        Dim Y As Byte
        Dim vadc As Word
        
        
        
                            'salidas                       
        Symbol dira = PORTB.6
        Symbol dirb = PORTB.5
        Symbol lh = PORTB.4
        Symbol hispeed = PORTB.3
        Symbol reach = PORTB.0
        Symbol side = PORTB.1 
        Symbol tilt = PORTC.7
        Symbol eq = PORTB.2
        Symbol af = PORTC.5
        Symbol ar = PORTC.4
        Symbol contactor = PORTC.6
        Symbol acelera = PORTB.7
        
        'entradas
        
        Symbol poten = PORTA.0
        Symbol claxon = PORTA.1
        Symbol izq = PORTA.2
        Symbol der = PORTA.3
        Symbol inclina2= PORTA.4
        Symbol inclina1 = PORTA.5                           
        Symbol entra = PORTC.0
        Symbol sale = PORTC.1
        Symbol abajo = PORTC.2
        Symbol arriba = PORTC.3
        
         	      
        
    
    
       TRISB =  %00000000
       TRISA =  %11111111
       TRISC =  %00001111
       ADCON1 = %10001110	  
        
		PORTB = 1
		PORTA = 0
		PORTC = %11110000

		GoTo START
START:		
    
GoTo inicio


inicio: 
     vadc=0 
     PORTB.0 = 1
     PORTB.1 = 1
     PORTB.2 = 1
     PORTB.3 = 1
     PORTB.4 = 1
     PORTB.5 = 1
     PORTB.6 = 1
     PORTB.7 = 0
     PORTC = %11110000
     PORTA = 0
                
               
botones:

PORTB.7 = 0

        
        
Chk1:	If sale=0 Then 
        GoTo Chk2	       'ChecA BOton 1 
		Else 
             reach=0                               'activa reach
             dira=0                                  'activa dira
             dirb=1
             GoTo segundareach1
        EndIf                      'reviza si se presiona el boton de 2a			
Chk2:	If entra=0 Then 
        GoTo Chk3   	' Check Button 2 (Skip to 3 if Not Pressed)
		Else 
            reach=0                               'activa reach
            dirb=0
            dira=1                                'activa dirb
            GoTo segundareach2						' Toggle LED if pressed
            EndIf		
Chk3:	If izq=0 Then 
        GoTo Chk4	    ' Check Button 3 (Skip to 1 if Not Pressed)
		Else 
            side=0                              'activa reach
            dira=0                              'activa activa dirA
   	        dirb=1
   	        EndIf
Chk4:	If der=0 Then
         GoTo Chk5	' Check Button 1 (Skip to 2 if Not Pressed)
		  Else 
            side=0                            'activa reach
            dirb=0
            dira=1                           'activa activa dirb
Chk5:	If arriba=0 Then Chk6	' Check Button 2 (Skip to 3 if Not Pressed)
		Else contactor =0
        EndIf 						' Toggle LED if pressed		
Chk6:	If abajo=0 Then 
        GoTo Chk7	' Check Button 3 (Skip to 1 if Not Pressed)
		Else 
            lh=1
		EndIf
Chk7:	If inclina1=0 Then 
        GoTo Chk8	' Check Button 1 (Skip to 2 if Not Pressed)
		Else 
            tilt=0
            dira=0
            dirb=1	
Chk8:	If inclina2=0 Then LECTURA	' Check Button 2 (Skip to 3 if Not Pressed)
		Else 
            tilt=0
            dirb=0
            dira=1
            EndIf		
            GoTo LECTURA
		
LECTURA:
    af=1
    ar=1
    vadc=0
    vadc = ADIn 0 
    If vadc > 612 Then
    GoTo adelante
    ElseIf vadc < 412 Then 
    GoTo atras
    Else GoTo inicio
    EndIf
    
            
 	 
 	
adelante:
       af = 0
       vadc = ADIn 0
       ciclo = Abs (vadc+458)
       PWM acelera,ciclo,50
     GoTo inicio


atras:
        ar = 0
       vadc=ADIn 0
       ciclo = Abs (vadc-458)
       PWM acelera,ciclo,50
       GoTo inicio        
        
        
        
        
 	 
segundareach1:           'rutina para cuando se presiona 2a
 If entra=1 Then       'si se presiona el otro boton de reach
 reach=0      'activa reach
 dira=0    'activa reach
 eq=0      'activa 2a velocidad de reach
 Else Return      'se regresa a checar si se presiona algun boton
    EndIf

  segundareach2:
    If sale=1 Then       'si se presiona sale
    dirb=0
    reach=0
    eq=0     'activa 2a velocidad de reach
    Else Return 'se regresa a checar si se presiona algun boton
    EndIf      
     	 

End
 
Última edición por un moderador:
Atrás
Arriba