Hola alpha44,mi opinion es la misma que Carli que empieces con algo mas facil, pero si te quieres hacer una idea hay va un codigo en ASM copiado de Microsystems Engineering.
;***************************************************************************************
; ESCAPADA
;
; Autor: Mikel Etxebarria Isuskiza
; (c) Ingeniería de Microsistemas Programados S.L.
; Bilbao 2002
;
;El microbot trata de alejarse de cualquier objeto que trata de acercarse, bien por delante,
;como por detras. Para ello, el objeto se detecta empleando los dos sensores delanteros
;(RB4-RB5) y de los dos traseros (RB6-RB7).
list p=16F877 ;Tipo de procesador
include "P16F877.INC" ;Definición de registros internos
include "DEFINIR.INC" ;Definición de sensores
Temp equ 0x20 ;Variable temporal
org 0x05
goto Inicio
include "MACROS.INC" ;Definición de macros
Inicio clrf PORTA ;Desconectar motores
clrf Status_motores ;Borrar flags de movimiento
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Puerta A es digital
movlw b'11010001'
movwf TRISA ;RA4-RA0 entrada, resto salidas
movlw b'11000000'
movwf OPTION_REG
movlw 0xff
movwf TRISB ;Puerta B entrada
bcf STATUS,RP0 ;Selecciona banco 0
;Bucle principal de movimiento
Loop clrwdt
movf PORTB,W
iorlw b'00001111'
movwf Temp ;Leer las entradas RB4-RB7
movlw b'11001111'
iorwf Temp,W
sublw b'11001111'
btfsc STATUS,Z ;Están activados sensores delanteros (RB4-RB5)??
goto Esc_atras ;Si, escapada hacia atrás
btfss Sen_de_izdo ;Está activado el sensor delantero izdo. (RB4)??
goto Esc_at_dcha ;Si, escapada hacia atrás/derecha
btfss Sen_de_dcho ;Está activado el sensor delantero dcho. (RB5) ??
goto Esc_at_izda ;Si, escapada hacia atrás/izquierda
movlw b'00111111'
iorwf Temp,W
sublw b'00111111'
btfsc STATUS,Z ;Están activados sensores traseros (RB6-RB7)?
goto Esc_adelan ;Si escapada hacia adelante
btfss Sen_tr_izdo ;Está activado el sensor trasero izdo. (RB6)??
goto Esc_ad_dcha ;Si, escapa hacia adelante/derecha
btfss Sen_tr_dcho ;Está activado el sensor trasero dcho. (RB7)??
goto Esc_ad_izda ;Si, escapada hacia adelante/izquierda
Parar Stop
goto Loop ;No hay ningún objeto cercano.Detener el robot
Esc_atras btfsc M_atras ;Se está moviendo hacia atrás ??
goto Loop ;Si
Atras ;No, movimiento hacia atras
goto Loop
Esc_adelan btfsc M_adelante ;Se está moviendo hacia adelante ??
goto Loop ;Si
Adelante ;No, movimiento hacia adelante
goto Loop
Esc_at_dcha At_dcha ;Movimiento atras/derecha
goto Loop
Esc_at_izda At_izda ;Movimiento atras/derecha
goto Loop
Esc_ad_dcha Ad_dcha ;Movimiento adelante/derecha
goto Loop
Esc_ad_izda Ad_izda ;Movimiento adelante/izquierda
goto Loop
end
Espero haberte ayudado aunque sea poco.
Saludos y no te rindas.