Forum: Mikrocontroller und Digitale Elektronik Pic Frage!


von Fabian Züsli (Gast)


Lesenswert?

Hi

Ich möchte beim Pic 16F84 Controller, in einer Interrupt-Routine ein 
Unterprogramm aufrufen! Beim compilieren gibt es immer ein Fehler, und 
zwar, dass er das Unterprogramm nicht findet!
Wie muss ich Initialisierung+Hauptprogramm, Service Routine und 
Unterprogramm anordnen, damit ich erfolg habe???

Vielen Dank

von crazy horse (Gast)


Lesenswert?

falls es in C geschrieben ist, mußt du die entsprechende Funktion  vor 
der ISR deklarieren.

von Fabian Züsli (Gast)


Lesenswert?

sorry, es ist in Assembler geschrieben!

etwa so:


org 0
goto init

********************************
org 4
isr:


reti
***********************
***********************
org 100
init:
....
...
...

loop: goto loop

***********************

von crazy horse (Gast)


Lesenswert?

und wo ist dein UP-Aufruf? Wie soll dir einer helfen, wenn du hier ein 
Gerippe reinstellst?

von Fabian Züsli (Gast)


Lesenswert?

Ich hab den Original Source jetz gerade nicht bei mir sorry!
Ich möchte ja "nur" wissen, wie man ein Unterprogramm in einer Interrupt 
Routine aufruft!!!




org 0
goto init

********************************
org 4
isr:
call   unterprogramm

reti
***********************
***********************
org 100
init:
....
...
...

loop: goto loop

***********************

***********************
org 200
Unterprogramm:
....
...
...

return

***********************

von Jangomat (Gast)


Lesenswert?

Dein Gerippe ist syntaktisch falsch. Eventuell ist ja das Dein Problem, 
nachdem wir Deinen Sourcecode nicht kennen.
Setze mal einen Punkt vor Deine Direktiven (in diesem Fall "org"), also 
".org" und davor noch ein ".cseg"
Ansonsten hilft da nur der Sourcecode...

von Jangomat (Gast)


Lesenswert?

Sorry, jetzt bringe ich PIC und AVR total durcheinander. Aber Du 
anscheinend auch.
Aber beim PIC (unter MPLAB) sollte das mit dem ORG so aussehen:

Unterprogramm ORG 0x200 ;für Start-Hex-Adresse 200h


also ohne Doppelpunkt und in dieser Reihenfolge.

von Fabian Züsli (Gast)


Angehängte Dateien:

Lesenswert?

Ich weiss, dass ich AVR und PIC Befehle durcheinander bringe! Aber ich 
wollte ja nur das Prinzi rüberbringen!

Hier noch der Source Code!
Ich danke für eure  Hilfe!

Ich bekomme beim Compilieren im MPLAP Studio diesen Fehler:

Error[113]   P:\RS232 INT\RS232.ASM 147 : Symbol not previously defined 
(send_RS)

von Ralf (Gast)


Lesenswert?

Hi Fabian,

ich denke, dein Fehler liegt in der Groß- Kleinschreibung. Deine 
Funktion ist als "Send_RS" definiert und Du rufst sie mit "send"_RS auf. 
Deshalb kennt er diese Funktion nicht. Beim Assembler ist es das gleiche 
wie in C, Groß-Kleinschreibung wird beachtet. Zumindest bei MPLAB.

Gruß,

Ralf

von Fabian Züsli (Gast)


Lesenswert?

Hi Ralf


Vielen Dank! Es hat geklappt! Es war tatsächlich die Gross- 
Kleinschreibung!

von Manfred Glahe (Gast)


Lesenswert?

Hallo Fabian,
Dein Programm läuft trotzdem nicht denn Du rufst ein Unterprogramm mit 
CALL Send_RS auf und schließt dieses nicht wieder mit RETURN. Ich habs 
mal laufen lassen. Wenn man das ausklammert kommt noch ein EOF Fehler, 
d.h. das Programm hängt irgendwo fest.

MfG  Manfred Glahe

von Fabian Züsli (Gast)


Lesenswert?

Also bei mir hat's geklappt! Ich hab ein Return Befehl drin!

von Manfred Glahe (Gast)


Lesenswert?

Probiers mal mit dem Code aus Deinem Postig!

von Fabian Züsli (Gast)


Lesenswert?

Hab ich jetzt gerade gemacht!

hat funktioniert:
es kamen nur diese beiden Meldungen:


Executing: "C:\Programme\MPLAB IDE\MCHIP_Tools\mpasmwin.exe" /q /p16F84 
"asdf.asm" /l"asdf.lst" /e"asdf.err"
Message[302] P:\ASDF.ASM 118 : Register in operand not in bank 0. 
Ensure that bank bits are correct.
Message[302] P:\ASDF.ASM 124 : Register in operand not in bank 0. 
Ensure that bank bits are correct.
Loaded P:\asdf.COD
BUILD SUCCEEDED


Hast du die Include Datei richtig eingefügt?

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.