Dieses AVR-Basic auf dem AVR644p kommuniziert über die serielle Schnittstelle mit dem Consolenprogramm und der Tastatur vom PC:
http://www.mikrocontroller.net/topic/177030#new
Die Kommunikation funktioniert mit der Console bei mir : Atmega644 - Pc.
Mit einem Windowscreen wäre es um einiges schwieriger , Text auszutauschen, darzustellen, scrollen usw.
Die Text/Edit-Fenster sind da nicht sehr einfach zu händeln.
Das einzige, die Serielle Schnittstelle wird über ein kleines Fenster eingestellt.
Gruss and die Hardwaregang des Atmegas
Code: Alles auswählen
OpenConsole()
EnableGraphicalConsole(1)
Global *datspeicher.l,datlaenge.l,geladen.l,zaehler.l,lauf.l
Global text1.s,text2.s,datei.s
Global text_s.s,port.l,s_byte.c,aa.l,itext.s,itext1.c
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Declare lade_datei()
Declare uebertrage()
Enumeration
#Window_0
#Button_0
#Button_1
#Button_2
#Button_3
#String_0
#String_1
#datei_0
EndEnumeration
port=-1
OpenWindow(#Window_0, 400, 150, 250,100, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
SetCurrentDirectory("data/")
ButtonGadget(#Button_1, 10,10, 80, 22, "Seriell ein")
ButtonGadget(#Button_2, 10,40, 80, 22, "Seriell aus")
StringGadget(#String_0, 100, 10, 120, 22, "")
Repeat
Event = WaitWindowEvent(1)
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Button_1
If port=-1
port=OpenSerialPort(#PB_Any, "COM4", 57600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 17000,17000)
If port
text2=""
text2 + "...geöffnet "+Str(port)
SetGadgetText(#string_0, text2)
Else
text2 + "...nichts"
SetGadgetText(#String_0, text2)
port=-1
EndIf
EndIf
EndIf
If EventGadget = #Button_2
If port > 0
CloseSerialPort(port)
text2=""
text2 + "...geschlossen"
SetGadgetText(#string_0, text2)
port=-1
EndIf
EndIf
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
itext = Inkey()
If port > 0
While AvailableSerialPortInput(port)
ReadSerialPortData(port, @s_byte, 1)
If aa > 79
PrintN("")
aa=0
ElseIf s_byte =13
PrintN("")
aa=0
Goto weiter
ElseIf s_byte =10
Goto weiter
EndIf
If s_byte=35
uebertrage()
Goto weiter
EndIf
Print(Chr(s_byte))
aa=aa+1
weiter:
Wend
If itext <> ""
If aa > 79
PrintN("")
aa=0
ElseIf itext=Chr(13)
PrintN("")
aa=0
Goto weiter1
EndIf
aa=aa+1
weiter1:
WriteSerialPortData(port, @itext, 1)
EndIf
EndIf
ForEver
End
Procedure uebertrage()
text1=Input()
lade_datei()
Delay(500)
If port > 0 And geladen=1
lauf=0
While lauf < datlaenge
itext1=PeekB(*datspeicher+lauf)
If itext1=13
lauf=lauf+1
EndIf
WriteSerialPortData(port, @itext1, 1)
lauf=lauf+1
Wend
itext1=27
WriteSerialPortData(port, @itext1, 1)
EndIf
EndProcedure
Procedure lade_datei()
geladen=0
If ReadFile(#datei_0, text1+".bas")
datlaenge = Lof(#datei_0)
*datspeicher = AllocateMemory(datlaenge)
ReadData(#datei_0, *datspeicher, datlaenge)
itext1=35
WriteSerialPortData(port, @itext1, 1)
Else
PrintN("nix...")
itext1=27
WriteSerialPortData(port, @itext1, 1)
ProcedureReturn #datei_0
EndIf
CloseFile(#datei_0)
geladen=1
EndProcedure