Hallo zusammen, ich habe da mal ne Frage zum 8051 von Atmel. Gibt es die Möglichkeit folgendes anders zu überwachen?: jnb P3.2,Knopf1 mov P0, A jnb P3.2,Knopf1 cpl A jnb P3.2,Knopf1 mov A, #88 ;1.5 sec jnb P3.2,Knopf1 lcall WAIT jnb P3.2,Knopf1 jc Knopf ljmp Start Knopf1: setb c ret Ist ein kleiner Auszug vom Quelltext aus einer Ampelsteuerung die wir im Unterricht Konstruieren. Gedacht ist das ganze so, dass ich das Carry-bit setze sobald ich einen Taster (an P3.2 angeschlossen) drücke und das Programm dann an diesem Punkt halt an eine andere Stelle springt. Das Problem bei dieser Lösung ist, dass ich wenn ich den Taster drücke, nicht immer den Augenblick treffe, wo er auch abgefragt wird. Wollte daher wissen, ob ich einen Befehl einfügen kann, der den Portpin permanent überwacht und egal wann ich den Taster drücke das Programm reagiert. Mfg
Interupt auf dem Portpin aktivieren und in IRQ Routine laufen! mfg Roland
Interrupt und IRQ ? Ich versuchs mal zu googeln, aber könnte mir das mit dem Interrupt und der IRQ Routine an einen einfachen Beispiel erklären was da genau passiert ? Alles was ich bei Google gefunden hab ist die Erklärung was ein Interrupt ist... :(
* Alles was ich bei Google finde hilft mir bis jetzt nicht viel weiter //Edit Funktion nicht gefunden -.-
Hi, habt ihr das noch nicht gelernt? Im Prinzip funktioniert das genau so: > Gedacht ist das ganze so, <snip...> sobald ich einen > Taster (an P3.2 angeschlossen) drücke und das Programm dann an diesem > Punkt halt an eine andere Stelle springt. Dem Interruptcontroller sagen, er solle bitte P3.2 überwachen und dann die Interruptroutine ausführen, sobald sich am Zustand von P3.2 was ändert. Je nach Prozessor können allerdings nicht alle Pins vom Interruptcontroller überwacht werden! Die Überwachungskriterien sind auch unterschiedlich (z.B. Überwachung auf alling edge/rising edge) Gruß Roland
Nein, sonst würd ich ja auch nicht Fragen ;) Ist auch gerade mehr so das ich einen Vorgriff auf die nächsten Stunden mache(denk ich mal) Auf meinem IC steht die Bezeichnung AT89S52 24PU 0620A Habe auch einen zweiseitigen Befehlssatz zu dem µC, aber der einzige Befehl wo in der Befehlsbeschreibung das Wort Interrupt auftaucht ist bei "RETI" ([...]Interruptebene wird freigegeben) Die Frage ist jetzt eigtl, wie genau sieht denn so ein Quelltext aus... Könntest du mir nicht ein ganz einfaches,banales Beispiel geben, wie ich den Interrupt setze und in die IRQ Routine komme ? Programieren tun wir mit einer 8051.h (falls es hilft) und einem Programm, was einer unserer Lehrer selber mit Java Programmiert hat. Das übersetzt den Quellcode direkt in Assembler und hat ne Funktion zum Speichern auf dem 8051
schau dir mal das datenblatt von deinem controller an, damit du weisst welche externen pins als interrupt eingang benutzt werden können... dann den benötigten interrupt im IE (Interrupt Enable) Register aktivieren. den interrupt führt man in etwa so aus... Beispiel kommt von dem interrupt Timer Überlauf. org 0Bh ; Einsprungadresse in das Programm wenn der Interrupt ausgelöst wurde inc a mov p1,a reti RETI ist der Rücksprung aus einem Interrupt, ähnlich wie bei einem Rücksprung aus einem Unterprogramm mit RET.
Alternativ zu Pin-Interrupts: - in der Implementierung der Wait-Subroutine die Pin-Abfrage einbauen. Das ist ja das einzige, was so lange dauert, dass man es merkt - alle anderen Befehle werden schnell genug abgearbeitet. - einen Timer aufsetzen, der regelmäßig in kurzen Abständen einen Interrupt erzeugt, in dem der Pin abgefragt wird.
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.