پاسخ : مشکل با rs485
کد قسمت master
کد قسمت master
کد:
[ $regfile = "m16def.dat" $crystal = 11059200 $hwstack = 50 $swstack = 50 $framesize = 50 $baud = 9600 '------------------------------------------------------- Config Portc = Output Config Portd.2 = Output Portd.2 = 1 Config Portd.3 = Output Config Portd.4 = Output Config Portd.5 = Output Config Portd.6 = Output Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portb.3 = Output Config Pina.4 = Input Config Pina.5 = Input Config Pina.6 = Input Config Pina.7 = Input Const Field_start = 253 Const Field_end = 254 Const Slave_address = 1 '-------------------------------------------------------- Dim Serial_idx As Byte , Data0 As Byte , Data1 As Byte , Data2 As Byte Dim Data_req(3) As Byte Dim A As Byte , K As Byte Dim Aaa As Byte , Ii As Byte , Jj As Byte , Highi As Byte , Highj As Byte Dim Bbb As Byte , I As Byte , J As Byte , Lowi As Byte , Lowj As Byte Dim Ax As Word Dim B As Byte , Sta As Byte Dim D As Byte Dim Bx As Word Dim W As Byte , G As Bit Dim S As Byte , F As Byte Dim X As Word Dim Sa As Word Dim Ma As Eram Word Dim Mi As Eram Word Dim Maa As Eram Word Dim Mii As Eram Word Dim Bb As Word , Hight As Word Dim Cc As Word , Lowt As Word Dim B_high As Word , Hight_high As Word Dim B_low As Word , Hight_low As Word Dim C_high As Word , Lowt_high As Word Dim C_low As Word , Lowt_low As Word Dim T As Byte , Tw As Byte , Ttw As Byte Dim Ww As Bit , Www As Bit , Aw As Bit , Bw As Bit , Cw As Bit , Dw As Bit Bb = Ma Cc = Mi Hight = Maa Lowt = Mii '--------------------------------------------- Set_key Alias Pina.6 Up Alias Pina.4 Down Alias Pina.7 Esc Alias Pina.5 Relayh Alias Portb.2 Relayl Alias Portb.3 Le1 Alias Portd.3 Le2 Alias Portd.5 Le3 Alias Portd.4 Le4 Alias Portd.6 T = 1 K = 0 W = 11 '-------------------------------------------- On Urxc Rec0_isr Enable Urxc Enable Interrupts '-------------------------------------------- Getdata: Do Portd.2 = 1 'to slave 1 Data_req(1) = Field_start Data_req(2) = Slave_address 'slave address<=== Data_req(3) = Field_end For I = 1 To 3 Printbin Data_req(i) Waitms 10 Next I 'wait for response Serial_idx = 0 Portd.2 = 0 Waitms 500 'check response If Serial_idx = 3 Then Serial_idx = 0 If Data1 = Data2 Then S = Data1 Else 'error End If If S = 5 Then Relayh = 1 If S = 15 Then Relayh = 0 Relayl = 1 End If If S = 30 Then Relayh = 1 Relayl = 0 End If If S = 45 Then Relayh = 0 Relayl = 1 End If If S = 60 Then Relayh = 1 Relayl = 0 End If If S = 85 Then Relayh = 0 Relayl = 1 End If If S = 95 Then Relayh = 1 Relayl = 0 End If Portc = Lookup(10 , Digit) Le1 = 1 Le1 = 0 Portc = Lookup(1 , Digit) Le2 = 1 Le2 = 0 If S < 10 Then Portc = Lookup(0 , Digit) Le3 = 1 Le3 = 0 Portc = Lookup(s , Digit) Le4 = 1 Le4 = 0 End If If S >= 10 Then Aaa = S / 10 Portc = Lookup(aaa , Digit) Le3 = 1 Le3 = 0 '--------------------------------------- Bbb = S Mod 10 Portc = Lookup(bbb , Digit) Le4 = 1 Le4 = 0 Waitms 100 End If End If Loop '--------------------------------------- Rec0_isr: Inputbin Data0 Select Case Serial_idx Case 0: If Data0 = Field_start Then Incr Serial_idx Case 1: If Data0 = Slave_address Then Incr Serial_idx Else Serial_idx = 0 End If Case 2: If Data0 < 100 Then Incr Serial_idx Data1 = Data0 Else Serial_idx = 0 End If Case 3: If Data0 < 100 Then Incr Serial_idx Data2 = Data0 Else Serial_idx = 0 End If Case 4: If Data0 = Field_end Then Incr Serial_idx Else Serial_idx = 0 End If End Select Return '--------------------------------------- Digit1: Data &B01110111 '0 Data &B00100100 '1 Data &B01011110 '2 Data &B01101110 '3 Data &B00101101 '4 Data &B01101011 '5 Data &B01111011 '6 Data &B00100110 '7 Data &B01111111 '8 Data &B01101111 '9 Data &B00111111 'A Data &B00001000 '- Data &B01010001 'L Data &B00111101 'H '--------------------------------------- Digit: Data &B00111111 '0 Data &B00000110 Data &B01011011 Data &B01001111 Data &B01100110 Data &B01101101 Data &B01111100 Data &B00000111 Data &B01111111 Data &B01100111 '9 Data &B01110111 Data &B01000000 Data &B00111000 Data &B01110110 ]
دیدگاه