Taster-Abfrage

Gast #112331
Lesenswert?

Hallo,

ich habe da ein Problem:
Ein Mikrocontroller vom Typ AT89S8252 soll fünf Taster nach ihren
Zuständen abfragen. Wenn Taster 1 gedrückt wird, leuchtet LED1 auf, bis
Taster 3 (Stop) gedrückt wird.

Die Ports habe ich schon mit dem Oszi durchgemessen, die sind high.

Die Taster gehen direkt auf die Ports und schalten gegen Masse.

Hier der Code:

#include 8051.H
         .org 0000H

start:         call LEDs_aus
               clr  P1.5 ;LED3 (Mitte) an
main:          jb  P1.0,fbon ;Prüfen ob Taster gedrückt. (Taster 1)
               jb  P1.4,fboff;aus (Mitte)
               sjmp main
fbon:          call LEDs_aus
               clr  P1.1
               sjmp main
fboff:         call LEDs_aus
               clr  P1.5
               sjmp main
LEDs_aus:      setb P1.1 ;LED1 aus
               setb P1.3 ;LED2 aus
               setb P1.5 ;LED3 (Mitte, Stop) aus
               setb P1.7 ;LED4 aus
               setb P3.1 ;LED5 aus
               ret
               .end

Achso, noch die Belegung:

P1.0: Taster 1 gegen Masse
P1.1: LED1
P1.2: Taster 2 gegen Masse
P1.3: LED2
P1.4: Taster 3 gegen Masse
P1.5: LED1
P1.6: Taster 4 gegen Masse
P1.7: LED2
P3.0: Taster 5 gegen Masse
P3.1: LED1


--
Ich bin ratlos.

danke für eure Hilfe schon im Voraus!

Viele Grüße,
Stephan
Gast #112334
Lesenswert?

Hallo,

erstmal sorry, ich hätte das ganze besser beschreiben müssen.

Das Ganze läuft auf dem Mikrocontroller-Board von Elektor, das mit dem
Buch "Basiskurs Mikrocontroller" geliefert wird.

Genaue Daten dazu weiß ich nicht, aber ich kann was aus dem Buch
scannen und dann online stellen, wenn das was hilft.


Zum Programmieren und flashen benutze ich TASM (bzw. das WIndows-Tool
von Elektor "TASMedit").

ATMELisp habe ich auch, ich habe schon mehrfach den µC damit löschen
müssen, da sogar eine LED geleuchtet hat, als ich den Controller den
Port setzen lies.

Ich hab mit dem Oszi die Ports gemessen, an denen die Taster hängen und
nur dann, wenn die Taster nicht gedrückt waren. Die Ports waren dann
high, was ja wohl zur Abfrage richtig ist????

Liegt es vielleicht daran, dass ich die Taster ohne Pull-Up oder
Pull-Down - Rs drangehängt habe?

Laut Datenblatt hat der Controller an den Ports 1 und 3 eingebaute
Pull-UPs.

Die ganze Schaltung soll als Schrittmotorschaltung mit TCA 3727
fungieren. Hier die Anordnung der Taster:
------------------------------
| o  || o  || o  || o  || o  |
|    ||    ||    ||    ||    |
------------------------------
Schnell|Langs.|Stop|Langs.|Schnell|
  Rückwärts   |    |  Vorwärts


Belegung der Taster und LEDs siehe in meinem vorherigen Post.


Kann es sein, dass der Controller defekt ist?

Ich habe hier noch einen Ersatz.


Danke für Eure Hilfe und Mühe!

Stephan
Gast #112335
Lesenswert?

Schau dir das mal an:
main:          jb  P1.0,fbon ;Prüfen ob Taster gedrückt. (Taster 1)
               jb  P1.4,fboff;aus (Mitte)

jb P1.0, also wenn P1.0 auf High liegt, was der Fall ist wenn der
Taster nicht gedrückt wird, wird die LED umgeschaltet. Das muss jnb
heißen, denn der Taster verursacht einen LowPegel.

Und zum Thema Stack, Interrupvektoren usw.
@Denis Gérard
Bisher nur AVRs programmiert, oder ?
Der 8051 benötigt keine Stackinitialisierung, das wird beim Reset
automatisch erledigt...
Gast #112336
Lesenswert?

Hallo Benedikt,

noch eine Frage: B. Kainka schreibt in seinem Buch auch jb PX,X
und seine Taster gehen an Masse?? Wie geht das?

NOch was: Brauche ich keine Pull-Up oder Pull-Down Widerstände?

VG,
Stephan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren