Bueno por fin, lo consegui.
Navaismo, si que tengo las resistencias pull-up, aunque en la simulacion del proteus, las quito y me funciona igual.
Mario, en proton el bit 9 es el 8 va de 0,1,2,3,4,5,6,7,8.
Y ahora el problema que tenia, resulta que el ds1820 deberia devolverme para -255 el valor 111111111, pero no es asi, me está devolviendo 111111110, o sea que el ds 1820 me devuelve el valor con la resta de 1:
111111111
-1
__________
111111110
Y yo sin darme cuenta, pero bueno os pongo el codigo final, si encontrais mejoras os agradezco que me las sugieran:
Codigo:
device = 16f877
xtal = 4
lcd_dtpin = portd.4
lcd_rspin = porte.0
lcd_enpin = porte.1
lcd_interface = 4
lcd_lines = 4
lcd_type = 0
all_digital= true
Symbol RST = PORTc.0 ' Reset pin
Symbol DQ = PORTc.1 ' Data pin
Symbol CLK = PORTc.3 ' Reloj
dim temp as word
dim conv1 as word
dim conv2 as word
dim conv3 as word
dim c as byte
dim conv5 as word
dim conv6 as word
dim conv7 as word
dim total as word
dim bcd_a_bin as word
dim index as word
index=9
Delayms 400 ' Wait for PICmicro to stabilise
Low RST ' Reset the device
Cls
MAINLOOP:
RST = 1 ' Enable device
Shout DQ, CLK, LSBFIRST, [$EE] ' Start conversion
RST = 0
Delayms 1000 ' Wait 1 second for conversion to complete
RST = 1
Shout DQ, CLK, LSBFIRST, [$AA] ' Send read command
Shin DQ, CLK, LSBPRE, [TEMP\9] ' Read 9 bit temperature
RST = 0
' Display the decimal temperature
Cls
if temp.8 =1 then print at 1,1,"-"
if temp.8 =1 then gosub bin_a_bcd
if temp.8 =0 then print at 1,1,"+"
if temp.8 =0 then conv5= temp
if temp.8=1 then conv5= conv2
Print at 1,3, Dec conv5>>1 , ".", Dec conv5.0 * 5, " GRADOS C"
Goto MAINLOOP ' Do it forever
bin_a_bcd:
let conv2= temp
if temp.0 = 1 then conv2.0= 0
if temp.0 = 0 then conv2.0= 1
if temp.1 = 1 then conv2.1= 0
if temp.1 = 0 then conv2.1= 1
if temp.2 = 0 then conv2.2= 1
if temp.2 = 1 then conv2.2= 0
if temp.3 = 1 then conv2.3= 0
if temp.3 = 0 then conv2.3= 1
if temp.4 = 1 then conv2.4= 0
if temp.4 = 0 then conv2.4= 1
if temp.5 = 1 then conv2.5= 0
if temp.5 = 0 then conv2.5= 1
if temp.6 = 1 then conv2.6= 0
if temp.6 = 0 then conv2.6= 1
if temp.7 = 1 then conv2.7= 0
if temp.7 = 0 then conv2.7= 1
if temp.8 = 1 then conv2.8=0
if temp.8 = 0 then conv2.8=1
conv2=conv2+1
return
End
P.D.: Y ahora a por el presostato.
Gracias a todos por la ayuda que me abies dado, espero subir de nivel y poder ayudar como ustedes.