Once upon a time, I had a nice little "read DS2438" demo. I have, for the moment, lost that. For what it is worth in the meantime, here is a hastily harvested and annotated collection of "bits" from a bigger program. It MAY help you get to grips with reading from a DS2438. ===== The code, as presented here, is untested. It was taken from a working program, though. ===== The many, many.... (*Check to see that liDMLSHandle, the session handle, is still valid*) .. checks may not be necessary... but they seem to do no harm. ===== Array baDMLRomID[chip,byteindex] holds the 1-wire chip's serial number/device address. The first index ("chip") is zero for the first chip, 1 for the next, etc. (kDMLRomIndexMax defines the maximum allowed value for "chip") The second index goes from 0 to 7, and holds the chip serial number in bytes, IN REVERSE ORDER. Thus, for a DS2438, baDMLRomID[chip,0] will always be $26, the family code for DS2438s. iDMLAdapterType: type of adapter (1=DS9097, no suffix, or E; 5=97-U) (6 for true USB, I believe, 5 for iButtonLink USB adapter which creates and uses a virtual serial port.) iDMLPortNum: port adapter is on, e.g. 1 if COM1 ===== Necessary global var declarations.... (*From DS016... comments more full below...*) bTmp:byte; sTmp:string; saDMLRomID:array [0..kDMLRomIndexMax] of string[16]; (*saDMLRomID[0] would hold 'A20000000547FB10' if the chip for param 0 was $A20000000547FB10. The address is given in the form returned by the iButtonViewer (software included in SDK), i.e. the right hand byte is the device ID byte.*) baDMLRomID:array [0..kDMLRomIndexMax,0..7] of byte; (*baDMLRomID[2,0] holds chip 2's LEAST significant id byte*) iDMLPortNum,iDMLAdapterType:integer; (*Beware: I have before, and may still, have been confused over the type expectations of the TMEX interface. I THINK that Dallas calls a signed 8bit number a "byte" whereas in Delphi-speak a byte is an UNsigned 8 bit number. IF all of this program is done right, AND you never have to look at the Dallas documentation (seems unlikely!), then you'll be okay. If you spot errors on my part in translating from the Dallas to the Delphi, please get in touch? ...and... just to add to the fun... I think I remember some issues regarding changed type definitions (or at least types of type available) between the 16 bit Delphi (Delphi ver.1) and later versions. That sounds unlikely, so I'm probably mis-remembering... but watch out for whatever caught me that registered in my memory thus. From SDK help file: (except first column)... Delphi name Dallas name Desc integer short 16-bit signed longint long 32-bit signed shortint char 8-bit signed byte unsigned char 8-bit unsigned Checked, should be exactly right types: iDMLPortNum, iDMLAdapterType, liDMLSHandle siaDMLRom baDMLRom iDMLTmpResult... should be i for TMSetup, Access and TouchByte, at least. Would be mad to be inconsistent... but let me know if one of the others returns something different, other than TMExtendedStartSession *) iDMLTmpResult:integer; (*iDMLTmpResult is a 'scratch' variable, never used for long-term storage of any value.*) liDMLSHandle:longint; baDMLStateBuffer:array[0..15361] of byte; (*15360 might do, but for one byte, I covered the possiblilty that I was misunderstanding something in the Dallas docs*) siaDMLRom:array[0..8] of smallint;(*Yes: 9 bytes. the last isn't used every time, but I think it IS used sometimes. A curiosity: The type MUST BE SMALLINT... I accidentally had this as byte and got GPFaults during TMRom call. (Problem stuffing $FF into an element?)*) (*... end 'From DS016*) (*From early draft of DS029, rough paste with much spackle... reading Vad and Tture from DS2438*) ====== An example of calling DMLGetVAD..... function TDS025f1.rsTTureR(bIdx:byte):single; (*Read sensor bIdx; return tture in degrees C, OR 255 or 254 to indicate errors in read. Will read tture from DS2438 (id $26)*) var rTmp,rsTmp:single; bTmp,bTmp2,bErr:byte; iErr:integer; begin if baDMLRomID[bIdx,0]=$26 then begin (*Read tture from a dS2438*) DMLGetVAD(bIdx,rTmp,rsTmp,bErr,iErr); (*After GetVAD: 1st:unchanged, 2nd VAD(throw away), rsTmp has tture, bErr is TKBErr, and iErr is Dallas err (meaningless if TKBErr=0)*) (*NEEDS TO CHECK ERROR VARIABLES, and process any errors found.....*) if bErr<>0 then rsTmp:=255; end;(*Read tture from a DS2438*) ====================================================== ==== The procedure itself..... procedure TDS025f1.DMLGetVAD(bIndex:byte; {var cardAns:cardinal;(*Get away from cardinals*)} var rVAD,rTTure:single; var bTKBErr:byte; var iDalErr:integer); (*Read Vad and Tture from DS2438 Reading Tture is new in version of this embedded in DS025 Returns Tture in deg C. **CRUDELY pasted in from early draft of DS029 **) (*In some Dallas demo code, there seems to be places where the code says "Couldn't do that first time? Try a few times more" In this code, we work through the stages of reading a temperature, and if we get a snag at any point, we give up. It is up to the calling program to re-call this as often as it deems worthwhile. N.B. This code does not check that the device it has been sent to read is in fact a DS2438 (family code $26). That check should be made- elsewhere.*) var c1:byte; iD0,iD1,iD2,iD3,iD4,iD5,iD6,iD7,iD8:integer; wTmp:word; begin bTKBErr:=0; liDMLSHandle:=TMExtendedStartSession(iDMLPortNum, iDMLAdapterType,nil); if liDMLSHandle<1 then begin bTKBErr:=10; iDalErr:=liDMLSHandle; end; if bTKBErr=0 then begin iDMLTmpResult:=TMSetUp(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=20; iDalErr:=iDMLTmpResult; end; end; {Reset/Presence/Skip ROM} if bTKBErr=0 then begin for c1:=0 to 7 do siaDMLRom[c1]:=baDMLRomID[bIndex,c1]; (*Prepare to pass chip ID to a buffer in TMEX driver. It MAY not always be necessary to repeatedly refill this buffer, but doing so makes this code more generally useful.*) try (*You could introduce other try... except... end blocks. I only put them in where I needed them to work past various errors in my code, errors which I hope are now gone!*) iDMLTmpResult:=TMRom(liDMLSHandle,@baDMLStateBuffer,@siaDMLRom); except {DID WORK.. REIMPLEMENT...on EGPFault do begin bTKBErr:=31; iDalErr:=0; iDMLTmpResult:=1; end; } end;(*Except*) if iDMLTmpResult<>1 then begin bTKBErr:=30; iDalErr:=iDMLTmpResult; end; end; if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); (*Check to see that liDMLSHandle, the session handle, is still valid*) if iDMLTmpResult<>1 then begin bTKBErr:=32; iDalErr:=iDMLTmpResult; end; end; (*Here begins: Turn off all devices apart from the one you want...*) if bTKBErr=0 then begin iDMLTmpResult:=TMStrongAccess(liDMLSHandle,@baDMLStateBuffer); if iDMLTmpResult<>1 then begin bTKBErr:=40; iDalErr:=iDMLTmpResult; end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=42; iDalErr:=iDMLTmpResult; end; end; } {Issue Write SP 00h with values to turn unused things off, and "connect" VAD to ADC} if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$4E); if iDMLTmpResult<0 then begin bTKBErr:=60; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? Check Sess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult then begin bTKBErr:=62; iDalErr:=iDMLTmpResult; end; end; } {Continue Issue Write SP 00h with values to turn unused things off, and "connect" VAD to ADC} if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$00); if iDMLTmpResult<0 then begin bTKBErr:=60; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? Check Sess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult then begin bTKBErr:=62; iDalErr:=iDMLTmpResult; end; end; } {Continue Issue Write SP 00h with values to turn unused things off, and "connect" VAD to ADC} if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$00); if iDMLTmpResult<0 then begin bTKBErr:=60; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? Check Sess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult then begin bTKBErr:=62; iDalErr:=iDMLTmpResult; end; end; } {Reset/Presence/Skip ROM again} if bTKBErr=0 then begin for c1:=0 to 7 do siaDMLRom[c1]:=baDMLRomID[bIndex,c1]; (*Prepare to pass chip ID to a buffer in TMEX driver. It MAY not always be necessary to repeatedly refill this buffer, but doing so makes this code more generally useful.*) try (*You could introduce other try... except... end blocks. I only put them in where I needed them to work past various errors in my code, errors which I hope are now gone!*) iDMLTmpResult:=TMRom(liDMLSHandle,@baDMLStateBuffer,@siaDMLRom); except {DID WORK.. REIMPLEMENT...on EGPFault do begin bTKBErr:=31; iDalErr:=0; iDMLTmpResult:=1; end; } end;(*Except*) if iDMLTmpResult<>1 then begin bTKBErr:=30; iDalErr:=iDMLTmpResult; end; end; if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); (*Check to see that liDMLSHandle, the session handle, is still valid*) if iDMLTmpResult<>1 then begin bTKBErr:=32; iDalErr:=iDMLTmpResult; end; end; (*Here begins: Turn off all devices apart from the one you want...*) if bTKBErr=0 then begin iDMLTmpResult:=TMStrongAccess(liDMLSHandle,@baDMLStateBuffer); if iDMLTmpResult<>1 then begin bTKBErr:=40; iDalErr:=iDMLTmpResult; end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=42; iDalErr:=iDMLTmpResult; end; end; } (*Now send Convert Tture cmnd*) if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$44); if iDMLTmpResult<0 then begin bTKBErr:=50; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} {Reset/Presence/Skip ROM again} if bTKBErr=0 then begin for c1:=0 to 7 do siaDMLRom[c1]:=baDMLRomID[bIndex,c1]; (*Prepare to pass chip ID to a buffer in TMEX driver. It MAY not always be necessary to repeatedly refill this buffer, but doing so makes this code more generally useful.*) try (*You could introduce other try... except... end blocks. I only put them in where I needed them to work past various errors in my code, errors which I hope are now gone!*) iDMLTmpResult:=TMRom(liDMLSHandle,@baDMLStateBuffer,@siaDMLRom); except {DID WORK.. REIMPLEMENT...on EGPFault do begin bTKBErr:=31; iDalErr:=0; iDMLTmpResult:=1; end; } end;(*Except*) if iDMLTmpResult<>1 then begin bTKBErr:=30; iDalErr:=iDMLTmpResult; end; end; if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); (*Check to see that liDMLSHandle, the session handle, is still valid*) if iDMLTmpResult<>1 then begin bTKBErr:=32; iDalErr:=iDMLTmpResult; end; end; (*Here begins: Turn off all devices apart from the one you want...*) if bTKBErr=0 then begin iDMLTmpResult:=TMStrongAccess(liDMLSHandle,@baDMLStateBuffer); if iDMLTmpResult<>1 then begin bTKBErr:=40; iDalErr:=iDMLTmpResult; end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=42; iDalErr:=iDMLTmpResult; end; end; } {Convert Voltage} if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$B4); if iDMLTmpResult<0 then begin bTKBErr:=60; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? Check Sess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult then begin bTKBErr:=62; iDalErr:=iDMLTmpResult; end; end; } {Reset/Presence/SkipRom again} if bTKBErr=0 then begin for c1:=0 to 7 do siaDMLRom[c1]:=baDMLRomID[bIndex,c1]; (*Prepare to pass chip ID to a buffer in TMEX driver. It MAY not always be necessary to repeatedly refill this buffer, but doing so makes this code more generally useful.*) try (*You could introduce other try... except... end blocks. I only put them in where I needed them to work past various errors in my code, errors which I hope are now gone!*) iDMLTmpResult:=TMRom(liDMLSHandle,@baDMLStateBuffer,@siaDMLRom); except {DID WORK.. REIMPLEMENT...on EGPFault do begin bTKBErr:=31; iDalErr:=0; iDMLTmpResult:=1; end; } end;(*Except*) if iDMLTmpResult<>1 then begin bTKBErr:=30; iDalErr:=iDMLTmpResult; end; end; if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); (*Check to see that liDMLSHandle, the session handle, is still valid*) if iDMLTmpResult<>1 then begin bTKBErr:=32; iDalErr:=iDMLTmpResult; end; end; (*Here begins: Turn off all devices apart from the one you want...*) if bTKBErr=0 then begin iDMLTmpResult:=TMStrongAccess(liDMLSHandle,@baDMLStateBuffer); if iDMLTmpResult<>1 then begin bTKBErr:=40; iDalErr:=iDMLTmpResult; end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=42; iDalErr:=iDMLTmpResult; end; end; } {Recall memory page 00h} if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$B8); if iDMLTmpResult<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$00); if iDMLTmpResult<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Reset/Presence/SkipRom} if bTKBErr=0 then begin for c1:=0 to 7 do siaDMLRom[c1]:=baDMLRomID[bIndex,c1]; (*Prepare to pass chip ID to a buffer in TMEX driver. It MAY not always be necessary to repeatedly refill this buffer, but doing so makes this code more generally useful.*) try (*You could introduce other try... except... end blocks. I only put them in where I needed them to work past various errors in my code, errors which I hope are now gone!*) iDMLTmpResult:=TMRom(liDMLSHandle,@baDMLStateBuffer,@siaDMLRom); except {DID WORK.. REIMPLEMENT...on EGPFault do begin bTKBErr:=31; iDalErr:=0; iDMLTmpResult:=1; end; } end;(*Except*) if iDMLTmpResult<>1 then begin bTKBErr:=30; iDalErr:=iDMLTmpResult; end; end; if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); (*Check to see that liDMLSHandle, the session handle, is still valid*) if iDMLTmpResult<>1 then begin bTKBErr:=32; iDalErr:=iDMLTmpResult; end; end; (*Here begins: Turn off all devices apart from the one you want...*) if bTKBErr=0 then begin iDMLTmpResult:=TMStrongAccess(liDMLSHandle,@baDMLStateBuffer); if iDMLTmpResult<>1 then begin bTKBErr:=40; iDalErr:=iDMLTmpResult; end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=42; iDalErr:=iDMLTmpResult; end; end; } (*Issue Read SP 00 Cmnd*) if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$BE); if iDMLTmpResult<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iDMLTmpResult:=TMTouchByte(liDMLSHandle,$00); if iDMLTmpResult<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} {Read the nine data..} if bTKBErr=0 then begin iD0:=TMTouchByte(liDMLSHandle,$FF); if iD0<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} iD1:=0;iD2:=0;iD3:=0;iD4:=0;//To avoid "might not be init'd" warnings //from compiler. (If not subsequently filled with meaningful data, //they won't be used.) if bTKBErr=0 then begin iD1:=TMTouchByte(liDMLSHandle,$FF); if iD1<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iD2:=TMTouchByte(liDMLSHandle,$FF); if iD2<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iD3:=TMTouchByte(liDMLSHandle,$FF); if iD3<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iD4:=TMTouchByte(liDMLSHandle,$FF); if iD4<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iD5:=TMTouchByte(liDMLSHandle,$FF); if iD5<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iD6:=TMTouchByte(liDMLSHandle,$FF); if iD6<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iD7:=TMTouchByte(liDMLSHandle,$FF); if iD7<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then begin iD8:=TMTouchByte(liDMLSHandle,$FF); if iD8<0 then begin bTKBErr:=70; iDalErr:=iDMLTmpResult;(*-1 flags shorted ML*) end; end; {Could? Should? CheckSess occur here? if bTKBErr=0 (*CSess*) then begin iDMLTmpResult:=TMValidSession(liDMLSHandle); if iDMLTmpResult<>1 then begin bTKBErr:=52; iDalErr:=iDMLTmpResult; end; end;} if bTKBErr=0 then TMEndSession(liDMLSHandle); (*I suppose that in some circumstances, leaving the session running continuously might work. I opted for the simpler and more general answer: Start it just before each use, shut it down as soon as not needed immediately.*) rVAD:=999; rTture:=999; if bTKBErr=0 then begin (*WHICH voltage you have read (VDD or VAD) depends on how chip was initialized. (See data sheet if more info needed)*) rVAD:=(iD3+(iD4*256))/100; (*rTTure:=function of iD1&1D2, iD2 being MSB of 2 bytes of 2s-complement, with integer part in iD2, and the 5 msbits of iD2 giving the fraction part. i.e. 0000 0011 1000 0000 is +3.5 deg C. 1111 1111 1000 0000 is -0.5 deg C.*) wTmp:=((iD2 and $FF)*256)+(iD1 and $F8); rTture:=1; if wTmp>$7FFF then begin wTmp:=(wTmp xor $FFFF)+1; rTture:=-1; end; rTture:=rTture*wTmp; rTture:=rTture/256;(*Returns Tture in deg C*) end; end;(*DMLGetVAD*)