Bueno, esto ha sido más rápido de lo que yo esperaba.

He aplicado exactamente los criterios expuestos mas arriba, en la hoja técnica
del SRF04 que proporciona el fabricante, y todo ha funcionado a la primera. 
Os copio el fuente marcando en rojo lo estrictamente necesario para el manejo
del SRF04. El programa queda tal como sigue:
Codigo:
/////////////////////////////////////////////////////////////////////////////////////////
//
// RROS para RRBOARD1 : SRF04 Test
//
// © 18.03.2006 By RedRaven
//
// Hardware: PIC16F628
//
// RA0 SRF04 Input Echo
// RA1 SRF04 Trigger
// RA2,RA3 Leds
// RB1 USART RX
// RB2 USART TX
// RB5 Buzzer Driver
// RB6,RB7 ICSP
//
// Xtal Ext. 4.00 Mhz
//
// Idioma: CCS PICC v.3.242
//
//
/////////////////////////////////////////////////////////////////////////////////////////
#include <16f628a.h>
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
#include <stdlib.h>
// Constantes y definiciones ////////////////////////////////////////////////////////////
#define SRF04_PORT_TRIGGER PIN_A1 // Pin usado para el pulso de Disparo
#define SRF04_PORT_ECHO PIN_A0 // Pin usado para recibir el eco ultrasónico
#define TIME_TRIGGER_uS 10 // Longitud del pulso de disparo 10 uS (microsegundos)
#define TIME_NEXT_TRIGGER_mS 10 // Espacio entre echo y siguiente disparo 10 mS (milisegundos)
#define MAX_ECHO_RESPONSE_Ticks 35000 // Maximo tiempo de espera del eco en Ticks de Timer1 (35 ms)
#define CALC_DISTANCE(t) (t / 58) // Convierte de Ticks a distancia
#define DISTANCE_INFINITE (0xffff) // Distancia infinita, no hay obstaculo en el rango de medida
// De RROS
int const MAXLENBUFF=24; // Maxima longitud de los bufferes
int const MAXLENCOMMAND=12; // Maxima longitud de un comando (sin argumentos)
int const NUMPAGSEEPROM=7; // Numero de paginas (de 16 bytes) de la EEPROM interna
// Variables Globales ///////////////////////////////////////////////////////////////////
long echo_delay;
long distance = DISTANCE_INFINITE;
// De RROS
char buffrec[MAXLENBUFF]; // Buffer de Recepcion
int xbuffrec=0x00; // índice del Buffer de Recepcion
int1 new_command=0; // Flag para indicar comando disponible
int1 pdte_send_prompt=0; // Flags para enviar echo fuera de la int_rda
int1 pdte_send_tmp_prompt=0;
char xcommand[MAXLENCOMMAND]; // Comprobador de comando recibido
// Declaracion de Funciones /////////////////////////////////////////////////////////////
void On_reset(void); // Tras RESET del Micro
void Send_listen(void); // Monitoriza RS232 : Comienzo
void Send_opts(void); // Monitoriza RS232 : Presenta opciones
void Send_prompt(void); // Monitoriza RS232 : Presenta el Cursor
void Send_tmp_prompt(void); // Monitoriza RS232 : Presenta el Cursor y el comando actual
void Ini_buffrec(void); // Borra el buffer de recepción
void Add_buffrec(char c); // Añade un caracter al buffer de recepción
void Procesa_comando(void); // Procesado de comandos
void realiza_medida(void); // Realiza una medida completa
// INTERRUPCIONES ///////////////////////////////////////////////////////////////////////
// INTERRUPCION RDA - Recepción USART -
#int_rda
void serial_isr() {
if(kbhit()){ // Si hay algo pendiente de recibir ...
Add_buffrec(getc()); // lo recibo y lo añado al Buffer de Recepcion
}
}
// Control del Buffer de recepcion ---------------------------------------
void Ini_buff_rec(void){ // Inicia a "