Hola Jonathan 
Bueno la cosa es asi:
******************************************** 
DisableInterrupts;
  PTD =0;
  Caracter =0;
  bit =0;
  for(tiempo_bit=0;tiempo_bit <=4;tiempo_bit++){
 }  // Espera para leer en la itad del bit
  
 
do{
   
   
   if((PTD & 0x20) == 0x20){ //De acuerdo al estado del pin cambia Caracter
    Caracter |= 0x01;   
      
   } 
    
   Caracter = Caracter <<1; //Acomoda los bits
   PTD =0;
   baudio();   //Espera
  bit++;
   }while(bit <=7); //Cuenta los bits
  
    TSC1 ^= 0X80; 
  EnableInterrupts;
}
*******************************************************
Este enfoque en asm funciona sin problemas pero aqui se veque estoy errando en alguna tontera porque recibo basura que no es siempre la misma para colmo de males.
Un saludo
  Angel M