Gracias JIM, de hecho ya habia leido tu ejemplo en esa pagina pero no entiendo muy bien; (Tengo bastantes prblemas con el C....jeje, tendre que superarlos algún dia y apenas termine este trabajo empezaré a estudiar ese programa)
Podrias explicarme mejor, como podria traducirse este pedazo:
byte sht11_leer_byte(byte ack)
// reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
{
byte i,val=0;
output_high(DATOS); //release DATA-line
for (i=128;i>0;i/=2) //shift bit for masking 0x80
{
output_high(CLOCK); //clk for SENSI-BUS
if (input(DATOS)) val=(val | i); //read bit
output_low(CLOCK);
}
if (ack) output_low(DATOS); //in case of "ack==1" pull down DATA-Line
else output_float(DATOS);
output_high(CLOCK); //clk #9 for ack
delay_us(5); //pulswith approx. 5 us
output_low(CLOCK);
output_high(DATOS); //release DATA-line
return val;
}
si no estoy mal, esa es la parte donde se lee los datos generados por el sensor; mi rutina en ASM es la siguiente:
setACK
bsf STATUS,RP0 ; banco 1 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
bcf TRISB,0 ; pone DATA port,0 como salida
;bcf TRISB,1
bcf STATUS,RP0 ; banco 0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
bcf PORTB,1 ; SCK falling edge bcf
bcf PORTB,0 ; DATA change nivel logico 0 bcf
bsf PORTB,1 ; SCK rising edge
nop
;bsf PORTB,0 ; DATA change nivel logico 1(reposo)
bsf STATUS,RP0 ; banco 1 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
bsf TRISB,0 ; pone DATA port,0 como entrada
bcf STATUS,RP0 ; banco 0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
return
Es lo mismo; dicen lo mismo?........................ No se si ahí esta el error pero creo que si; porque como anteriormente dije el sensor me genera datos del primer y segundo byte, solo que del segundo me genera siempre "FF" y este dato no cambia cuando vario las condiciones de humedad; sin embargo el primer Byte si varia; la rutina donde se debe decodificar este dato para convertirlo a humedad ya la tengo lista asi que solo me falta que el dato varie.............
Un saludo a todos...........