Atmel 8051, Portpin permanent überwachen!

Gast #783370
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
Gast #783397
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... :(
#783402
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
Gast #783409
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
Gast #783442
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.
#783478
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.