DEBOUNCE/de

From MCS Wiki AVR
Jump to: navigation, search

Contents

Funktion

Entprellen eines Portpins, an den ein Taster angeschlossen ist.

 

 

Syntax

DEBOUNCE Px.y , state , label [ , SUB]

 

 

Anmerkungen

Px.y

Portpin wie zum Beispiel PINB.0

state

0 für Sprung wenn der Portpin PINx.y low ist , 1 für Sprung wenn der Portpin PINx.y High ist.

label

Sprungmarke zu der gesprungen werden soll wenn der angegebene Zustand erkannt wird.

SUB

Sprungmarke ist Unterprogramm.

 

Wenn optional SUB angegeben wird dann wird ein GOSUB zu der Sprungmarke statt eines GOTO ausgeführt.

 

Der DEBOUNCE-Befehl prüft den Zustand des angegebenen Pins. Wenn die Bedingung (0 bzw. 1) erfüllt ist dann wird 25ms gewartet und dann wird die Bedingung noch einmal geprüft. Dadurch wird das Prellen abgewartet.

 

Wenn die Bedingung immer noch erfüllt ist dann erfolgt ein Sprung zur angegebenen Sprungmarke.

 

Wenn die Bedingung nicht wahr ist oder der Logik-Level am Pin nicht dem angegebenen Level entspricht dan wird die nächste Zeile ausgeführt.

 

Wenn DEBOUNCE wieder ausgeführt wird dann muss der Zustand des Tasters zwischendurch im Grundzustand gewesen sein bevor ein Sprung erfolgen kann. Wenn man zum Beispiel auf Low wartet und der Pin auf Low geht dann muss der Pin einmal wieder High sein bevor ein neuer Low-Level einen Sprung auslösen kann.

 

Jeder DEBOUNCE-Befehl der einen anderen Port benutzt verbraucht 1 Bit des internen Speichers um den Zustand zu speichern. Da die Bits im SRAM gespeichert werden bedeutet das, dass auch bei Benutzung nur eines Pins/Bits ein Byte Speicher verbraucht wird um das Bit zu speichern.

 

DEBOUNCE wartet nicht bis der Eingabewert die angegebene Bedingung erfüllt. Man kann BITWAIT benutzen wenn man warten möchte bis ein Bit einen bestimmten Wert hat.

 

DEBOUNCE hält das Programm also nicht an während ein BITWAIT das Programm anhält bis der Wert erreicht ist. Man kann BITWAIT und DEBOUNCE kombinieren indem man ein BITWAIT vor ein DEBOUNCE schreibt.

 

 

Siehe auch

CONFIG DEBOUNCE , BITWAIT

 

 

Beispiel


'-----------------------------------------------------------------------------------------
'name : deboun.bas
'copyright : (c) 1995-2005, MCS Electronics
'purpose : demonstrates DEBOUNCE
'micro : Mega48
'suited for demo : yes
'commercial addon needed : no
'-----------------------------------------------------------------------------------------
 
$regfile = "m48def.dat" ' Mikrocontroller
$crystal = 4000000 ' Taktfrequenz
$baud = 19200 ' Baudrate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
 
Config Debounce = 30 'Wenn der CONFIG-Befehl nicht benutzt wird dann wird der Standardwert 25ms benutzt aber wir überschreiben hier den Standardwert mit 30ms. 
 
 
'Debounce Pind.0 , 1 , Pr 'Sprung wenn High (1)
Debounce Pind.0 , 0 , Pr , Sub
Debounce Pind.0 , 0 , Pr , Sub
'                      ^----- Sprungmarke
'                  ^---------- Springen wenn Pind.0 auf low (0) geht
'          ^----------------  Pind.0 untersuchen
 
'Wennn Pind.0 auf low geht dann zum Unterprogramm Pr springen
'Pind.0 muss wieder auf High gehen bevor der Sprung wieder stattfindet
 
Debounce Pind.0 , 1 , Pr 'Sprung nicht zu Unterprogramm
Debounce Pind.0 , 1 , Pr 'Ergibt return ohne gosub
End
 
Pr:
Print "PIND.0 war/ist low"
Return

Languages   English Deutsch  
Personal tools
Namespaces
Variants
Actions
Navigation
In other languages
Language