'------------------------------------------------------------------------------ '* '* Description: '* '* SE-PLM '* POWER LINE MODEM '* '* '* Written by Junghoon Kim 01-June-2004, 29-Sep-2004 '* Compiled by BASCOM8051 Demo Version '* '* SAMPLE Electronics co. '* C-18 KwangJang-fl. Main bd. ET-Land 16-9 HanGangno-3ga YongSan-gu '* Seoul 140-879 South KOREA '* Tel: +82-2-701-8051 '* Fax: +82-2-701-8058 '* Mail : sample@korea.com '* Web : HTTP://WWW.SAMPLE.CO.KR '* '* '* Command String = '* &HFF + &HAA + "TTTTT" + ":" + "ID" + "P1" + "P0" + "P2" + "CS" '* '* TTTTT -> 5 Bytes ASCII '* : -> 1 Byte ASCII Start Mark '* ID -> 2 Byte ASCII Node Bumber 00 - FF '* P1 -> 2 Bytes ASCII Port 1 Data '* P0 -> 2 Bytes ASCII Port 0 Data '* P2 -> 2 Bytes ASCII Port 2 Data '* CS -> 2 Bytes ASCII Check Sum Data '* '* Return String = '* &HFF + &HAA + "RRRRR" + ":" + "ID" + "P1" + "P0" + "P2" + "CS" '* '* RRRRR -> 5 Bytes ASCII '* : -> 1 Byte ASCII Start Mark '* ID -> 2 Byte ASCII Node Bumber 00 - FF '* P1 -> 2 Bytes ASCII Port 1 Data '* P0 -> 2 Bytes ASCII Port 0 Data '* P2 -> 2 Bytes ASCII Port 2 Data '* CS -> 2 Bytes ASCII Check Sum Data '* '* Point to Point Mode '* '* Master Slave '* '* P1.0 -----------> P1.4 '* P1.1 -----------> P1.5 '* P1.2 -----------> P1.6 '* P1.3 -----------> P1.7 '* '* P1.4 <----------- P1.0 '* P1.5 <----------- P1.1 '* P1.6 <----------- P1.2 '* P1.7 <----------- P1.4 '* '* P2 -----------> P0 '* P0 <----------- P2 '* '* '------------------------------------------------------------------------------ $crystal = 11059200 ' XTAL Frequency 11.0592MHz $baud = 2400 ' RS232 Serial Baud Rate 2400 BPS '------------------------------------------------------------------------------ Dim Maximum_wait As Const 2000 ' Wait Time Constant '------------------------------------------------------------------------------ Rx_tx Alias P3.2 ' H -> Rx Mode, L -> Tx Mode Wd_pulse Alias P3.3 ' Watch Dog Pulse Jumper_2 Alias P3.4 ' Jumper 2 Jumper_1 Alias P3.5 ' Jumper 1 Cd_status Alias P3.7 ' Carrier Detect ' Dim Wait_count As Word ' Receive Wait Time Dim Apple As Byte ' Temp Variable Dim Cherry As Byte ' Temp Variable Dim Grape As Byte ' Temp Variable Dim Dog As Byte ' Temp Variable Dim Cat As Byte ' Temp Variable Dim Id_code As Byte ' Id Code Dim Check_sum As Byte ' Check Sum Data Dim P1_out_code As Byte ' Port 1 Out Data Dim P0_out_code As Byte ' Port 0 Out Data Dim P2_out_code As Byte ' Port 2 Out Data Dim Out_status As String * 18 ' Port Status Out String '------------------------------------------------------------------------------ Begine: P3 = &HFF ' Initialize P3 '------------------------------------------------------------------------------ P1 = &HFF ' Initialize P1 ( All Off State ) P0 = &HFF ' Initialize P0 ( All Off State ) P2 = &HFF ' Initialize P2 ( All Off State ) '------------------------------------------------------------------------------ Id_code = &H00 ' Id Code check ' ' If Jumper_2 = 0 Then ' Id_code = Id_code Or &H01 ' J1 J2 End If ' =============================== ' ' 0: Open Open -> Master Mode If Jumper_1 = 0 Then ' 1: Open Short -> Slave 01 Id_code = Id_code Or &H02 ' 2: Short Open -> Slave 02 End If ' 3: Short Short -> Slave 03 ' ' If Id_code = 0 Then ' Goto Master_mode ' End If ' ' ' Main: '------------------------------------------------------------------------------ Cat = 0 Do ' Search Start Header "TTT:" Gosub Wd If Apple = "T" Then Incr Cat If Cat > 3 Then Cat = 3 End If Else If Apple = ":" Then If Cat >= 3 Then Exit Do End If End If Cat = 0 End If Loop '------------------------------------------------------------------------------ Id_check: Check_sum = 0 ' Check Sum Byte Clear Gosub Getbyte ' If Apple = 0 Then ' Slave Mode // Point to Point Goto Slave_receive End If ' If Apple = Id_code Then ' Slave Mode // PC Network Goto Slave_receive End If ' Goto Main '------------------------------------------------------------------------------ Slave_receive: '-----------------------------------------<< Port 1 Data Code >>--------------- Gosub Getbyte P1_out_code = Apple '-----------------------------------------<< Port 0 Data Code >>--------------- Gosub Getbyte P0_out_code = Apple '-----------------------------------------<< Port 2 Data Code >>--------------- Gosub Getbyte P2_out_code = Apple '-----------------------------------------<< Check Sum Data >>----------------- Dog = Check_sum Gosub Getbyte ' *** If you do not need check sum If Dog = Apple Then ' *** then remove these line Goto Modem_data_out ' *** Else ' *** Goto Modem_data_in ' *** End If ' *** '------------------------------------------------------------------------------ Modem_data_out: ' P1 = P1_out_code P0 = P0_out_code P2 = P2_out_code '------------------------------------------------------------------------------ Modem_data_in: ' Bitwait Cd_status , Set ' Wait until CD clear Reset Rx_tx ' Set PLM in Tx Mode Waitms 5 Out_status = Chr(&Hff) + Chr(&Haa) ' Preamble Out_status = Out_status + "RRRRR:" ' Start Mark Out_status = Out_status + Hex(id_code) ' Out_status = Out_status + Hex(p1) ' Out_status = Out_status + Hex(p0) ' Out_status = Out_status + Hex(p2) ' ' Check_sum = 0 ' Check sum For Cat = 9 To 16 ' Apple = Mid(out_status , Cat , 1) ' Check_sum = Check_sum + Apple ' Next Cat ' Out_status = Out_status + Hex(check_sum) ' ' ' Print Out_status ' ' ' Set Rx_tx ' Set PLM in Rx Mode Goto Main '------------------------------------------------------------------------------ Wd: ' Wait_count = 0 Do Apple = Inkey() Reset Wd_pulse Waitms 1 If Id_code = 0 Then ' Only Master Mode Wait Time Count Up Incr Wait_count If Wait_count > Maximum_wait Then Goto Master_mode End If End If Set Wd_pulse If Apple <> 0 Then Check_sum = Check_sum + Apple Exit Do End If Loop ' Return '------------------------------------------------------------------------------ Getbyte: ' Gosub Wd : Gosub Ascii2num Grape = Apple Rotate Grape , Left Rotate Grape , Left Rotate Grape , Left Rotate Grape , Left Grape = Grape And &HF0 Gosub Wd : Gosub Ascii2num Apple = Apple Or Grape Return '------------------------------------------------------------------------------ Ascii2num: ' If Apple >= "A" Then Apple = Apple - 7 End If ' Apple = Apple And &H0F Return '============================================================================== Master_mode: ' Reset Rx_tx ' Set PLM in Tx Mode Waitms 10 Out_status = Chr(&Hff) + Chr(&Haa) ' Preamble Out_status = Out_status + "TTTTT:" ' Start Mark Out_status = Out_status + Hex(&H00) ' Dog = P1 ' Master Id Code : 00 Rotate Dog , Left Rotate Dog , Left Rotate Dog , Left Rotate Dog , Left Dog = Dog Or &H0F Out_status = Out_status + Hex(dog) ' P1 --> P1 Out_status = Out_status + Hex(p2) ' P2 --> P0 Out_status = Out_status + Hex(&Hff) ' &HFF --> P2 ' Check_sum = 0 ' Check sum For Cat = 9 To 16 ' Apple = Mid(out_status , Cat , 1) ' Check_sum = Check_sum + Apple ' Next Cat ' Out_status = Out_status + Hex(check_sum) ' ' ' Print Out_status ' '------------------------------------------------------------------------------ Set Rx_tx ' Reset PLM in Rx Mode Cat = 0 Do ' Search Start Header "RRR:" Gosub Wd If Apple = "R" Then Incr Cat If Cat > 3 Then Cat = 3 End If Else If Apple = ":" Then If Cat >= 3 Then Exit Do End If End If Cat = 0 End If Loop '------------------------------------------------------------------------------ Check_sum = 0 ' Check Sum Byte Clear Gosub Getbyte '-----------------------------------------<< Port 1 Data Code >>--------------- Gosub Getbyte P1_out_code = Apple '-----------------------------------------<< Port 0 Data Code >>--------------- Gosub Getbyte P0_out_code = Apple '-----------------------------------------<< Port 2 Data Code >>--------------- Gosub Getbyte P2_out_code = Apple '-----------------------------------------<< Check Sum Data >>----------------- Dog = Check_sum ' Gosub Getbyte ' *** If you not need check sum If Dog = Apple Then ' *** then remove these line Goto Modem_data_out_m ' *** Else ' *** Goto Modem_data_in_m ' *** End If ' *** '------------------------------------------------------------------------------ Modem_data_out_m: ' Rotate P1_out_code , Left Rotate P1_out_code , Left Rotate P1_out_code , Left Rotate P1_out_code , Left P1_out_code = P1_out_code Or &H0F '------------------------------------------------------------------------------ P1 = P1_out_code P0 = P2_out_code P2 = &HFF '------------------------------------------------------------------------------ Modem_data_in_m: Goto Master_mode '-------------------------- End of FILE ---------------------------------------