Parallax, Inc. • DS2760 Thermocouple Kit (#28022) • 01/2004
7
sign = tCuV.BIT15 ' save sign bit
tCuV = tCuV >> 3 ' correct alignment
IF sign THEN
tCuV = tCuV | $F000 ' pad 2's-compliment bits
ENDIF
tCuV = ABS tCuV */ 4000 ' x 15.625 uV
RETURN
' Reads cold junction (device) temperature
' -- each raw bit = 0.125 degrees C
' -- returns tmpCJ in whole degrees C
Read_CJ_Temp:
OWOUT OW, %0001, [SkipNet, RdReg, $18]
OWIN OW, %0010, [tmpCJ.BYTE1, tmpCJ.BYTE0]
IF (tmpCJ.BIT15) THEN ' check sign
tmpCJ = 0 ' disallow negative
ELSE
tmpCJ = tmpCJ.HIGHBYTE ' >> 5 x 0.125 (>> 3)
ENDIF
RETURN
' Search currently selected TC table for nearest entry
' -- uses modified binary algorithm to find cjComp
' -- high end of search set before calling (tblHi)
' -- successful search sets tempC
TC_Lookup:
tblLo = 0 ' low entry of table
tempC = 22 ' default to room temp
READ (tblHi * 2), Word testVal ' check max temp
IF (cjComp > testVal) THEN
error = 1 ' out of range
ELSE
DO
eePntr = (tblLo + tblHi) / 2 ' midpoint of search span
READ (eePntr * 2), Word testVal ' read value from midpoint
IF (cjComp = testVal) THEN
EXIT ' found it!
ELSEIF (cjComp < testVal) THEN
tblHi = eePntr ' search lower half
ELSE
tblLo = eePntr ' search upper half
ENDIF