By the way , the LCD is there basically to tell me what is goign on .
anyway , here is the complete program :
sending:
' Picbasic Pro program to read DS1820 1-wire temperature sensor
' and display temperature on LCD
' FOR SENDING SERIAL
INCLUDE "modedefs.bas"
DEFINE OSC 20 'use external 20mhz crystal
CMCON = 7 : ANSEL = 0 : ADCON1 = 7
' Define LCD pins
DEFINE LCD_DREG PORTA ' Set LCD Data port
DEFINE LCD_DBIT 0 ' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_RSREG PORTB ' Set LCD Register Select port
DEFINE LCD_RSBIT 1 ' Set LCD Register Select bit
DEFINE LCD_EREG PORTB ' Set LCD Enable port
DEFINE LCD_EBIT 0 ' Set LCD Enable bit
DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 2 ' Set number of lines on LCD
TRISB.2 =0
TRISB.3 =1
DQ var PortB.4
temp var word
'27
temperature var word
count_remain var byte
count_per_c var byte
counter var byte
tempc var word
dataout var word
dataout2 var word
datain var word
array var word
encoded1 var word
encoded2 var word
encoded22 var word
encoded11 var word
loop:
owout DQ,1,[$cc]
owout DQ,0,[$44]
Pause 500
owout DQ,1,[$cc]
owout DQ,0,[$be]
owin DQ, 0, [temperature.LOwBYTE, temperature.Highbyte, Skip 4, count_remain, count_per_c]
'50
temperature = ((( temperature >> 1) *100)- 25) + (((count_per_c - count_remain) * 100) / count_per_c)
tempc = (((temperature *9) / 5)+3200)
dataout = temperature / 100
dataout2 = temperature
encoded1 =temperature.LowBYTE
encoded2 =temperature.HighBYTE
For counter=0 TO 7
IF encoded1.0[counter]=0 Then
encoded11.0[counter*2]=0
encoded11.0[counter*2+1]=1
Else
encoded11.0[counter*2]=1
encoded11.0[counter*2+1]=0
EndIF
Next counter
For counter=0 TO 7
IF encoded2.0[counter]=0 Then
encoded22.0[counter*2]=0
encoded22.0[counter*2+1]=1
Else
encoded22.0[counter*2]=1
encoded22.0[counter*2+1]=0
EndIF
Next counter
lcdout $FE,1
LCDOUT BIN temperature , ".", dec (temperature / 10)," ",$DF,"C"
lcdout $FE,$C0, bin encoded22.HighBYTE , ".", bin encoded2," ",$DF,"F"
serout portb.2, n2400, [encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE ]
goto loop
End
AND RECEIVING:
' Picbasic Pro program to read DS1820 1-wire temperature sensor
' and display temperature on LCD
' FOR Receiving SERIAL
INCLUDE "modedefs.bas"
DEFINE OSC 20 'use external 20mhz crystal
CMCON = 7 : ANSEL = 0 : ADCON1 = 7
' Define LCD pins
DEFINE LCD_DREG PORTA ' Set LCD Data port
DEFINE LCD_DBIT 0 ' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_RSREG PORTB ' Set LCD Register Select port
DEFINE LCD_RSBIT 1 ' Set LCD Register Select bit
DEFINE LCD_EREG PORTB ' Set LCD Enable port
DEFINE LCD_EBIT 0 ' Set LCD Enable bit
DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 2 ' Set number of lines on LCD
'22
datain2 var word
datain var word
dataout var word
counter var byte
temperature var word
encoded1 var word
encoded2 var word
encoded11 var word
encoded22 var word
pause 500
loop:
'36
serin portB.3, n2400,[ encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE]
lcdout $FE,1
LCDOUT "datain: ", BIN 5
lcdout $FE,$C0, "datain2: ", bin encoded22.HighBYTE , ".", dec datain2," ",$DF,"C"
Pause 500
For counter=0 TO 7 'decoding
encoded1.0[counter]=encoded11.0[counter*2]
encoded2.0[counter]=encoded22.0[counter*2]
Next counter
temperature= encoded1 ' putting back together as the original temperature
For counter=0 TO 7
temperature.0[counter+8]=encoded2.0[counter+8]
Next counter
goto loop
End
Bookmarks