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
falls es in C geschrieben ist, mußt du die entsprechende Funktion vor der ISR deklarieren.
sorry, es ist in Assembler geschrieben! etwa so: org 0 goto init ******************************** org 4 isr: reti *********************** *********************** org 100 init: .... ... ... loop: goto loop ***********************
und wo ist dein UP-Aufruf? Wie soll dir einer helfen, wenn du hier ein Gerippe reinstellst?
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 ***********************
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...
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.
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)
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.