PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom will nicht :-(



king-sixXx
12.05.2005, 21:42
Hi Leute!

Ich muss euch jetzt mal fragen, ich weiß nicht wo das Problem liegt:

Mein Bascom Quelltext sieht so aus:


$baud = 9600


Config Portb = Output

Dim Zeichen As Byte

Zeichen = 0

Rsabfrage:
Do
Zeichen = Inkey()
Loop Until Zeichen <> 0

If Zeichen = 70 Then Gosub Machwas
If Zeichen = 80 Then Gosub Mach

Goto Rsabfrage


Machwas:
Portb.1 = 1
Goto Rsabfrage


Mach:
Portb.1 = 0
Goto Rsabfrage


Der Mega8 wartet auf das Signal von der RS232 und soll dann je nach Wert die Subroutine aufrufen... Das Signal kommt von folgendem Proggi mit Hilfe der Port.dll:



Private Sub Command5_Click()
SENDBYTE (80)
End Sub

Private Sub Command6_Click()
SENDBYTE (70)
End Sub

Sub form_load()
i = OPENCOM("COM1,9600,N,8,1") 'Schnittstelle COM1 öffnen
If i = 0 Then
i = OPENCOM("COM2,9600,N,8,1") 'Wenn COM1 belegt COM2 öffnen
End If
If i = 0 Then MsgBox ("Schnittstelle nicht geöffnet!!")
End Sub


Leider tut sich agr nicht wenn ich das VB programm laufen lasse!

Vielen Dank im Vorraus!

chr-mt
12.05.2005, 21:46
Hast du keine $crystal Befehl drin ?
Ohne den werden die Baudraten nicht richtig berechnet.

Gruß
Christopher

pebisoft
12.05.2005, 22:17
brauchst du nicht im source-code eintragen. kannste auch im menue einstellen für das jeweilige programm. jedesmal wenn das programm geladen wird, wird auch die frequenz mit reingenommen.
mfg pebisoft

Alter Knacker
12.05.2005, 22:21
das sieht doch alles bloss nach pseudocode aus ?!?`

soll man sich da jetzt auskennen?
mfg knacki

pebisoft
12.05.2005, 22:33
du kannst auch die baudrate rauslassen und im menue einstellen für das jeweilige programm.
mfg pebisoft

12.05.2005, 22:33
Vielen Dank für die Antworten!
Ich hab $crystal unter options/Compiler/crystal frquency eingestellt...

@ knacki:
Das sollte schon richtiger Code sein... Sieht das so hoffnungslos aus??

king-sixXx
12.05.2005, 22:35
Das mit dem Auto-Login geht auch nicht.... :-)

pebisoft
12.05.2005, 22:36
bascom hat so seine versteckten eigenheiten, die lernt man erst im laufe der zeit kennen. bascom ist für mich wie ein klavier. ich kann jede melodie darauf spielen. hat aber auch viel zeit gekostet. die habe ich aber als pensionär.
mfg pebisoft

king-sixXx
12.05.2005, 22:46
Das glaub ich dir gern... So viel Zeit hab ich leider nicht... Mir würde aber auch eine einfache Strophe reichen :-)

Kannst du mir einen Tipp geben woran es liegen könnte?

Mfg
Benedict

pebisoft
12.05.2005, 23:33
du brauchst bei inkey keine do-loop schleife machen. bascom bleibt da solange hängen bis eine taste gedrückt wird. mit inkey kannste keine baud-botschaft abfragen, geht nur über "input test". test ist ein string.
mfg pebisoft

PicNick
13.05.2005, 07:52
Kollege,
Gosub Machwas -----> Machwas ,,, goto ist tödlich

Auf gosub muß return kommen, sonst spinnt er sich weg.

Testen tu' erstmal mit einem Terminal, Zeichen kannst du ja mal andere nehmen (65 == "A", 66 == "B") oder so.

chr-mt
13.05.2005, 09:55
Testen kann er's auch mit seinen werten 70="F" 80= "P"
Stimmt, mit den returns hast du recht.

Dann muß aber auch hinter das Hauptprogramm ein END
Sonst spinnt er auch.

bleibt da solange hängen bis eine taste gedrückt wird. mit inkey kannste keine baud-botschaft abfragen
Inkey bezieht sich auf die serielle Schnittstelle und wartet nicht bis ein Zeichen kommt, sondern gibt eine "0" raus wenn kein Zeichen empfangen wurde.
Von daher sollte es gehen.
Hab' Inkey aber noch nie benutzt. Vielleicht irre ich mich ja auch, aber so verstehe ich das Handbuch.
Im Sim geht's auch so. Hab' nur noch LCD Befehle reingemacht, damit man was sieht ;)




$baud = 9600


Config Portb = Output
Dim Zeichen As Byte
Zeichen = 0
Rsabfrage:

Do
Zeichen = Inkey()
Loop Until Zeichen <> 0

If Zeichen = 70 Then Gosub Machwas
If Zeichen = 80 Then Gosub Mach

Goto Rsabfrage
End 'end program




Machwas:
Portb.1 = 1
Lcd "1"
Return

Mach:
Portb.1 = 0
Lcd "2"
Return



Gruß
Christopher

PicNick
13.05.2005, 11:05
Du hast definitiv recht, inkey warte nicht. Du solltest ihn aber verwenden, da der Befehl auch mit "config serialin=buffer" kooperiert. Wenn du UDR selbst liest, amputierst du ihn da.

king-sixXx
13.05.2005, 13:55
Vielen Dank für die Hinweise! ich werde es das Wochenende mal ausprobieren... Irgendwann muss es doch laufen!

Frohe Pfingsten!
Benedict

Getaco
14.05.2005, 09:15
Probiers mal hiermit.



$regfile = "m8535.dat"
$crystal = 10000000
$baud = 9600

Dim Rx_count As Byte 'ischarwaiting variabel
Dim Rx_data As Byte 'Empfangenen Daten

Config Serialin = Buffered , Size = 10

Do
Rx_count = Ischarwaiting()
If Rx_count > 0 Then
Rx_data = Inkey()
Select Case Rx_data
Case 70
Print "Habe 70 erhalten."
Case 80
Print "Habe 80 erhalten."
End Select
End If
Loop

End


getaco

king-sixXx
23.05.2005, 23:15
Hi Leute

ich hab jetzt mal beide Proggies (das von chr-mt und von Getaco) ausprobiert.
Wenn ich im Bascom Terminal "Send ASCII Character" anklicke und dann 70 oder 80 eintippe, sehe ich an der M101 Station duch das blinken der LED, dass was gesendet wird und kurz darauf wieder ein Aufleuchten... Leider wird im Terminal nix angezeigt!

Heißt das Blinken das es theoretisch funzt?!?

MFG!