www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik kontaktprellung


Autor: Rumpelstilzchen 123 (billson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo!
ich bin dabei ein programm zu schreiben welches über einen interrupt ein 
und ausgeschaltet wird. es lässt sich zwar einschalten aber dann leider 
nicht mehr aus! ich denke dass es an der prellung des tasters liegt, nur 
weiß ich nicht wie ich das um gehen kann.
hier das wesentliche:

IT0=0;
EX0=1;
ES=1;

unsigned char einaus;

void main()
{
while(1)
{
einaus=0;
    while(einaus)
    {
    //programm...
    }
}

}

void ISRstarten ()
{
if(einaus==0)
{einaus=1;}
else
{einaus=0;}

IE0=0;

}

}

ich wäre euch wirklich dankbar wenn ihr mir dabei weiterhelfen 
könntet...
emefge

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So was macht man auch nicht im Interrupt.

Stichwort Tastenenprellung

Uberigens du brauchst fuer das gleiche Thema keine 2 Threads 
aufzumachen.

Gruss Helmi

Autor: Rumpelstilzchen 123 (billson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, dass mit den 2 threads war nicht beabsichtigt...
ich muss es leider mit dem interrupt machen weil es leider so vorgegeben 
ist.
würde es einen unterschied machen wenn ich den interrupt über 
pegeltriggerung starte anstatt per flanke?!?
mfg

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was fuer einen Prozessor hast du eigentlich ?
Sieht nach 8051 Serie aus.


Wenn es den so sein muss.

Was du tuen koenntes ist folgendes. Im Interrupt must du testen ob da 
noch weitere Impulse kommen.  Also den Pin abfragen, kurzes Delay , noch 
mal fragen und erst wenn gleich den Interrupt verlassen. So verhinderst 
du die mehrfach triggerung.

Das ist zwar nicht schoen aber probiers mal aus.

Gruss Helmi

Autor: Rumpelstilzchen 123 (billson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genaugenommen um einen 89S53.

also du meinst jetzt einfach eine kurze verzögerung einbauen?
zb eine for-schleife durchlaufen lassen um etwas zeit abzuwarten?
mfg

Autor: Teplotaxl X. (t3plot4x1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Delays in Interrupts?
Sowas kommt garnicht in die Tüde :P

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jein.

In etwa so. Also einlesen , warten ,nochmal einlesen und dann auf 
ungleichheit testen. Erst wenn gleich dann hat sich die Taste beruhigt.
(Ich nehme an es ist ein 8051 Derivat)


void ISRstarten ()
{

bit  Flag;

do {
  Flag = INT0;
  for(i=0;i<200;i++);  // Little Delay
} while (Flag != INT0);

if(einaus==0)
{einaus=1;}
else
{einaus=0;}

IE0=0;

}



Gruss Helmi

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Delays in Interrupts?
>Sowas kommt garnicht in die Tüde :P

Weiss ich auch. Aber um Rumpelstilzchen 123 mal auf die schnelle zu 
helfen.

Gruss Helmi

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.