void vEnvia_Byte(char Data){
char k=0,Unos=1;
while(input(T_CLOCK)==0);
output_high(T_CLOCK);
output_high(T_DATA);
output_drive(T_DATA);
output_drive(T_CLOCK);
/* ** Enviamos Bit Start ** */
output_high(T_CLOCK);
output_high(T_DATA);
delay_us(40);
output_low(T_DATA);
delay_us(40);
output_low(T_CLOCK);
delay_us(40);
/* ** Enviamos 8 bits de datos ** */
for(k=0;k<8;k++){
output_high(T_CLOCK);
delay_us(5);
output_bit(T_DATA,Data & 0x01);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
if(bit_test(Data,0)==1){Unos++;}
Data>>=1;
}
/* ** Enviamos bit de paridad ** */
output_high(T_CLOCK);
delay_us(5);
output_bit(T_DATA,Unos&0x01);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
/* ** Enviamos bit Stop ** */
output_high(T_CLOCK);
delay_us(5);
output_high(T_DATA);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
output_float(T_CLOCK);
output_float(T_DATA);
delay_us(100);
}
/* ****************************************************************************************** */
char cLee_Byte(void){
char k;
char Data=0xEC;
/* ** Condicion RTS ** */
delay_us(100);
if(input(T_DATA)==0){
/* ** Esperamos a que el Host este listo para enviar datos ** */
while(input(T_CLOCK)==0);
output_high(T_CLOCK);
output_drive(T_CLOCK);
output_high(T_CLOCK);
delay_us(200);
output_low(T_CLOCK);
if(input(T_DATA)==0){
/* ** Se recibe los 8 bits de datos ** */
for(k=0;k<8;k++){
delay_us(40);
output_high(T_CLOCK);
delay_us(20);
shift_right(&Data,1,input(T_DATA));
delay_us(20);
output_low(T_CLOCK);
}
/* ** Se ignora bit de paridad ** */
delay_us(40);
output_high(T_CLOCK);
delay_us(40);
output_low(T_CLOCK);
/* ** Se testea bit Stop ** */
delay_us(40);
output_high(T_CLOCK);
delay_us(20);
if(input(T_DATA)==1){
delay_us(15);
/* ** Se envia Ack ** */
output_drive(T_DATA);
output_low(T_DATA);
delay_us(5);
output_low(T_CLOCK);
delay_us(40);
output_high(T_CLOCK);
delay_us(10);
}
}
}
output_float(T_CLOCK);
output_float(T_DATA);
delay_us(100);
return(Data);
}