well here goes,
I still need to do work, because I dont think it measures negatives temperature. Not sure yet how i am going to do it, but I will be
Transmitter:
'TRANSMIT PIC
INCLUDE "modedefs.bas"
DEFINE OSC 20 'use external 20mhz crystal
CMCON = 7 : ANSEL = 0 : ADCON1 = 7
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
DEFINE LCD_COMMANDUS 2500
DEFINE LCD_DATAUS 250
DEFINE CHAR_PACING 2000
DQ var PortB.4
temp var word
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 "TempC: ", dec (temperature / 100) , ".", dec2 temperature," ",$DF,"C"
lcdout $FE,$C0, bin encoded11.HighBYTE , ".", bin encoded2," ",$DF,"F"
serout portb.2, n2400, [$55, $55, $55, $55, $aa]
serout portb.2, n2400, [encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE ]
goto loop
End
Receiver:
'RECEIVE PIC
INCLUDE "modedefs.bas"
DEFINE OSC 20 'use external 20mhz crystal
CMCON = 7 : ANSEL = 0 : ADCON1 = 7
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
DEFINE LCD_COMMANDUS 2500
DEFINE LCD_DATAUS 250
'16
datain2 var word :temp 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 2000
'28
loop:
waitfor55:
serin portb.2 , n2400 , temp : if temp <> $55 then goto waitfor55
waitforaa:
serin portb.2 , n2400 , temp : if temp <> $aa then goto waitforaa
'36
serin portb.2, n2400, encoded22.HighBYTE
serin portb.2, n2400, encoded22.LowBYTE
serin portb.2, n2400, encoded11.HighBYTE
serin portb.2, n2400, encoded11.LowBYTE
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
temperature.LowBYTE = encoded1
temperature.HighBYTE = encoded2
lcdout $FE,1
LCDOUT "TempC: ", dec (temperature / 100) , ".", dec2 temperature," ",$DF,"C"
lcdout $FE,$C0, bin encoded11.HighBYTE , ".", bin encoded2," ",$DF,"F"
goto loop
end
Bookmarks