Thanks again mate but your code, the code I tried last, didn't have a pause 2000. That was mine. Your code never gets past the wait loop either. Here is code again for clarity. I appreciate it isn't going to work later in code as I haven't done anything with offset etc but there is no point till I get past the wait loop for ds1820 to become ready.
Code:
define OSC 48
ADCON1 = 7 ' Set PORTA to digital
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_SPBRG 225 ' 9600 Baud @ 48MHz, 0.0%
SPBRGH = 4
BAUDCON.3 = 1 ' Enable 16 bit baudrate generator
HSEROUT [13,10,"Starting"]
DQ var PORTA.0
temperature var word
count_remain var word
count_per_c var word
offset var word
'************************************************* ****************************
' Start temperature conversion
'************************************************* ****************************
mainloop: OWOut DQ, 1, [$CC, $44 ]
'************************************************* ****************************
' Check for still busy converting ( ~ 4500 times ... )
'************************************************* ****************************
waitloop:
INPUT DQ
If NOT DQ Then waitloop
high PORTA.5 ' turn on LED if it gets past this point
'************************************************* ****************************
' Read the temperature
'************************************************* ****************************
OWOut DQ, 1, [$CC, $BE ]
OWIn DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE, Skip 4, count_remain, count_per_c]
'************************************************* ****************************
' Calculate temperature in degrees C to 2 decimal places (not valid for negative temperature)
'************************************************* ****************************
temperature = (((temperature >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)+ offset
Lcdout $fe, 1, DEC (temperature / 100), ".", DEC2 temperature, " ",$DF,"C"
'************************************************* ****************************
' Calculate temperature in degrees F to 2 decimal places (not valid for negative temperature)
'************************************************* ****************************
temperature = (temperature */ 461) + 3200
'Lcdout $fe, $c0, DEC (temperature / 100), ".", DEC2 temperature, " ",$DF,"F"
HSEROUT [13,10, " Temp = ",DEC (temperature / 100), ".", DEC2 temperature, " ","F"]
goto mainloop
Bookmarks