Aparentemente veo nada extraña en el programa.
Lo que si es que no me gusta es la manera de pasar los datros de 3,3v a 5V.
No podias haber utilizado para realizar esa converson y la recepcion de daros mediante un integrado especifico para tal efecto.
Estos integrados lo realizan todo la recepcion de daos en 3,3v y te lo pasan ya directamente al nivel de los 5V del pic. Por jemplo uno de ellos podria ser el: MAX3232ECDR. tiene dos canales de emision-recepcion
Otro producto quizas mas simpleguera utilizar un elemento como este:
http://www.sparkfun.com/products/8745Es mas parecido a tu montaje. Mira su esquema de conexion. El transistor empleado es mas rapido que el 2n3904 y sobre todo tiene los flancos de subida y bajada de los flancos de cambios de señal mucho mas rapidos.
Una pregunta ¿Por que no has utilizado el Checksum?
F.