Bascom, URXC, RS232 und Fehlermeldung

Gast #351730
Lesenswert?

Hallo,
ich stehe etwas auf dem Schlauch und bestimmt könnt ihr mir weiter
helfen. Mit einer IRQ Routine möchte ich von der UART Daten
entgegennehmen und dann weiter verarbeiten. Probieren tu ich es damit:

Config Serialin = Buffered , Size = 6 , Cts = Pind.7 , Rts = Pind.6 ,
Threshold_full = 6 , Threshold_empty = 0
On Urxc Abfrage
Enable Urxc
Enable Interrupts

Do
'Hauptprogramm
Loop

Abfrage:
'was auch immer zu tun ist
Return

Vom Compiler bekomme ich für die Zeile "On Urxc Abfrage" die
Fehlermeldung: "Error: 249 Line: soundso ISR already defined (ONRXD)
in File: d:\blah.bas"

Ich gebe zwischendrin noch Daten zum Debuggen per "Print" aus.
Den IRQ "ONRXD" habe ich aber nirgendwo (wissentlich) verwendet bzw.
definiert.
Idee?
:-) Johannes
Gast #351731
Lesenswert?

Was ich vergaß dazu zu schreiben. Alle Variablen sind deklariert, Fuses
funktionieren, Der Rest vom Programm tut auch so, wie er soll und am
Ende steht auch ein "End".
Der Controller ist ein Mega 16 mit 16MHz Takt. Die Bascom version ist
die 1.11.8.3.
:-) Johannes
#351732
Lesenswert?

Das kann so nicht klappen, weil der Compiler wegen deines "config
serialin" intern ja schon ein "on urxc" generiert hat ("on urxc
onrxd"), somit 2 davon vorhanden sind und er nun nicht weiss, welche
Sprungadresse er denn an den Interruptvektor schreiben soll. Deine Sub
"Abfrage" oder seine "onrxd", in der der oben definierte Buffer
gefuellt wird. Das ganze ist eigentlich so angelegt, dass du eben keine
eigene URXC Isr mehr benoetigst (das ist der Sinn des ganzen Befehls).
Stattdessen sollst du mit Ischarwaiting pollen, bis da mal was im
Buffer sitzt. Siehe dazu auch die Hilfe.

Ich fuer meinen Teil halte diesen Befehl fuer kompletten Unsinn und
habe ihn bisher auch in keinem Programm verwendet.

Beste Gruesse,
André
Gast #351733
Lesenswert?

Nein, bin ich blöd.....
"ONRXD" hieß die IRQ Routine im Laufe meiner Experimente. Die
Fehlermeldung in diesem Fall heißt nun:"
Error: 249 Line: soundso ISR already defined (Abfrage)
in File: d:\blah.bas".
:-) Johannes
Gast #351735
Lesenswert?

Du warst schneller als ich mit meiner Entdeckung ;-)
Das heist dann doch, daß ich 'Config Serialin' lassen muß, um die
Abfrage in einer IRQ machen zu können, oder, daß ich um das Pollen
nicht herum komme?
'Serialin' in Verbindung mit einem IRQ wäre das beste...... ich
wollte den sendenden PC mit RTS/CTS in Schach halten.
:-) Johannes
#351736
Lesenswert?

Wenn du Serialin laesst, dann hast du selbst keinen Zugriff auf die ISR.
Stattdessen bastelt der Compiler da die eigentliche Empfangsroutine
rein.

"lassen muss" kann auch "sein lassen muss" heissen, das verwirrt
mich gerade etwas... Wenn dem so ist, dann: ja. Wenn du es dennoch
beibehalten moechtest, ist pollen angesagt.

Alternativ kannst du die ISR aus dem AVR-Studio kopieren (*.hex oeffnen
und die Routine als Asm in dein Programm einfuegen. Dann kannst du den
Namen der ISR selbst festlegen und sogar noch eigene Sachen mit
reinpacken.

Beste Gruesse,
André
Gast #351737
Lesenswert?

Mal eine ganz blöde Frage, ist es denn schlimm, wenn mir der Compiler da
was baut? Ich habe zumindest die Hilfe noch nicht ganz kapiert, weil da
wohl was fehlt. Das Beispiel für die ISR Geschichte ist zwar
angekündigt (NOW remove the remarks from line 11 and 18), aber da steht
nichts vernünftiges was auf Interrupts hinweist.
Ansonsten kann ich das Beispiel mal aus dem AVR Studio verwenden.
BTW, wenn Dich etwas verwirrt, kann das auch an meinem Bier liegen ;-)

:-) Johannes

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren