پاسخ : مشکل با rs485
سلام کد شما را کمی تغییر دادم. در برنامه مستر به جای ارسال رشته A و B، یک بایت با مقدار 250 برای اسلیو 1 و مقدار 251 برای اسلیو 2 ارسال می شود. در اسلیوها پس از دریافت بایت مربوط به هرکدام، عدد متغیر بایت _data که مقدار آن در اسلیو 1 برابر با 20 و در اسلیو 2 برابر با 40 است، برای مستر ارسال می شود. وقت نشد برنامه را آزمایش کنم. لطفا نتیجه را اعلام فرمایید
برنامه مستر
برنامه اسلیو 1
برنامه اسلیو 2
برای تغییر آدرس اسلیوها، مقدار ثابت Slave_add را در برنامه اسلیوها و مقدارهای Slave_1_add و رSlave_2_add را در برنامه مستر تغییر دهید. آدرس اسلیوها باید طوری باشد که با مقدار _data ارسالی برابر نشود.
سلام کد شما را کمی تغییر دادم. در برنامه مستر به جای ارسال رشته A و B، یک بایت با مقدار 250 برای اسلیو 1 و مقدار 251 برای اسلیو 2 ارسال می شود. در اسلیوها پس از دریافت بایت مربوط به هرکدام، عدد متغیر بایت _data که مقدار آن در اسلیو 1 برابر با 20 و در اسلیو 2 برابر با 40 است، برای مستر ارسال می شود. وقت نشد برنامه را آزمایش کنم. لطفا نتیجه را اعلام فرمایید
برنامه مستر
کد:
$regfile = "m8def.dat" $crystal = 11059200 $baud = 9600 $framesize = 40 '------------------------------------ Config Lcdpin = Pin , Db4 = Pinb.2 , Db5 = Pinb.3 , _ Db6 = Pinb.4 , Db7 = Pinb.5 , Rs = Pinb.0 , E = Pinb.1 Config Lcd = 20 * 4 Cursor Off Cls '----------------------------------- Enable Interrupts Enable Urxc On Urxc Ser_int '------------------------------------ Config Portb.0 = Output Config Portb.1 = Output Const Slave_1_add = 250 Const Slave_2_add = 251 'Config Print = Portd.2 , Mode = Set Config Portd.2 = Output Portd.2 = 1 Dim S As String * 3 Dim Flag As Bit Dim Rec_byte As Byte , Rec_byte_1 As Byte , Rec_byte_2 As Byte , Slave_select As Byte, '------------------------------------- Do Slave_select = Slave_1_add Portd.2 = 1 Waitms 1 Printbin Slave_select Toggle Portb.0 Portd.2 = 0 Waitms 500 Locate 1 , 1 Lcd "Received 1: " If Flag = 1 Then Reset Flag S = Str(rec_byte_1) S = Format(s , "000") Lcd S Else Lcd "ERR" End If '------------------------------------------- Slave_select = Slave_2_add Portd.2 = 1 Waitms 1 Printbin Slave_select Toggle Portb.0 Portd.2 = 0 Waitms 500 Locate 2 , 1 Lcd "Received 2: " If Flag = 1 Then Reset Flag S = Str(rec_byte_2) S = Format(s , "000") Lcd S Else Lcd "ERR" End If Loop End '------------------------------------------------- Ser_int: Rec_byte = Udr Select Case Slave_select Case Slave_1_add : Rec_byte_1 = Rec_byte Set Flag Case Slave_2_add : Rec_byte_2 = Rec_byte Set Flag End Select Return
کد:
$regfile = "m8def.dat" $crystal = 11059200 $baud = 9600 '------------------------------------ Config Lcdpin = Pin , Db4 = Pinc.2 , Db5 = Pinc.3 , _ Db6 = Pinc.4 , Db7 = Pinc.5 , Rs = Pinc.0 , E = Pinc.1 Config Lcd = 16 * 2 Cursor Off Cls '------------------------------------ Enable Interrupts Enable Urxc On Urxc Ser_int Config Portb.0 = Output Config Portb.1 = Output Config Single = Scientific , Digits = 1 Const Slave_add = 250 'Config Print = Portd.2 , Mode = Set Config Portd.2 = Output Portd.2 = 0 Dim Flag As Bit Dim Rec_byte As Byte , _data As Byte _data = 20 Do Locate 1 , 1 Lcd Rec_byte ; " " Locate 2 , 1 Lcd _data ; " " If Flag = 1 Then Reset Flag Waitms 100 Portd.2 = 1 Waitms 1 Printbin _data Portd.2 = 0 End If Loop End '--------------------------------------- Ser_int: Rec_byte = Udr If Rec_byte = Slave_add Then Set Flag Return
کد:
$regfile = "m8def.dat" $crystal = 11059200 $baud = 9600 '------------------------------------ Config Lcdpin = Pin , Db4 = Pinc.2 , Db5 = Pinc.3 , _ Db6 = Pinc.4 , Db7 = Pinc.5 , Rs = Pinc.0 , E = Pinc.1 Config Lcd = 16 * 2 Cursor Off Cls '------------------------------------ Enable Interrupts Enable Urxc On Urxc Ser_int Config Portb.0 = Output Config Portb.1 = Output Config Single = Scientific , Digits = 1 Const Slave_add = 251 'Config Print = Portd.2 , Mode = Set Config Portd.2 = Output Portd.2 = 0 Dim Flag As Bit Dim Rec_byte As Byte , _data As Byte _data = 40 Do Locate 1 , 1 Lcd Rec_byte ; " " Locate 2 , 1 Lcd _data ; " " If Flag = 1 Then Reset Flag Waitms 100 Portd.2 = 1 Waitms 1 Printbin _data Portd.2 = 0 End If Loop End '--------------------------------------- Ser_int: Rec_byte = Udr If Rec_byte = Slave_add Then Set Flag Return
دیدگاه