mikrocontroller.net

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


Autor: David (Gast)
Datum:

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

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interupt auf dem Portpin aktivieren und in IRQ Routine laufen!

mfg
Roland

Autor: David (Gast)
Datum:

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

Autor: David (Gast)
Datum:

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

//Edit Funktion nicht gefunden -.-

Autor: Roland Praml (pram)
Datum:

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

Autor: David (Gast)
Datum:

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

Autor: florian (Gast)
Datum:

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

Autor: David Madl (md2k7)
Datum:

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

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.