# ¿ Cómo construir un carro seguidor de linea con pic 16f84 ?



## kain589

Ahora voy empezar a desarrollar un sigue lineas, tengo idea de programarlo en C, les adjunto una rutina que no sera la que usare porque tengo idea de usar minimo 3 cny70.
La parte de hardware es sencilla las salidas de los Cny70 a un disparador para que adapte la tension para el pic


----------



## eck

bueno el proyecto en c esta bien y funciona si necesitas un programa te puedo mandar uno que esta hecho en basic y funciono pero mi dificultad se encuentra en que nesecito hacer el programa en lenguaje ensamblador


----------



## EinSoldiatGott

Compañeros, no se que tan sofisticado quieran su carro pero en la revista de saber electrónica, publicaron uno hecho con compuertas lógicas 2 o 3 no recuerdo y con ese optoacoplador que mencionan.

Saludos y deberían darle una checada aunque sea para dar una idea en base a la expresión boleana para hacer su programación del pic.


----------



## Andres Cuenca

Hola, existen varios programas compiladores que convierten el codigo en C a lenguaje ensamblador.

Revisa este enlace:

http://www.sourceboost.com/Products/Products.html


----------



## ArturoGP

si recuerdo el articulo....

es con 4 compuestas Nand 2 para acoplar la entrada (eran Trigger Smith)
y 2 para hacer un lacht RS .... en el momento en el que se salia de la linea se ponia en uno de los 2 estados S o R y buscaba la liena. esto se lograba por que guardaba el dato de que habia perdido la linea...  muy creativo el que lo hizo. 
Pero este no es el caso , estan hablando de PIC de 16F84 para se mas exactos.

yo todavia no me enseñan eso asi k por ahora no los puedo ayudar ... 



suerte


----------



## EinSoldiatGott

ArturoGP dijo:
			
		

> si recuerdo el articulo....
> 
> es con 4 compuestas Nand 2 para acoplar la entrada (eran Trigger Smith)
> y 2 para hacer un lacht RS .... en el momento en el que se salia de la linea se ponia en uno de los 2 estados S o R y buscaba la liena. esto se lograba por que guardaba el dato de que habia perdido la linea...  muy creativo el que lo hizo.
> Pero este no es el caso , estan hablando de PIC de 16F84 para se mas exactos.
> 
> yo todavia no me enseñan eso asi k por ahora no los puedo ayudar ...
> 
> 
> 
> suerte



Exactamente a ese me refería, recuerdo que un amigo presumia mucho que iba a hacer un carro seguidor de líneas, lo cúal pues nos sorprendió, pero cuando lo vi publicado en la revista me causo mucha risa .

Pero estoy seguro de que de aquí saldrá un proyecto mejor que ese, hechénle ganas y hasta pronto

Saludos


----------



## ivet

Saben que ahora tengo dudas con los motores ya que tengo 2 uno es de CD este lo voy a utilizar para controlar las llantas de atras y un servomotor de JAMECO para la direccion, mi pregunta es si tengo que modificar el servo para que me de el giro de 360grados y que hay de la programacion ya que tengo dos motores diferentes controlados con PWM

si alguien tiene una idea se lo agradeceria mucho


----------



## ivet

queria preguntarles donde puedo comprar el programador para el PIC16F877 que no sea por medio de internet de preferencia en el DF


----------



## EinSoldiatGott

ivet dijo:
			
		

> queria preguntarles donde puedo comprar el programador para el PIC16F877 que no sea por medio de internet de preferencia en el DF



Seguro con el JDM se puede, puede encontrarlo aquí http://www.jdm.homepage.dk/newpic.htm o comprarlo ya hecho en alguna tienda de electrónica donde vendan productos steren cuesta como 150.


Saludos


----------



## lucifer

yo ya he hecho uno con el 16f84 y con motores pap unipolares pero si quieres usar motores dc es mucho mas facil... te explico la idea...

en la parte inferior delantera del carrito van 2 pares de sensores infrarrojos... osea un emisor infrarrojo y un fototransistor infrarrojo al lado...  cada par apuntando hacia el piso y separados segun el hancho de la linea a seguir... los fototransistores son los que envian los codigos al pic... de la siguiente forma

izquiero derecho   carrito
    0     |     0      |retroceder
    0     |     1      |girar a la derecha
    1     |     0      |girar a la izquierda
    1     |     1      |avanzar

el puerto a del pic se define como entrada y ahi van los fototransistores... el puerto b se define como salida y ahi van los motores... en mi caso eran motores pap... pero si quieres usar dc las salidas serian:

izquiero derecho   motor 1  motor 2
    0     |     0      |    01     |     10
    0     |     1      |    01     |     01
    1     |     0      |    10     |     10
    1     |     1      |    10     |     01

ojo que en el motor 2 pongo los codigos invertidos por que el mismo motor se encuentra invertido... y que a las salidas van transistores para poder suministrar al motor del voltaje necesario... y eso es todo... es bastante simple...

porsiacaso yo use motores pap por que los dc son muy rapidos... ah si un favor... alguien podria decirme como puedo controlar un motor pap sin pic?... solo quiero que que gire en un sentido o en el otro... gracias...


----------



## eck

utilisa un 555 en pmw y le regulas la velocidad.
pero tambien puedes utilisar logicas con un pequeño arreglo de and y or en serie


----------



## hotpadrino

Pues yo hice un seguidor de línea con dos fotoceldas, dos leds de chorro, y un integrado con dos comparadores.  Supongo que pueden usar el mismo esquema para el cny70, e incluso usar los comparadores internos del pic, en caso de que no logren la salida digital del sensor.  En cuanto al programa creo que está bien.


----------



## sergio_171286

disculpen,soy nuvo en elctronica y he estado estudiando por mi cuenta,me parecio interesante construir un seguidor de linea blanca,tengo dos problemas,estoy usnado el sensoor cny70,el cual al saturarse solo me vota 1.2v,y mi microcontrolador no reconoce(atmega8,con un vih min de 3v a un vcc=5).quisiera saber con que circuito podira amplificarlo. 
el otro problema es que estoy usando motores cc,pero no se de que codigo usar,estaba usando un puente h lm293 y unos motore qu que no soportaan a s u maxima potencia.o que puente h puedo usar,me dijieron del tpic0107b,pero no tengo una idea clara de como protegerlo en caso de que se sbrepase algo.Gracias


----------



## eixample

Buenas a todos! Estoy intentando hacer un robot seguidor de lineas. Soy nuevo en el tema y tengo unas dudas, haber si ustedes me pueden ayudar. Tengo unos motores de cc que no se si con L293 me daran la suficiente corriente para que me vayan correctamente. En el data sheet del motor pone que consume 560mA en su maxima eficacia pero hay un apartado que pone 'STALL' y dice que consume 2,1 A. Sabiendo que el L293 da 600mA por canal, mi pregunta es: ¿Este 'STALL' de 2,1 A me supone algun problema para utilizar el L293 con estos motores? GRACIAS!!


----------



## galoremus

hola, bueno  quiero compartir algo con ustedes,  yo entre a un concurso de velocidad de seguidores de linea,  nos apalearon por errores en el diseño,  dejenme les cuento lo que aprendí, 

* los CNY70  detectan señales solo cuando se situan entre 3 y 5 MILIMETROS de la superficie, por lo que si el movimiento los aleja  es posible que no lean tan bien la pista,  recomiendo usar una foto celda, un led ultrabrillo y un bjt.

* el bjt de preferencia de potencia , para poder conectar el motor directaente a esa salida,  ya que el poner tambien un puente H aumenta el peso  y disminuye la velocidad

* por lo de  usar un pic,  yo tambien lo usé  y me di cuenta que el 16f84 al menos necesita el cristal y varias cosas ,  como regulador de voltaje a 5 volts, etc.  y el pic  solo funciona con la logica,  si del ladao derecho se detecta la linea,  se apaga el motor derecho para que gire a ese lado (asi que recomiendo no surar pic). solo con 2 transistores  se puede optener el mismo resultado

si  gustan,  dejo mas o menos un reporte  como lo hise, aunque  ya les mencione  sus deficiencias,  ahora  ya he hecho otro un poco mas rapido  pero sin pic,  si gustan  solo me pueden  decir , y les comparto  todo la información que tengo,

saludos  y suerte


----------



## charlylex

Hola que tal compañeros!

Pues soy nuevo en el foro. he leido sus comentarios y pues veo que la mayoria tiene una idea de como hacer un carrito de este tipo. Pero tambien note que estan tomandole mucha importancia a la logica de control y por lo tanto a la electronica necesaria; eso es bueno pero es lo segundo que deberian de hacer. lo primero! es la constitución fisica del movil ,es decir,  la mecanica, el chasis y el tipo de motores que usaran. Pues definitivamente estos tres factores determinaran el tamaño, velocidad y tareas que desempeñara nuestro siguelineas.

Se los comento por experiencia propia, tube el gusto de participar en un concurso nacional en mi pais México, hace unos meses, fue mi primer concurso y la mera verdad al igual que ustedes pues estaba plagado de interrogantes. Total concurse con mi carrito que en ese momento era lento, adquiri experiencia y comparti ideas con otros concursantes y ahora tengo uno mas rapido, pequeño, ligero y barato.

Estos son los links de mis videos. claramente muestra el avance que he tenido, y como ya lo mencionaron tambien yo me preparo para el concurso en ESIME Culhuacan del proximo mes de Noviembre en Ciudad de México.

YouTube - Pruebas Seguidor de lineas
YouTube - Robot seguidor de linea "Mistico"
YouTube - Robot Seguidor de Linea "Mistico KRN-1"

Pues por el momento es todo. si alguien tiene algun comentario sera bienvenido y tembien si tienen alguna duda pss hare lo posible por ayudar.

Pasenla bien y bye bye!


----------



## Alejo GS

Hola Compañeros Del Foro.

Soy Nuevo En Esta Comunidad Y He Leido Sus Dudas E Interrogantes Que Tiene Sobre Los Microbots Seguidores De Linea. Les Ayudare En Lo Poco Que He Aprendido En El SENA Ya Que Apenas Estoy Iniciando.

1)  _*Como Conectar El Sensor CNY 70?*_
     Tomen El CNY Y Pongalo De Manera Que Pueda Ver Los 2 Circulos De Vidrio Que Deben Ser  Azul Y Azul Oscuro Teniendo En Cuenta Que El Nombre Del *CNY 70* Quede En La Parte Superior:
                                                 CNY70
                                               _______
                                               [            ]
                                               [  O    O ]
                                               [______]

Mañana Les Dare La Conecciones En Ina Imagen Y Continuare


----------



## Alejo GS

Compañeros Ahi Va La Imagen De La Coneccion Del CNY 70


----------



## yaseru

El famoso CNY70!  ¡¡mfff! . acá en chile es casi imposible de encontrar. estoy tratando de hacer los sensores con LDR y un LED, o con el receptor de un mouse con bolo y un led de alto brillo.  el chasís lo tengo listo, me faltan los condenados sensores y mi siguelineas saldrá a recorrer el mundo. si quieren les coloco unas fotos.


----------



## charlylex

YASERU

Tambien puedes usar un fototransistor y un diodo emisor de infrarojos y funciona igual que con el CNY70 o el QRD114


----------



## Adiel

pues como es mi primer robot no tengo bien planteado como seria la parte mecanica del mismo, asi como un poco de la circuiteria.

mi problema en si seria que tipo de configuracion podria utilizar para los motores y que tipo de motores me servirian que me puedan responder en los dos modos de operacion ya sea como seguidor de linea o que me esquibe obstaculos

espero averme expresado bien


----------



## jim_17

*Los motores: *Utiliza servomotores, que tu mismo puedes trucara para que tengan un giro de    
                      360 grados. Los motores los puedes controlar con un driver de potencia o con unos transistores.


----------



## Adiel

jim_17 dijo:
			
		

> *Los motores: *Utiliza servomotores, que tu mismo puedes trucara para que tengan un giro de
> 360 grados. Los motores los puedes controlar con un driver de potencia o con unos transistores.



es muy buena idea ya lo avia pensado utilizar servos pero el unico inconveniente es que estan un poko caritos y no contamos con presupuesto, no sabrias de donde los podria sacar o algun otro tipo de motores

Gracias


----------



## METALLICA

holas, no se si conoscan esta pagina, pero ahi salen las conexiones de varios sensores utiles, tal vez les sirva

http://www.larobotica.com/sensores.htm#gp2d


----------



## ryoga_ECA

Hola !

Me parece un buen proyecto el del carrito espero que lo saquen adelante...

Para Ivet, si no te urge mucho, te recomiendo que armes el programador, es facil y con este puedes programar solo el 16F877, sino muchos otros más y su costo es muy reducido, por si te interesa te dejo un archivo adjunto con la información de este sencillo circuito.


----------



## METALLICA

mmm pueden intentar hacer una lagartija, basicamente es un seguidor de linea con un motor de dc y un servo, con una especie de transmisión haces que el motor le de potenca a las dos ruedas traseras (con su respectivo puente h para proteger el pic, y el servo SIN operar lo pones para que le de direccion a una unica rueda delantera, los sensores deben ir adelante de esta, el resto es cuestion de programacion, este tipo de seguidores son los mas rapidos que he visto, pero sopn muy dificiles de controlar, y un vez logrado esto, son imparables


----------



## sangreaztk

Aquí libero un código que hice para un PIC12F675, no recuerdo si funciona, pueden adaptarlo para el 16f84 o cualquier otro, este código tiene CopyLeft, significa que deben de mencionar el autor original (osease yo, Aztk) y liberar -publicar- las modificaciones que le hayan hecho, jejeje



		Código:
	

; -----------------------------------------------------------------------
; Aztk CopyLeft 2008
; --------------------
;
; GP0 : input, Sensor derecho
; GP1 : input, Sensor izquierdo
; GP4 : output, bitA del puenteH
; GP5 : output, bitB del puenteH
;
; Si los dos sensores están apagados, el móvil sigue derecho
; Si los dos sensores están encendidos, el móvil tiene memoria de la
;	ultima dirección elegida.
; -----------------------------------------------------------------------
; Template source file generated by piklab
    #include <p12f675.inc>

; -----------------------------------------------------------------------
; Bits de configuración: adapte los parámetros a su necesidad
    __CONFIG 0x01E4

; -----------------------------------------------------------------------
; Variables declaration
D0X   equ    0x20
; -----------------------------------------------------------------------
; Inicio de programa

    org   0x00

    bsf   STATUS,RP0       ; Bank 1
    call  3FFh             ; Get the cal value
    movwf OSCCAL           ; Calibrate
    bcf   TRISIO,GP4
    bcf   TRISIO,GP5
    bcf   STATUS,RP0       ; Bank 0

main
    movlw 0x03
    andwf GPIO,W           ; Analizar solamente GP0 y GP1
    btfsc STATUS,Z	   ; ¿Estan en cero (off)?
    goto  acelera	   ; Si, entonces acelera
    movwf D0X		   ; No, guardar dato para analizar

    movlw 0x01
    andwf D0X,W		   ; Analizamos solamente GP0
    btfsc STATUS,Z	   ; ¿Está off?
    goto  left		   ; Si, entonces a la izq
			   ; No, probaremos con GP1
    movlw 0x02
    andwf D0X,W		   ; Analizamos solamente GP1
    btfsc STATUS,Z	   ; ¿Está off?
    goto  right		   ; Si, entonces a la derecha
    goto  main		   ; Repetir de nuevo el algoritmo

acelera
    bcf   GPIO,GP4	   ; off A
    bcf   GPIO,GP5	   ; off B
    goto  main		   ; repetir de nuevo el algoritmo

left
    bcf   GPIO,GP4	   ; off A
    bsf   GPIO,GP5	   ; on B
    goto  main		   ; repetir de nuevo el algoritmo

right
    bcf   GPIO,GP5	   ; off B
    bsf   GPIO,GP4	   ; on A
    goto  main		   ; repetir de nuevo el algoritmo

    org   3FFh
    retlw 0x4C             ; cal value

END

; ------------------------------------Author: Aztk
; ------CopyLeft----------------------------------


Los bits A y B son de control para un puenteH y así hacer girar el móvil.
Buena Vibra!


----------



## Patico21

el que anda buscando la programadora en el foro hay la progrmadora por usb es re facil de hacer


----------



## karl

ivet
Un servo para la dirección no necesita ser modificado (a menos que quieras que gire los 360 grados para hacer una funcion de reversa).

El tipo de direccion separada de la traccion se llama Ackerman (y es como la de los coches), esta tiene la ventaja de que puedes tener un motor de mucha velocidad para las vueltas y uno capaz de hacer giros lentos pero con torque para los ajustes de dirección, la desventaja es que no pueden dar vueltas tan cerradas como un sistema diferencial (como de tanque), ya que siempre necesitan un radio de giro minimo, y si no haces una montura especial para la dirección (de tal forma que la rueda interna se cierre mas que la externa en las vueltas), son inestables.

Para los concursos, los robots que mas se usan son diferenciales (dos motores iguales para la traccion), porque son más faciles de hacer.


----------



## ctorralvo

saludos este proyecto lo hice yo en proteus, aqui te mando el codigo adjunto...


----------



## alex182

Hola que tal, soy alumno de electronica y me han encargado una proyecto que consiste en un vehiculo capaz de evadir los obstaculos. Por dejar todo a lo ultimo me ganaron las prisas, ademas de que no vivo en un lugar donde pueda llegar a encontar cualquier material a la mano a no ser de que lo mande a pedir( lo cual tardaria mas de una semana). Lo que hice fue lo siguiente:

Utilizar LDR como sensores de proximidad conectadas directamente a positivo (+5) y a un pic 16F84A, tomando cuatro salidas por que tengo dos puentes H con dos motores respectivamente. Los puentes H estan hechos tal y como lo muestra el adjunto. 

Lo que no pude solucionar es que usa dos baterias de 9v, ya que si solo uso una para todos los circuitos se baja muy rapido, entonces utilice dos reguladores de voltaje de 5v lm7805 y dividi los circuitos, un puente con el pic y un regulador y el otro regulador con un puente H.

Quedo bien a pesar de todo pero con pequeñas fallas de acuerdo a los sensores. P ero el motivo de esta charla es que ahora que ya tengo tiempo me gustaria mejorarlo, sustituir algunos elementos por integrados o mejorar el funcionamiento de los sensores ademas de reducir el consumo (lograr utilizar una sola bateria) y si es posible, porque no, integrar una fotocelda para recargarse de manera automatica y asi evitar el desgaste de baterias.

Yo se que puede sonar muy confunso por mi mala redaccion pero quisiera algunas ideas para empezar de nuevo y poder realizarlo.

De antemano muchas gracias y saludos a todos en el foro.

P.D. Tengo el diagrama final pero con un error, en cuanto lo arregle lo adjuntare, gracias por su ayuda


----------



## Patico21

bueno no se si te sirva este


----------



## saiwor

tanto se hacen problema por un seguidor de linea simple.. para que emplear un pic..... al menos el pic usariamos para hacer un sumo... no me acuerdo en tema se trato... pero lo guarde el link
http://jorgefloresvergaray.blogspot.com/


----------



## migue81f

;PROGRAMA QUE CONTROLA GIROS DE MOTORES PARA ROBOT SEGUIDOR DE LINEA negra
;--------------------------------------------------------------------------------------------------------

LIST P= 16f84A
       INCLUDE<P16F84A.inc>


tmr0_opt   EQU 		1h	    ;Registro compartido para TMR0(Banco 0) y OPTION_REG(Banco 1)
porta     equ      05h  ;registro del puerto A
portb     equ      06h  ;registro del puerto B


	     org	0x00

        goto inicio

inicio    bsf        STATUS,RP0  ;se ubica en el segundo banco de la RAm
          movlw      B'11111' 
          movwf      PORTA       ;se programan los pines del puerto A 
          movlw      B'00000000' 
          movwf      PORTB       ;se programan los pines del puerto B 
          movlw	     82h		 
          movwf	     tmr0_opt       
          bcf        STATUS,RP0  ;se ubica en el primer banco de la memoria RAM

PREGUNTA        
				movlw	b'00101'  ;activa bit 0 y 2 indica gire atras
				subwf	PORTA
				btfsc	STATUS,2
				goto	ATRAS
                		             movlw   b'00001'  ;activa bit 0 para que gire derecha
                		             subwf   PORTA
				btfsc	STATUS,2
				goto    DERECHA
				movlw   b'00100'  ;activa bit 2 para que gire izquierda
                	                          subwf   PORTA
				btfsc	STATUS,2
				goto    IZQUIERDA
 				movlw	b'00000'   ; bit en ceros para que siga adelante el carro
				subwf	PORTA
				btfsc	STATUS,2
				goto	ADELANTE                

ATRAS           
				movlw   b'00001010'  ;bit 1 y 3 se activan en salida portb
                		             movwf   PORTB
				bcf	    STATUS,2
				goto    PREGUNTA	

DERECHA			
				movlw   b'00000110'   ;bit 1 y 2 se activan en salida portb
				movwf   PORTB
				bcf	    STATUS,2
				goto    PREGUNTA

ADELANTE       
			    	movlw   b'00000101'  ;bit 0 y 2 se activan en salida portb
                		             movwF   PORTB
				bcf	    STATUS,2
				goto    PREGUNTA

IZQUIERDA
				movlw   b'00001001'  ;bit 0 y 3 se activan en salida portb
                		             movwF   PORTB
				bcf	    STATUS,2
				goto    PREGUNTA

				END

ojala les sirva este programa en asm solo lo cargan al pic 16f84a con sus respectivos elementos y funcionara bn.....suerte!!!!!Ver el archivo adjunto simulacion proteus seguidor listo.rar

programa ejecutado en mplab ide v8.1 en mayor v. tambien les corre!!!!! buena suerte!!

se utilizaran dos sensores cny70

este circuito es el que va a utilizar en el sensado de los dos cny70 ojo este es para un solo cny70 pero solo es adicionarle las misma conexiones ya que ese circuito integrado trabaja la otra parte o mejor el otro lado de pines igual no hay ningun problema.......ojala les sirva!!!!!


----------



## piojo355

hola yo tengo un programa que me dio uno de mis profesores  en el cual usa 1 PIC16F84A 3 sensores cny 70, lo probe en el mplab 8.6.
;instrucciones para el  carrito seguidor de lineas
; 
;COMIENZA RUTINA
;******************************************************************************************************************
;
;programa de pic 16 f84 

;*************************************************************************************************************



		LIST P=16F84A,			R=DEC			;PROCESOR  A UTILIZAR Y SISTEMA DECIMAL

		#INCLUDE<P16F84.INC>

		__CONFIG_CO_OFFY_WDT_OFFY_PWRTE_ONY_XT_OSC

;**************************************************************************************************************


LED	  		EQU			H'03'
SWITCH		EQU			H'04'

CNT1		EQU			H'10'
CNT2		EQU			H'11'
CNT3		EQU			H'12'
CNT4		EQU			H'13'
CNT5		EQU			H'14'
CNT6		EQU			H'15'
CNT7		EQU			H'16'

			ORG			0000			;VECTOR DE REESTABLECIMIENTO DEL PROGRAMADOR
			GOTO			INICIO


;************************************************INICIO  DEL SISTEMA DE INSTRUCCIONES**************************



INICIO	
		CLRF			PORTA
		BSF			STATUS,RP0			;CAMBIAR AL BANCO 1
		MOVLW			B'10111'			;W <=B'10111'
		MOVWF			TRISA				;RA0 RA1 RA2 RA4>ENTRADAS, RA3 SALIDA
		MOVLW			0X00				;W <=B'00000000'>
		MOVWF			TRISB				;<RB0 A RB7> SALIDAS
		BCF			STATUS,RP0			;REGRESA AL BANCO 0

;***************************************************************************************************************
;RUTINA QUE PERMITE ENCENDER UN LED  POR 5 OCASIONES, DESPUES DE QUE SE PRESIONA EL INTERRUPTOR
;TIPO MINITACTO, DESPUES ARRANCA EL CARRO, COMPORTANDOSE  DE ACUERDO A LOPROGRAMADO EN LA 
;RUTINA DE CONTROL

MAIN
		BCF			PORTA,LED			;coloca  un cero en el bit declarado como led de la memoria (led apagado)
		CLRF			PORTB				;BORRA EL CONTENIDO DEL PORTB APAGANDO ALOS MOTORES

		BTFSS			PORTA,SWITCH			; SI EL SWITCH	ESTA ACTIVADO ENTONCES EL PROGRAMA BRINCA  A MOVLW'5'
		GOTO 			MAIN				;si el switch no esta activado el progrema regresa a main
		MOVLW			D'5'				;CARGA UN CINCO LITERAL EN EL ARCHIVO W
		MOVWF			CNT4				;CARGA CON 5W EL ARCHIVO CONTADOR 4

LED_LOOP	
		BSF			PORTA,LED			;COLOCA UNO(SET) EN EL BIT LED DEL ARCHIVO PORTA
		CALL			TMR1
		BCF			PORTA,LED			;COLOCA UN CERO  EN EL BIT ARCHIVO PORTA
		CALL			TMR1
		DECFSZ			CNT4,1
		GOTO			LED_LOOP
		GOTO 			PRINCIPAL

;**********************************************************************************************************************************************************
;RUTINA COMPUESTA POR EL USO DE 3 TIMERS CONESTADOS  EN FORMA ANIDADA LOS CUALES PERMITEN EL EFECTO DE RETRASO  DE APROXIMADAMENTE 500mS




TMR1
		MOVLW			D'41'				;CARGA 41 LITERAL EN EL ARCHIVO W
		MOVWF			CNT1

DELAY1
		CALL			TMR2				;LLAMAR ALA SUBRUTINAETIQUETADA CON TIMER 2  PARA EJECUTARLA
		GOTO			$+1				;INSTRUYCCION QUE PERMITA HACER UN SALTO A LA SIGUIENTE INSTRUCCION
		DECFSZ			CNT1,1				;DECREMENTA EL VALOR DEL CONTADOR 1 EN UNO
		GOTO			DELAY1				;SI EL RESULTADO DE DECREMENTO NO ES 0, REGRESA A DELAY 1 
		RETURN							;SI EL RESULTADO DEL DECREMENTO NO ES CERO REEGRESA A DELAY1

TMR2		
		MOVLW			D'100'				;CARGA 100 LITERAL EN EL ERCHIVO W
		MOVWF			CNT2				;MUEVE EL 100 (ARCHIVO) AL CONTADOR 2

DELAY2
		CALL			TMR3				;LLAM ALA SUBRUTINA ETIQUETADA CON  TIMER 3 PARA EJECUTARLA
		GOTO 			$+1				;INSTRUCCIN QUE PERMITE EL SALTO A LA SIGUIENTE  DENTRO DE LA SUBRUTINA
		DECFSZ			CNT2,1				;DECREMENTA  EL VALOR DEL CONTADOR 2 EN 1
		GOTO			DELAY2				;SI EL RESULTADO DEL DECREMEBNTO NO ES CERO REGRESA A DELAY2
		RETURN							; SI EL RESULTADO0 DEL DECREMENTO ES CEROREGRESA A $+1 DE DELAY1


TMR3
		MOVLW			D'100'				; CARGA 100 LITERAL EN EL ARCHIvO W
		MOVWF			CNT3				;MUEVE EL 100 (ARCHIVO) AL CONTADOR3

DELAY3
		GOTO			$+1
		DECFSZ			CNT3,1
		GOTO			DELAY3
		RETURN		


;=================================================================================================================================================================
;==============================================RUTINA DE CONTROL DEL MOVIMIENTO DEL CARRITO=======================================================================		 
;=================================================================================================================================================================


PRINCIPAL								;ETIQUETA
		BTFSS			PORTA,0				;INSTRUCCION QUE EXPLORA EL ESTADO DEL BIT 0 DEL PORTA (SENSOR IZQUIERDO)
		CALL			IZQUIERDA			;SI EL RSULTADO ES CERO LLAMA A LA SUBRUTINA IZQUIERDA
		BTFSS			PORTA,1				;INSTRUCCION QUE EXPLORA EL ESTADO DEL BIT 1 DEL PORTA (SENSOR CENTRAL)
		CALL			ADELANTE			;SI EL RESULTADO ES CERO LLAMA ALA SUBRUTINA ADELANTE
		BTFSS			PORTA,2				;INSTRUCCION QUE EXPLORA  EL ESTADO DEL BIT2 DEL PORTA (SENSOR DERECHO) 
		CALL			DERECHA				;SI EL RESULTADO ES CERO LLAMA A LA SUBRUTINA DERECHA
		GOTO			PRINCIPAL			;INDICA AL PROGRAMA SALATAR  A LA INSTRUCCION ETIQUETADA CON PRINCIPAL

ADELANTE								;ETIQUETA
		MOVLW			B'10100000'			;MUEVE EL VALOR EN ARCHIVO W
		MOVWF			PORTB				;MUEVE EL ARCHIVO W EN PORTB
		RETURN							;REGRESO  A PRINCIPAL, LAINSTRUCCION  BTFSS, PORTA,2

IZQUIERDA								;ETIQUETA
		MOVLW			B'10000000'			;MUEVE EL VALOR EN ARCHIVO W
		MOVWF			PORTB				;MUEVE EL ARCHIVO W EN PORTB
		RETURN							;REGRESO A PRINCIPAL, A LA INSTRUCCION BTFSS, PORTA,1

DERECHA									;ETIQUETA
		MOVLW			B'00100000'			;MUEVE EL VALOR EN ARCHIVO W
		MOVWF			PORTB				;MUEVE ARCHIVO W  EN PORTB
		RETURN							;REGRESO  A PRINCIPAL A LA INSTRUCCION  BTFSS,PORTA,0

;=================================================================================================================================================================
;=================================================TERMINA TODAS LAS INSTRUCCIONES PARA EL CARRITO SEGUIDOR========================================================
;=================================================================================================================================================================

END 


espero que les sirva 
(no se mucho por que soy un novato y espero no se enreden con las instrucciones)


----------

