Witam!
Kod: Zaznacz cały
$regfile = "reg51.dat"
$crystal = 11059200
Dim A As Byte , S As String * 16 , I As Byte , Dum As Byte
Open "Com3.1:9600" For Output As #1
Open "Com3.0:9600" For Input As #2
P3.3 = 0
Wait 1
P3.3 = 1
Do
Get #2 , A
If A = 100 Then *)nadajemy
P3.3 = 0
Do
S = "test"
Dum = Len(s)
For I = 1 To Dum
A = Mid(s , I , 1)
Put #1 , A
Next
Wait 1
Loop
End If
Loop
End
Przy pomocy visual basica wysyłam układowi komendę startu "100" *) i układ wtedy nadaje, problem polega na tym, że zamiast upragnionego napisu "test" otrzymuje dziwne znaczki (krzaczki?pałeczki?).
Z moich obserwacji doszedłem do wniosku skoro, dane układ odbiera prawidłowo to chyba coś sprzęt szwankuje?
Pozdrawiam.
Witam,
pozwoliłem sobie zmienić znacznie wygląd twojego kodu ( nawet bardzo)
jest to procedura odbioru z rs 232 bez "przerwania ". strasznie namieszałeś.
Po co używasz programowej obsługi transmisji jeżeli masz sprzętową?
Pomińmy to i tak jak widać to poniżej
z VB musisz wysłać :
MSComm1.Output = "100" & vbcr
zwróci ci "Test" (If Rozkaz = "100" Then Print "Test")
wypróbuj też inne rozkazy:
If Rozkaz = "ABC" Then Print "wyslales ABC"
If Rozkaz = "200" Then Print "wyslales DEF"
If Rozkaz = "END" Then Print "wyslales Koniec"
$crystal = 11059200
dim znak as byte
dim odebrane as string * 16
dim rozkaz as string * 3
dim licznik as integer
odebrane =""
licznik = 0
Do
Znak = Inkey() ' czeka na znak z portu szeregowego
incr licznik
If licznik >= 2000 Then Exit Do ' licznik który spowoduje wyjście z procedury odbiorczej po przepelnieniu się zmiennej tzw Time out
If Znak > 0 Then
odebrane = odebrane + Chr(Znak) 'jeśli wynik odbioru większy od "0" to dodaje znaki do zmiennej typu string
End If
Loop Until Znak = 13 ' enter kończy odbiór transmisji
rozkaz = mid(odebrane,1,3)
if rozkaz = "100" then print "Test"
if rozkaz = "ABC" then print "wyslales ABC"
if rozkaz = "200" then print "wyslales DEF"
if rozkaz = "END" then print "wyslales Koniec"
print "Odebrałem dane " ; odebrane
odebrane =""
licznik = 0
rozkaz = ""
End
procesor zwróci ci dane (max 16 znaków, możesz skrócić lub zwiększyć)
wysyłaj do niego dane tekstowo np " wykonaj1" lub w postaci "hex"
zawsze dostaniesz zwrot tego co wysłałeś , jeżeli nie chcesz tego to skasuj linijkę "print "Odebrałem dane " ; odebrane"
życzę miłej zabawy
Pozdrawiam