Hola
, en lo que te puedo ayudar un poco es en la recepcion de pulsos, pues yo hice algo parecido para decodificar las señales que venian de un control remoto de televisor, la unica diferencia que habia es que los 1"s y 0"s son pulsos en alto de 1.7ms y 0.5ms respectivamente.
Por ejemplo para recibir la data 1001 recibia lo siguiente: estado inicial 0v, pulso en alto de 1.7ms (1), pulso en bajo de 0.3ms,pulso en alto de 0.5ms(0),pulso en bajo de 0.3ms,pulso en alto de 0.5ms(0),pulso en bajo de 0.3ms, pulso en alto de 1.7ms(1).... De esa manera mas o menos venian los pulsos, para lo cual yo recibia de esta manera:
Id_Datos:
pulsin porta.4,1,time
select case time
case 30,31,32,33,34,35,36,37,38,39,40
estado=0
case 140,141,142,143,144,145,146,147,148,149,150
estado=1
end select
tmp.0=estado
tmp=tmp<<(counter-1)
dato=dato+tmp
counter=counter-1
return
Esta funcion lo que hacia es detectar el bit que estaba llegando, para ello tenia una variable "counter" que me decia que # de bit estaba llegando, una variable "tmp" y una variable de almacenamiento "dato" que era la variable de salida esto lo hacia 8 veces para capturar un byte, luego de eso ya venia la etapa de verificacion....
Bueno, espero haberte aclarado un poco las ideas, de repente la forma de enviar los datos lo puedes hacer de una manera parecida....
Un abrazo desde Peru