ich kann da noch meinen Code zeigen...

..vielleicht findest ja n Fehler so...



CODE:

#include <16f870.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOLVP

#define SKIP_ROM 0xCC
#define CONVERT_T 0x44
#define READ_SCRATCHPAD 0xBE

#define DQ PIN_C4
//#define Tx_DS1820 PIN_C5

#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)


//////////////////////////////////////////////////////////////////////////////
// OW_RESET - performs a reset on the one-wire bus and
// returns the presence detect. Reset is 480us, so delay
// value is (480-24)/16 = 28.5 - we use 29. Presence checked
// another 70us later, so delay is (70-24)/16 = 2.875 - we use 3.
//
unsigned char ow_reset(void)
{
unsigned char presence;
output_low(DQ); //pull DQ line low
delay_us(480); // leave it low for 480us
input(DQ); // allow line to return high
delay_us(70); // wait for presence
presence = DQ; // get presence signal
delay_us(424); // wait for end of timeslot
return(presence); // presence signal returned
} // 0=presence, 1 = no part




//////////////////////////////////////////////////////////////////////////////
// READ_BIT - reads a bit from the one-wire bus. The delay
// required for a read is 15us, so the DELAY routine won't work.
// We put our own delay function in this routine in the form of a
// for() loop.
//
unsigned char read_bit(void)
{
unsigned char i;
output_low(DQ); // pull DQ low to start timeslot
input(DQ);// then return high
for (i=0; i<3; i++); // delay 15us from start of timeslot
return(DQ); // return value of DQ line
}




//////////////////////////////////////////////////////////////////////////////
// WRITE_BIT - writes a bit to the one-wire bus, passed in bitval.
//
void write_bit(char bitval)
{
output_low(DQ); // pull DQ low to start timeslot
if(bitval==1) input(DQ); // return DQ high if write 1
delay_us(104); // hold value for remainder of timeslot
input(DQ);
}// Delay provides 16us per loop, plus 24us. Therefore delay(5) = 104us


//////////////////////////////////////////////////////////////////////////////
// READ_BYTE - reads a byte from the one-wire bus.
//
unsigned char read_byte(void)
{
unsigned char i;
unsigned char value = 0;
for (i=0;i<8;i++)
{
if(read_bit()) value|=0x01<<i; // reads byte in, one byte at a time and then
// shifts it left
delay_us(120); // wait for rest of timeslot
}
return(value);
}



//////////////////////////////////////////////////////////////////////////////
// WRITE_BYTE - writes a byte to the one-wire bus.
//
void write_byte(char val)
{
unsigned char i;
unsigned char temp;
for (i=0; i<8; i++) // writes byte, one bit at a time
{
temp = val>>i; // shifts val right 'i' spaces
temp &= 0x01; // copy that bit to temp
write_bit(temp); // write bit in temp into
}
delay_us(104);
}

void main()
{
char get[10];
int k;
char temp_f,temp_c;

while(1)
{

ow_reset();
write_byte(0xCC); //Skip ROM
write_byte(0x44); // Start Conversion
delay_us(104);
ow_reset();
write_byte(0xCC); // Skip ROM
write_byte(0xBE); // Read Scratch Pad
for (k=0;k<9;k++)
{ get[k]=read_byte();
}

printf("\n ScratchPAD DATA = %X%X%X%X%X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]);


}
}