Ayuda con el programa de un pic

Hola, primero les muestro lo que tengo y luego lo explico:

Código:
Define Osc 4    

    Symbol P1 = PORTB.1
    Symbol P2 = PORTB.2
    Symbol P3 = PORTB.3
    Symbol P4 = PORTB.4

    Cambios   Var Byte
        Cambios   = 0
    Direccion Var Byte
        Direccion = 0

    TrisC = $00

    Low  PortC.0
    Low  PortC.1
    Low  PortC.2
    Low  PortC.3
    Low  PortC.4
    Low  PortC.5
    High PortC.6
    Low  PortC.7

Inicio:

    If P3 = 1 Then Call Avance
    If P4 = 1 Then Call Reversa

    Goto Inicio

Avance:

    If p1 = 1 And Cambios < 9 Then Call Adelante
    If p2 = 1 And cambios > 0 Then Call Atras

    Goto Avance
Inicio llama a dos rutinas que andan perfecto.
El problema es que cuando activo Avance o Reversa (el que sea primero) se queda pegado.
Por más que esté todo en 0 o cambie de switch, sigue en la rutina que estaba.
 
Última edición:
Amigo pregunto, cuando el programa corre en la rutina avance, si las condiciones p1 o p2 no se cumplen el programa queda en bucle infinito ya que esta esperando se cumpla alguna de dicha(s) condicion(es). Entonces, cuando se da la condicion de avence o retroceso, debes cerciorarte que p1 o p2 se cumplan.
 
o le pones un OR en vez de un AND, o sea:

Avance:

If p1 = 1 OR cambios < 9 Then Call Adelante
If p2 = 1 OR cambios > 0 Then Call Atras

Goto Avance

o por otro lado verificate la escritura, y ve a ver si donde programas las mayusculas se toman en cuenta en las variables, por ejemplo Cambios y cambios
 
P1 y P2 andan perfectamente, cumplen las funciones bien de Avance y Reversa que son las subrutinas para P3 y P4. lo que me pasa es que cuando acciono P3 luego no responde P4 y al revez lo mismo.
El resto del programa me anda barbaro, solo tengo problemas con P3 y P4.
 
Última edición:
Este es el programa completo:

Código:
Define Osc 4	

	Symbol P1 = PORTB.1
	Symbol P2 = PORTB.2
	Symbol P3 = PORTB.3
	Symbol P4 = PORTB.4

	Cambios   Var Byte
		Cambios   = 0
	Direccion Var Byte
		Direccion = 0

	TrisC = $00

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	Low  PortC.4
	Low  PortC.5
	High PortC.6
	Low  PortC.7

Inicio:

	If P3 = 1 Then Call Avance
	If P4 = 1 Then Call Reversa

	Goto Inicio

Avance:

	If p1 = 1 And Cambios < 9 Then Call Adelante
	If p2 = 1 And cambios > 0 Then Call Atras

	Goto Avance

Adelante:

	Cambios = Cambios + 1

	If Cambios = 2 Then Call Marcha1
	If Cambios = 3 Then Call Marcha2
	If Cambios = 4 Then Call Marcha3
	If Cambios = 5 Then Call Marcha4
	If Cambios = 6 Then Call Marcha5
	If Cambios = 7 Then Call Marcha6
	If Cambios = 8 Then Call Marcha7
	If Cambios = 9 Then Call Marcha8

	Return

Marcha1:

	High portd.1
	Low  portd.2
	Low  portd.4
	Low  portd.5
	High portd.6
	Low  portd.7

	High PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	High PortC.5
	High PortC.6
	Low  PortC.7

	Pause 1000
	Return

Marcha2:

	low  portd.1
	high portd.2
	Low  portd.4
	Low  portd.5
	High portd.6
	Low  portd.7

	Low  PortC.0
	Low  PortC.1
	High PortC.2
	Low  PortC.3
	Low  PortC.4
	High PortC.5
	Low  PortC.6
	Low  PortC.7

	pause 1000
	Return

Marcha3:

	High portd.1
	Low  portd.2
	Low  portd.4
	High portd.5
	High portd.6
	Low  portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	High PortC.4
	High PortC.5
	Low  PortC.6
	Low  PortC.7

	pause 1000
	Return

Marcha4:

	low  portd.1
	high portd.2
	Low  portd.4
	High portd.5
	High portd.6
	Low  portd.7

	High PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	pause 1000
	Return

Marcha5:

	High portd.1
	Low  portd.2
	Low  portd.4
	Low  portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	High PortC.1
	Low  PortC.2
	Low  PortC.3
	High PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	pause 1000
	Return

Marcha6:

	low  portd.1
	high portd.2
	Low  portd.4
	Low  portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	High PortC.1
	Low  PortC.2
	Low  PortC.3
	Low  PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	pause 1000
	Return

Marcha7:

	High portd.1
	Low  portd.2
	Low  portd.4
	High portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	High PortC.5
	High PortC.6
	Low  PortC.7

	pause 1000
	Return

Marcha8:

	low  portd.1
	high portd.2
	Low  portd.4
	High portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	Low  PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	pause 1000
	Return



Atras:

	Cambios = Cambios - 1

	If Cambios = 9 Then Call March8
	If Cambios = 8 Then Call March7
	If Cambios = 7 Then Call March6
	If Cambios = 6 Then Call March5
	If Cambios = 5 Then Call March4
	If Cambios = 4 Then Call March3
	If Cambios = 3 Then Call March2
	If Cambios = 2 Then Call March1
	If Cambios = 1 Then Call March0

	Return

March8:

	Low  portd.1
	High portd.2
	Low  portd.4
	High portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	Low  PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

March7:

	High portd.1
	Low  portd.2
	Low  portd.4
	High portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	High PortC.5
	High PortC.6
	Low  PortC.7

	Pause 1000
	Return

March6:

	Low  portd.1
	High portd.2
	Low  portd.4
	Low  portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	High PortC.1
	Low  PortC.2
	Low  PortC.3
	Low  PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

March5:

	High portd.1
	Low  portd.2
	Low  portd.4
	Low  portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	High PortC.1
	Low  PortC.2
	Low  PortC.3
	High PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

March4:

	Low  portd.1
	High portd.2
	Low  portd.4
	High portd.5
	High portd.6
	Low  portd.7

	High PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

March3:

	High portd.1
	Low  portd.2
	Low  portd.4
	High portd.5
	High portd.6
	Low  portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	High PortC.4
	High PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

March2:

	Low  portd.1
	High portd.2
	Low  portd.4
	Low  portd.5
	High portd.6
	Low  portd.7

	Low  PortC.0
	Low  PortC.1
	High PortC.2
	Low  PortC.3
	Low  PortC.4
	High PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

March1:

	High portd.1
	Low  portd.2
	Low  portd.4
	Low  portd.5
	High portd.6
	Low  portd.7

	High PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	High PortC.5
	High PortC.6
	Low  PortC.7

	Pause 1000
	Return

March0:

	Low portd.1
	Low portd.2
	Low portd.4
	Low portd.5
	Low portd.6
	Low portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	Low  PortC.4
	Low  PortC.5
	High PortC.6
	Low  PortC.7

	Pause 1000
	Return

Reversa:

	If p1 = 1 And Cambios < 5 Then Call Adelante2
	If p2 = 1 And Cambios > 0 Then Call Atras2
	
	Goto Reversa

Adelante2:

	Cambios = Cambios + 1

	If Cambios = 2 Then Call Marc1
	If Cambios = 3 Then Call Marc2
	If Cambios = 4 Then Call Marc3
	If Cambios = 5 Then Call Marc4

	Return

Marc1:

	High portd.3
	Low  portd.5
	High portd.6
	Low  portd.7

	High PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	High PortC.5
	High PortC.6
	Low  PortC.7

	Pause 1000
	Return

Marc2:

	High portd.3
	High portd.5
	High portd.6
	Low  portd.7

	Low  PortC.0
	Low  PortC.1
	High PortC.2
	Low  PortC.3
	Low  PortC.4
	High PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

Marc3:

	High portd.3
	Low  portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	High PortC.4
	High PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

Marc4:

	High portd.3
	High portd.5
	Low  portd.6
	High portd.7

	High PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

Atras2:

	Cambios = Cambios - 1

	If Cambios = 5 Then Call Mar4
	If Cambios = 4 Then Call Mar3
	If Cambios = 3 Then Call Mar2
	If Cambios = 2 Then Call Mar1
	If Cambios = 1 Then Call Mar0

	Return

Mar4:

	High portd.3
	High portd.5
	Low  portd.6
	High portd.7

	High PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	Low  PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

Mar3:

	High portd.3
	Low  portd.5
	Low  portd.6
	High portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	High PortC.4
	High PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

Mar2:

	High portd.3
	High portd.5
	High portd.6
	Low  portd.7

	Low  PortC.0
	Low  PortC.1
	High PortC.2
	Low  PortC.3
	Low  PortC.4
	High PortC.5
	Low  PortC.6
	Low  PortC.7

	Pause 1000
	Return

Mar1:

	High portd.3
	Low  portd.5
	High portd.6
	Low  portd.7

	High PortC.0
	Low  PortC.1
	Low  PortC.2
	High PortC.3
	High PortC.4
	High PortC.5
	High PortC.6
	Low  PortC.7

	Pause 1000
	Return

Mar0:

	Low portd.3
	Low portd.5
	Low portd.6
	Low portd.7

	Low  PortC.0
	Low  PortC.1
	Low  PortC.2
	Low  PortC.3
	Low  PortC.4
	Low  PortC.5
	High PortC.6
	Low  PortC.7

	Pause 1000
	Return


	End
 
Atrás
Arriba