This is the code I'm using, but it gets stuck at the WHILE/WEND bits in the ReadSensor subroutine. HELP!!!!!!!!!!!
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 word
byte1 var word
databyte var word
databit var word
i var word
'include "16F877A"
' Define LCD pins
Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 1
Define LCD_EREG PORTB
Define LCD_EBIT 3
Low PORTB.2 ' LCD R/W line low (W)
Pause 100 ' Wait for LCD to start
lcdout $fe,1, "Temperature and" ' show on LCD
lcdout $fe, $c0 ,"Humidity sensor." ' show on LCD
pause 2000 ' Wait 2 seconds
lcdout $fe,1 ' Clear screen
Goto mainloop ' Skip subroutines, start main program
mainloop:
lcdout $fe,1,"Temp ", # tempc
lcdout $fe,$c0,"Humidity ",#RHTempComp
gosub ReadSHT71
pause 100
goto mainloop
end
'read the sensor thingie
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
'--------------------- Calculate Relative Humidity -----------------------------
w = result * 405
w = div32 100
x = result * result
x = div32 1000
x = x * 28
x = div32 100
RHLinear = w - x - 400
'---------- Calculate Relative Humidity with Temperature Compensation ----------
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 the Sensor ----------------------------
Initialize:
high PORTD.0
low PORTD.1
for i = 1 to 10
high PORTD.1
pause 1
low PORTD.1
pause 1
next i
call TransferStart
return
'---------------------------- Get Data from Sensor -----------------------------
ReadSensor:
gosub TransferStart
gosub WaitSensor
shiftout PORTD.0,PORTD.1,1,[Sensorcmd\8] ' Send command byte
input PORTD.0 ' Wait for acknowledge
low PORTD.1
while PORTD.0 = 1
wend
pulsout PORTD.1,10 ' Send acknowledge
while PORTD.0 = 0
wend
while PORTD.0 = 1 ' Wait for conversion to complete
wend
low PORTD.1
shiftin PORTD.0,PORTD.1,0,[result.byte1\8] ' Get the first byte, 8 bits
low PORTD.0
pulsout PORTD.1,10 ' Send acknowledge
shiftin PORTD.0,PORTD.1,0,[result.byte0\8] ' Get the second byte, 8 bits
low PORTD.0
pulsout PORTD.1,10 ' Send acknowledge
shiftin PORTD.0,PORTD.1,0,[crc\8] ' Get third byte, 8 bits, CRC
high PORTD.0
pulsout PORTD.1,10 ' Send acknowledge
input PORTD.0 ' End of Transmission
input PORTD.1
return
'---------------------------- Start Transfer -----------------------------------
TransferStart:
high PORTD.1
pause 1
low PORTD.0
pause 1
low PORTD.1
pause 1
high PORTD.1
pause 1
high PORTD.0
pause 1
low PORTD.1
return
'---------------------------- Wait for Sensor ----------------------------------
WaitSensor:
result = 4096
Loop:
result = result - 1
if PORTD.0 && result.bit11 then Loop
return
Bookmarks