PIC controller: senden und empfangen per RS232

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
thomas223
Beiträge: 8
Registriert: 03.02.2008 21:24

Beitrag von thomas223 »

Hallo ich habe da eine noch etwas ähnliche frage ich habe einen PIC controller dieser schickt mir alles was ich ihm über RS232 sende wider zurück. das funzt mit einem terminal prog schon ganz gut nun würde ich gern so ein terminal selber schreiben um ein eistig in Basic zu findenaber die meisten beisiele hier sind noch in v3.xx und leider nicht in 4.2 und die hilfe brinkt mich nicht weiter!
wie kann ich senden und empfangen in 4.2?
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Das hier sollte funktionieren:

Code: Alles auswählen

; Öffne COM1 im 8N1 Modus mit der Baudrate 9600
If OpenSerialPort(0, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 256, 256)
  ; Schreibe "Hallo, Welt!"
  WriteSerialPortString(0, "Hallo, Welt!")
  
  ; Warte auf Datensatz
  While AvailableSerialPortInput(0) = 0
    Delay(10)
  Wend
  Delay(10)
  
  ; Lese Datensatz und gib ihn aus
  Text.s = Space(AvailableSerialPortInput(0))
  ReadSerialPortData(0, @Text, AvailableSerialPortInput(0))
  Debug Text
  
  CloseSerialPort(0)
Else
  Debug "ERROR - Couldn't open COM1"
EndIf
Ansonsten kannst du ja noch selbst in der Hilfe (Taste F1 im PureBasic Editor) unter "Serial Port" nachschauen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Macros
Beiträge: 1314
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Ich arbeite gerade in einer Firma an genau dem Problem,
eine Konsolenoberfläche für RS232 mit eier Gui zu ersetzen.

Dabei habe ich mir erstmal selbst ein Terminal geschrieben,
um die Funktionen auszutesten.

Code: Alles auswählen

baud=115200
OpenSerialPort(1,"COM1",baud,#PB_SerialPort_EvenParity,8,1,#PB_SerialPort_NoHandshake,1024,1024)
OpenWindow(1,0,0,500,500,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(1))
  StringGadget(1,5,5,50,25,"")
  ButtonGadget(0,60,5,40,25,"send")
  ButtonGadget(3,110,5,40,25,"clear")
  TextGadget(99,200,5,100,15,"")
  EditorGadget(2,5,40,490,400,#PB_Editor_ReadOnly)

  Repeat
    event=WaitWindowEvent(20)
    Select event
      Case #PB_Event_CloseWindow
        CloseSerialPort(1)
      Case #PB_Event_Gadget
        SetGadgetText(99,Str(AvailableSerialPortOutput(1)))
        Select EventGadget()
          Case 0
            a$=GetGadgetText(1)
            If Len(a$)=1
              WriteSerialPortData(1,@a$,1)
              text$=GetGadgetText(2)+a$
            Else
              a$=Chr(Val(a$))
              WriteSerialPortData(1,@a$,1)
              text$=GetGadgetText(2)+"ASCII: "+Str(Asc(a$))
            EndIf
            SetGadgetText(2,text$+Chr(10))
            SetGadgetText(1,"")
            SetActiveGadget(1)
          Case 3
            SetGadgetText(2,"")
        EndSelect
    EndSelect
    If IsSerialPort(1)
      input=AvailableSerialPortInput(1)
      If input
        a$=Space(input)
        ReadSerialPortData(1,@a$,input)
        text$=GetGadgetText(2)+a$
        SetGadgetText(2,text$)

      EndIf
    EndIf
  Until event=#PB_Event_CloseWindow
Ein paar Hinweise:
  • Scrolling ist noch nicht drinnen
  • Das Programm sendet immer nur Einzelzeichen.
    (Da in meinem Fall nur diese gebraucht werden,
    zwei oder mehr Buchstaben stehen für einen ASCII Code)
  • Die Daten der Com Verbindung musst du natürlich anpassen.
  • Ich hab das Programm jetzt nicht nochmal angeschaut
    kann also komische Variablen usw enthalten ;)
Bild
Antworten