
Originally Posted by
lerameur
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
'you can combine the serin's into one statement (now that we got the bracket thing straightened out!!!)
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