DEBOUNCE/de
m (1 revision) |
(→Beispiel) |
||
(6 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
− | + | = <span class="f_Header">Funktion</span> = | |
− | + | Entprellen eines Portpins, an den ein Taster angeschlossen ist. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
Line 15: | Line 15: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | = <span class="f_Header"> | + | = <span class="f_Header">Anmerkungen</span> = |
<div style="padding: 0px; margin: 0px 0px 0px 4px;"> | <div style="padding: 0px; margin: 0px 0px 0px 4px;"> | ||
{| width="563" cellspacing="0" cellpadding="1" border="1" style="border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;" | {| width="563" cellspacing="0" cellpadding="1" border="1" style="border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;" | ||
Line 23: | Line 23: | ||
| valign="top" width="87%" style="width: 473px; height: 16px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="87%" style="width: 473px; height: 16px; border: 1px solid rgb(0, 0, 0);" | | ||
− | + | Portpin wie zum Beispiel PINB.0 | |
|- style="vertical-align: top;" | |- style="vertical-align: top;" | ||
| valign="top" width="15%" style="width: 81px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="15%" style="width: 81px; border: 1px solid rgb(0, 0, 0);" | | ||
− | + | state | |
| valign="top" width="87%" style="width: 473px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="87%" style="width: 473px; border: 1px solid rgb(0, 0, 0);" | | ||
− | 0 | + | |
+ | 0 für Sprung wenn der Portpin PINx.y low ist , 1 für Sprung wenn der Portpin PINx.y High ist. | ||
|- style="vertical-align: top;" | |- style="vertical-align: top;" | ||
| valign="top" width="15%" style="width: 81px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="15%" style="width: 81px; border: 1px solid rgb(0, 0, 0);" | | ||
− | + | label | |
| valign="top" width="87%" style="width: 473px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="87%" style="width: 473px; border: 1px solid rgb(0, 0, 0);" | | ||
− | + | Sprungmarke zu der gesprungen werden soll wenn der angegebene Zustand erkannt wird. | |
|- style="vertical-align: top;" | |- style="vertical-align: top;" | ||
Line 44: | Line 45: | ||
| valign="top" width="87%" style="width: 473px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="87%" style="width: 473px; border: 1px solid rgb(0, 0, 0);" | | ||
− | + | Sprungmarke ist Unterprogramm. | |
|} | |} | ||
Line 50: | Line 51: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Wenn optional SUB angegeben wird dann wird ein GOSUB zu der Sprungmarke statt eines GOTO ausgeführt. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | 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. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Wenn die Bedingung immer noch erfüllt ist dann erfolgt ein Sprung zur angegebenen Sprungmarke. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | 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. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | 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. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | 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. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | DEBOUNCE | + | 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. |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | 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. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
Line 84: | Line 85: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | = <span class="f_Header"> | + | = <span class="f_Header">Siehe auch</span> = |
[[CONFIG DEBOUNCE|CONFIG DEBOUNCE]] , [[BITWAIT]] | [[CONFIG DEBOUNCE|CONFIG DEBOUNCE]] , [[BITWAIT]] | ||
Line 92: | Line 93: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | = <span class="f_Header"> | + | = <span class="f_Header">Beispiel</span> = |
<br/><source lang="bascomavr"> | <br/><source lang="bascomavr"> | ||
Line 104: | Line 105: | ||
'----------------------------------------------------------------------------------------- | '----------------------------------------------------------------------------------------- | ||
− | $regfile = "m48def.dat" ' | + | $regfile = "m48def.dat" ' Mikrocontroller |
− | $crystal = 4000000 ' | + | $crystal = 4000000 ' Taktfrequenz |
− | $baud = 19200 ' | + | $baud = 19200 ' Baudrate |
$hwstack = 32 ' default use 32 for the hardware stack | $hwstack = 32 ' default use 32 for the hardware stack | ||
$swstack = 10 ' default use 10 for the SW stack | $swstack = 10 ' default use 10 for the SW stack | ||
$framesize = 40 ' default use 40 for the frame space | $framesize = 40 ' default use 40 for the frame space | ||
− | Config Debounce = 30 ' | + | 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 ' | + | 'Debounce Pind.0 , 1 , Pr 'Sprung wenn High (1) |
Debounce Pind.0 , 0 , Pr , Sub | Debounce Pind.0 , 0 , Pr , Sub | ||
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 | + | 'Pind.0 muss wieder auf High gehen bevor der Sprung wieder stattfindet |
− | + | ||
− | Debounce Pind.0 , 1 , Pr ' | + | Debounce Pind.0 , 1 , Pr 'Sprung nicht zu Unterprogramm |
− | Debounce Pind.0 , 1 , Pr ' | + | Debounce Pind.0 , 1 , Pr 'Ergibt return ohne gosub |
End | End | ||
Pr: | Pr: | ||
− | Print "PIND.0 | + | Print "PIND.0 war/ist low" |
Return | Return | ||
</source><br/>{{Languages}} | </source><br/>{{Languages}} | ||
[[Category:BASCOM Language Reference/de]] | [[Category:BASCOM Language Reference/de]] |
Latest revision as of 01:43, 5 March 2013
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
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 |
---|