Try this:
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
Had a couple of subtle math errors, parenthesis type things..
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