Wie muss ich im asembler schreiben, dass mit zb. der pinc3 einen Interrupt auslöst ,und das dan bei reti beendet? wer kann mit weiterhelfen. Scheint für euch einfach für mich leider nicht, danke
Meine Glaskugel sagt: 'reti'? Das kann kein PIC sein -> Da kann ich leider nicht direkt helfen, sondern nur den Tip 'Datenblatt' bzw. Application Notes' geben. Andreas
Anscheinend gehts um einen AVR. Aber WELCHEN??? Du kannst nicht an jedem Pin bei Pegelwechsel einen Interrupt festlegen, nur an denen INT0, INT1, INT2 oder PCINT (Pin-Change-Interrupt, können nicht alle AVRs) steht. Für genaueres mußt Du uns schon mitteilen welchen AVR (oder µC) Du hast und was Du vorhast. MfG Andi
Und mal über den "Stackpointer" sachkundig machen, dessen Initialisierung wird von Anfängern oft vergessen. ...
Schritt 1: Wie Hannes sagt, Stackpointer initialisieren. Schritt 2: Seinem "normalen" Programm(start) ein schönes Label geben, z.B. init: Schritt 3: Am Anfang des CODE (Befehle etc.) hinschreiben: .cseg .org 0 rjmp init Schritt 4: Im Datenblatt schauen, wo der InterruptVEKTOR des Interrupts ist, oder wie dieser Vektor in der Include heißt. Dann fügste unter das rjmp init diese Adresse ein: .org 0x02 Schritt 5: Unter dieses .org kömmt ein Sprungbefehl zu deiner ISR (InterruptServiceRoutine), die mit RETI abgeschlossen wird. Schritt 6: Bevor du frägst, warum kein IRQ kommt: Schalte das I-Flag mit "sei" ein. dave
Vielen Dank ihr 4, andy und dave kommen meiner frage zimlich nahe. Ich mus mit einer Taste einen Interrupt auslösen und eine Schleife verlängern, bzw mit einer zweiten Taste diese dan verkürzen.Habe aber keine Ahnung gehabt welche pin mann nehmen kann bzw wie ich dem pin mitteile das er den interrupt auslösen darf. Ein AT 8515 ist es.Es ist eben ein Problem, es so zu schreiben das der Asembler es auch versteht. in VB6 ist es doch was anderes.hi Danke
Mechanischer Taster am Int-Eingang gibt nur Probleme da mechanische Taster prellen. Frage den Taster lieber in einem Timer-Interrupt ab. Das hat auch noch nebenbei den Vorteil, dass jeder Eingang benutzt werden kann. Suche mal im WIKI nach "entprellung", da erfährst du mehr. ...
@Dave: Mal ketzerisch: was platziert der Assembler/Programmer wohl an die undefinierten Stellen, die mit .ORG übersprungen wurden? Es gibt schon recht risikoreiche Methoden, ein Wort an die richtige Stelle zu kriegen. mfg gerd
Da steht bei mir grundsätzlich RETI drin. Auch wenn einige Profis das anders sehen. (Das liegt aber auch daran, dass meine Eigenbau-ISP-Software nicht wirklich Hex-Dateien lesen kann, sondern nur lineare Adressbereiche ohne Lücken, beginnend bei 0.) ...
Das mit dem RETI hab ich mir abgewöhnt, denn die AVR, bei denen der Speicher mehr als 16kb? oder so hat, ist das Platz für ein RETI+NOP oder halt ein JMP. Natürlich kann der Assembler da was reinbaun, dazu musst du das ihm aber auch sagen. Bei Segmentüberschreitungen wird auch gleich gemäckert, sonst machste halt letzer Vektor + 4 ne .ORG. Wie würde Herr Ketzer das machen G? dave
Herr Ketzer empfiehlt, im Interrupt-Bereich auf die Verwendung von ORG zu verzichten und sauber alle Ints mit einem RETI (ggfs. plus NOP) abzuschließen. Bis auf wenige Ausnahmen löscht ein versehentliches Anspringen eines Int wenigstens das zugehörige Flag (Ausnahme: TX-Buffer-Empty-Int bei der SIO). Aber ich bin da etwas missverstanden worden. Der Assembler platziert in mit ORG übersprungene Zellen entweder Nullen (NOP) hin oder er gibt im Hexfile eine neue Zeile mit entsprechend neu eingestellter Startadresse aus. Die ISP-Software macht, wenn sie korrekt nach Intel-Hex-Definition arbeitet, an dieser Stelle einen Sprung und programmiert die dazwischen liegenden Zellen nicht. Nicht programmierte Zellen haben aber nach dem Löschen des Flash den Inhalt FFFF. Merke also: man kann eine Zelle nicht nicht programmieren! Besser ist daher der Verzicht auf ORG im Int-Bereich, und dem Assembler zu sagen, was man gerne an die nicht benötigten Stellen haben möchte. So, jetzt habe ich meinen 40-Zeilen-Bonus fast schon verbraten. mfg gerd
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.