mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pic Frage!


Autor: Fabian Züsli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

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

Autor: Fabian Züsli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, es ist in Assembler geschrieben!

etwa so:


org 0
goto init

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


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

loop: goto loop

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

Autor: crazy horse (Gast)
Datum:

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

Autor: Fabian Züsli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Autor: Jangomat (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jangomat (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fabian Züsli (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian Züsli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Ralf


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

Autor: Manfred Glahe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian Züsli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir hat's geklappt! Ich hab ein Return Befehl drin!

Autor: Manfred Glahe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiers mal mit dem Code aus Deinem Postig!

Autor: Fabian Züsli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.