Forum: Mikrocontroller und Digitale Elektronik Atmel 8051, Portpin permanent überwachen!


von David (Gast)


Lesenswert?

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

von Roland (Gast)


Lesenswert?

Interupt auf dem Portpin aktivieren und in IRQ Routine laufen!

mfg
Roland

von David (Gast)


Lesenswert?

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... :(

von David (Gast)


Lesenswert?

* Alles was ich bei Google finde hilft mir bis jetzt nicht viel weiter

//Edit Funktion nicht gefunden -.-

von Roland P. (pram)


Lesenswert?

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

von David (Gast)


Lesenswert?

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

von florian (Gast)


Lesenswert?

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.

von David M. (md2k7)


Lesenswert?

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
Noch kein Account? Hier anmelden.