Try this:
Had a couple of subtle math errors, parenthesis type things..Code:Define LCD_DREG PORTB Define LCD_DBIT 4 Define LCD_RSREG PORTB Define LCD_RSBIT 1 Define LCD_EREG PORTB Define LCD_EBIT 3 INCLUDE "modedefs.bas" crc var word:tempc var word:signc var word:result var word readhumidity var word:sensorcmd var word:readtemp var word:w var word x var word:temp var word:rhtempcomp var word:rhlinear var word:byte0 var byte byte1 var byte:databyte var byte:databit var bit:i var word:dpin var portd.0 cpin var portd.1:portb.2=0:output portb.2:Pause 1000 lcdout $fe,1, "Temperature and",$fe, $c0 ,"Humidity sensor.":pause 2000 lcdout $fe,1:Goto mainloop ' Skip subroutines, start main program mainloop: lcdout $fe,1,"Temp ", #tempc,$fe,$c0,"Humidity ",#RHTempComp gosub ReadSHT71:pause 100:goto mainloop ReadSHT71: Sensorcmd = ReadTemp : gosub readsensor if result => 4000 then tempC = result - 4000 : SignC = 160 else tempC = 4000 - result : SignC = "-" endif gosub Initialize : Sensorcmd = ReadHumidity : gosub readsensor w = result * 405 : w = div32 100 : x = result * result : x = div32 1000 x = x * 28 : x = div32 100 : RHLinear = w - x - 400 w = ( (8 * result ) + 1000) / 10 if SignC = 160 then if tempC > 2500 then x = (tempC - 2500) * w : x = div32 100 RHTempComp = ( RHLinear + x ) / 100 else x = (2500 - temp) * w : x = div32 100 RHTempComp = ( RHLinear - x ) / 100 endif else x = (2500 + tempC) * w : x = div32 10000 RHTempComp = RHLinear - x endif sleep 1 : return Initialize: dpin=1:cpin=0:for i=1 to 10:cpin=1:pause 1:cpin=0:pause 1:next i gosub TransferStart : return ReadSensor: gosub TransferStart : gosub WaitSensor shiftout dpin,cpin,0,[Sensorcmd\8] input dpin : cpin = 0 while dpin = 1 : wend cpin = 1 : pause 1 : cpin = 0 while dpin = 0 : wend while dpin = 1 : wend cpin = 0 : shiftin dpin,cpin,0,[result.byte1\8] : dpin = 0 : cpin = 1 pause 1 : cpin = 0 : shiftin dpin,cpin,0,[result.byte0\8] : dpin = 0 cpin = 1 : pause 1 : cpin = 0 : shiftin dpin,cpin,0,[crc\8] : dpin = 1 cpin = 1 : pause 1 : cpin = 0 : input dpin : input cpin : return TransferStart: cpin = 1 : pause 1 : dpin = 0 : pause 1 : cpin = 0 pause 1 : cpin = 1 : pause 1 : dpin = 1 : pause 1 : cpin = 0 : pause 1 return WaitSensor: result = 4096 Loop: result = result - 1 : if PORTD.0 & result.bit11 then Loop return END
Looks like the mode might've been wrong in a couple of places.
The END wasn't at the bottom...not that it makes much of a difference.
And it's been COLON-IZED!![]()




Bookmarks