i cant comment on the code much , but its a bit easier to read



Code:
Temperature:

i2cread SDA, SCL, SAdef, LocAmbTemp, [AmbTemp] 'read amb temperature Ta & save in AmbTemp
 gosub SwapAmbBytes:                            'I2C reads the highest byte first; Go swap the bytes

i2cread SDA, SCL, SAdef, LocObjTemp, [ObjTemp] 'read object temperature (Tobj) & save in ObjTemp
gosub SwapObjBytes:

if AmbTemp >= ObjTemp then Temperature               'Object is not heating, continue to loop
if (ObjTemp - AmbTemp) >= ThresTemp then ObjHeating  'differance between Amb & Obj temperature has exceeded threshold temp


Reset:                 'Reset time count and turn motion sensor off if (ObjTemp - AmbTemp) is less that threshold temp.
cnt = 1
low 6                  'turns motion sensor off
goto Temperature


ObjHeating:
high 6                 'obj is heating; turn motion detector on (by setting RB6 high) to check for motion in room .

for cnt = 1 to MaxTime 'measure time by counting # of loops of approx one sec each.

  If portb.1 = 1 then Temperature 'motion occured in room, do a reset

   i2cread SDA, SCL, SAdef, LocAmbTemp, [AmbTemp] 'read amb temperature Ta & save in AmbTemp
   gosub SwapAmbBytes:
   i2cread SDA, SCL, SAdef, LocObjTemp, [ObjTemp] 'read object temperature (Tobj) & save in ObjTemp
   gosub SwapObjBytes:

 if AmbTemp >= ObjTemp then Temperature           'Object is not heating, start new loop

 if (ObjTemp - AmbTemp) < ThresTemp then Temperature 'differance between Amb & Obj temperature is less than threshold temp

next cnt

Alarm: 'object temperature has exceeded threshold temp for more than the MaxTime, so sound alarm
  high portb.0
  pause 2000
  low portb.0
  pause 15000
  if portb.5 = 0 then Temperature
  goto Alarm 

end

' ---------- Sub Routines  ----------

 SwapAmbBytes: 'swap the MSB and LSB of the amb and obj temperatures
   
    swap AmbTemp.byte1, AmbTemp.byte0
 return


SwapObjBytes: 
   swap ObjTemp.Byte1, ObjTemp.byte0 
return