Forum: Mikrocontroller und Digitale Elektronik Bascom, URXC, RS232 und Fehlermeldung


von jojansen (Gast)


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

von jojansen (Gast)


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

von André K. (andre-)


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é

von jojansen (Gast)


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

von André K. (andre-)


Lesenswert?

Naja, dann streich das "onrxd" aus meiner Erklaerung. Das Prinzip
bleibt das gleiche :). Der Compiler hat sich schon eine ISR gebastelt
und weiss nun nicht, was er mit noch einer anstellen soll.

Beste Gruesse,
André

von jojansen (Gast)


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

von André K. (andre-)


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é

von jojansen (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.