Seria mas simple si pusieras el codigo en el foro con el comando (code)(/code) con corchetes [] o tenes el acceso con un botoncito que tiene la forma de numeral #
Creo que esta es la parte donde activas el trigger y esperas el sensor no?
portb=0x01; //ultrasonic trigger
delay_us(20); //delay trigger (datasheet)
portb=0x00; //trigger off
while(portb.b1==0){}
Este programa lo ocupe en un principio con la ayuda de un push button para comprobar la sintaxis de mi programa, a la hora de reformular el programa para usarlo con el sensor aparecieron los problemas, parece que el sensor no reconoce bien las distancias y el programa no realiza bien las subrutinas que tiene que son las de giro.
Es necesario solo 10uS de pulso.
Con ese codigo estarias viendo si existe o no una recepcion (echo), si quisieras saber la distancia tenes que medir el ancho de pulso de la salida del receptor.
Lo que no se es si no detecta nada que ocurriria, si la salida queda en alto o la salida queda en bajo.
Asi que deberias de tomar ese ancho de pulso y definir la distancia maxima o minina que queres.
Como hacerlo?
Dependiendo de que puerto estas usando podes configurar una interrupcion para que cuando ocurra comience a contar un temporizador, cuando recibe un pulso bajo (es decir se termino el pulso) paras el temporizador y te fijas si el tiempo que conto esta dentro de unos valores maximos y minimos que vos definis con anterioridad asi actuas segun sea la distancia, (aca si depende el oscilador por que el temporizador cuenta a una velocidad dada por el oscilador y preescalers), si por alguna razon no recibe nada podes llegar a usar el mismo timer para que cuando se rebalse ejecute otra interrupcion que corresponderia a que no hubiera nada al frente.
Distance in centimeters = Time / 58 ( Tiempo en uS )
Aca hay algo parecido para un 887 ( la misma flia ) y hace uso de lo que dije, interrupcion portb y timer. Esta para XC8 pero es C y termina siendo facil portarlo a otro compilador en C, al menos para darte una referencia.
http://tutorial.cytron.com.my/2013/11/19/sn-hc-sr04-pic16f887/Tambien podes hacer uso del modulo CCP como lo hizo MLO, hecho en CCS
http://www.todopic.com.ar/foros/index.php?topic=42732.msg354265#msg354265Y aca tenes una explicacion como funciona en español:
http://www.tecbolivia.com/index.php/articulos-y-tutoriales-microcontroladores/17-como-medir-distancias-con-el-sensor-ultrasonico-pingTambien tenes que tener en cuenta que el sensor cubre unos 30º y no es perfectaemente lineal hacia al frente.