Ich habe das mal auf das Notwendigste abgespeckt:
Sender:
Code:
$regfile = "m128def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 20
$framesize = 40
$baud = 9600
Config Pinc.6 = Output
Config Pine.2 = Output
Config Graphlcd = 240 * 64 , Dataport = Portd , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
Dim A As Byte
Bl Alias Portc.6
Rs485 Alias Porte.2
Bl = 1
Rs485 = 1 'Senden
Cursor Off
Cls
Locate 1 , 1
Lcd "RS485 Sender"
A = 128
Do
Printbin A
Waitms 500
Loop
End
Empfaenger:
Code:
$regfile = "m128def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 20
$framesize = 40
$baud = 9600
Config Pinc.6 = Output
Config Pine.2 = Output
Config Graphlcd = 240 * 64 , Dataport = Portd , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
Rs485 Alias Porte.2
Enable Interrupts
Enable Urxc
On Urxc Isrlabel
Dim A As Bit , Db As Byte
Bl Alias Portc.6 ' Hintergrundbeleuchtung LC-Display
Bl = 1
A = 0
Rs485 = 0 'Empfangen
Cursor Off
Cls
Locate 1 , 1
Lcd "RS485 Empfaenger"
Do
If A = 1 Then
Locate 4 , 1
Lcd Db
A = 0
End If
Loop
End
Isrlabel:
Db = Udr
A = 1
Return
Es wird nur ein einziges Byte (128) uebertragen. Sobald der UART ein Zeichen empfaengt wird ein Interrupt ausgeloest. In der Urxc-Isr wird dann das Byte ausgelesen (Db=UDR). Und das war's dann auch schon. Eigentlich total simpel.
Mit freundlichen Gruessen
Digitali
Lesezeichen