Labor Industrielle Netzwerke Versuch 2

Werbung
Labor Industrielle Netzwerke
Versuch 2: Tastaturentprellung
Datum:
21.01.2014
Prof. Dr.-Ing. habil. Josef Börcsök
Vorwort zum Entprellvorgang
Im folgenden Versuch wollen wir uns mit Softwarelösungen beschäftigen, die ein
Entprellen eines Taster-Kontaktes bewirken. Mit Prellen ist gemeint, dass es bei einem Tastendruck zum mehrfachen aufeinander schlagen der beiden Tastaturkontakte kommt. Dieser Prellvorgang ist beispielsweise in der ersten Millisekunde nach
Drücken des Tasters zu bemerken, die Dauer des Prellvorganges hängt vom Federweg des Kontaktpaares ab. Durch die hohe Abtastrate des Prozessors liest der Prozessor zu Beginn des Tastendrucks Einsen und Nullen ein, die durch das Prellen
ausgelöst wurden. Diese gilt es herauszufiltern. Nach einer bestimmten Zeit geht der
Kontakt in einen kurzfristigen Ruhezustand über, der dadurch gekennzeichnet ist,
dass der Prozessor einige Einsen am Stück einliest. Diese kontinuierlichen Einsen
sollen dazu dienen, den Taster als gedrückt zu erkennen. Hierzu wird eine frei wählbare Mindestzeitspanne festgelegt, in der eine Folge von Einsen über den Eingangsport (P3IN) zu erkennen ist. Dieser Vorgang wird mittels einer kostengünstigen
Softwarelösung erreicht. Dadurch wird der Einsatz eines hardwareseitigen Tastaturcontrollers eingespart.
Voreinstellung zu den Aufgaben:

DIL Schalterstellung: 011101
Port 5.0 bis 5.7  Relais + LEDs
Relais 1
Relais 2
Relais 3
Relais 4
Relais 5
Relais 6
Relais 7
Relais 8








P5.0
P5.1
P5.2
P5.3
P5.4
P5.5
P5.6
P5.7
Pin P3.4 und P3.5: Taster 1 und Taster 2
Taste1
Taste2
 P3.4
 P3.5
2
Nassi-Shneiderman Diagramme
Um eine Programmstruktur vor dem Programmiervorgang festzulegen, ist es sinnvoll
mit Struktogrammen oder Programmablaufplänen zu arbeiten. Im Laufe der Veranstaltung sollen Sie erlernen, mit Nassi-Shneiderman-Struktogrammen umzugehen.
Das Nassi-Shneiderman Diagramm ist ein Diagrammtyp zur Darstellung von Programmentwürfen im Rahmen der strukturierten Programmierung. Die NassiShneiderman Diagramme wurde 1972/73 von Isaac Nassi und Ben Shneiderman
entwickelt und in der DIN 66261 genormt. Mit dieser Struktur lassen sich größere
Programme in kleineren Teilproblemen zerlegen.
Sinnbilder nach DIN 66261
Die nachfolgenden Strukturblöcke können ineinander verschachtelt werden.
Sequenzieller Ablauf
Bei diesem Ablauf wird jeder Strukturblock nacheinander ausgeführt.
Verzweigung und Abläufe/Auswahle einfache Verzweigung (IF-Verzweigung)
3
Bei dieser Struktur wird eine Bedingung gesetzt. Falls die Bedingung zutrifft (also
wahr ist), wird der Ja-Zweig ausgeführt. Wenn die Bedingung nicht zutrifft (also falsch
ist) werden die Anweisungen nicht berücksichtigt.
Alternative Verzweigung(IF-THEN-ELSE Verzweigung)
Mit dieser Struktur werden zwei unterschidliche Fälle dargestellt. Falls die Bedingung
erfüllt ist, dann wird der Anweisungsblock ausgeführt, ansonsten der else-Block.
Verschachtelte(r) Ablauf/Auswahl
In diesem Ablauf sind zwei Bedingungen enthalten die ineinander verschachtelt sind.
Falls die erste Bedingung zutrifft (also wahr ist), dann wird die zweite Bedingung
ausgeführt. Die zweite Bedingung ähnelt die Funktionsweise der alternativen Verzweigung.
Fallauswahl
Bei diesem Verfahren werden mehrere Unterscheidungen in Betracht gezogen. Zu
erst wird eine Variable deklariert und gleichzeitig initialisiert. Jenach welcher Wert
ausgewählt wird, wird der zugehörige Anweisungsblock ausgeführt, ansonsten der
alternative Anweisungsblock.
4
Iteration (Wiederholung)
Diese Schleife ist eine Zähler gesteuerte Schleife (for-Schleife). Hier wird eine beliebige Variable deklariert und mit einem Anfangswert initialisiert. Die Schleife zählt ab
diesem Anfangswert bis zu einem (maximalen) gewünschten Endwert auf.
Abweisende Schleife (While-Schleife)
Diese Schleife ist eine „kopfgesteuerte“ Schleife. D.h sie prüft zuerst die Bedingung.
Nur wenn die Bedingung wahr ist, wird der Anweisungsblock ausgeführt.
Nicht abweisende Schleife (Loop)
Diese Schleife ist eine „fußgesteuerte“ Schleife. D.h. sie prüft die Bedingung erst am
Ende des Anweisungsblocks. Dies kann auch eine do-while-Schleife sein.
Endlosschleife
Diese Schleife wird nur durch eine break-Anweisung unterbrochen und beendet. Eine
Endlosschleife kann auch durch while(1) angegeben werden.
Aussprung (Break)
Bei dieser Anweisung kann der Ablauf des Programmes an einer gewünschten Stelle
abgebrochen werden.
5
Aufgaben:
Aufgabe1
Entwerfen Sie anhand der folgenden Nassi-Shneiderman ein Programm, welches
mit der Betätigung der Taste 1 alle Relais eingeschaltet und mit der Betätigung der
zweiten Taste ausgeschaltet werden.
STRUKT1
msp_init();
port_init();
if((P3IN & 0x10)== 0x10)
ja
nein
if(Zaehlertaste1<21)
ja
nein
Zaehlertaste1=0x00;
Zaehlertaste1++;
P5OUT=0xff;
Zaehlertaste1=0x00;
if((P3IN & 0x20)== 0x20)
ja
nein
if(Zaehlertaste2<21)
ja
nein
Zaehlertaste2=0x00;
Zaehlertaste2++;
P5OUT=0x00;
Zaehlertaste2=0x00;
Aufgabe2
Entwerfen Sie anhand der folgenden Nassi-Shneiderman ein Programm, welches mit
der Betätigung der Taste 1 ein Lauflicht der Relais-LEDs und mit der Betätigung der
Taste 2 in die Gegenrichtung durchführt wird.
6
lauflicht
msp_init();
port_init();
if((P3IN & 0x10)== 0x10)
ja
nein
if(Zaehlertaste1<21)
ja
nein
Zaehlertaste1++;
A: P5OUT=0x80;
DELAY();
P5OUT=0x20;
DELAY();
P5OUT=0x08;
DELAY();
P5OUT=0x02;
DELAY();
P5OUT=0x01;
DELAY();
P5OUT=0x04;
DELAY();
P5OUT=0x10;
DELAY();
P5OUT=0x40;
DELAY();
if((((P3IN & 0x20)== 0x20) & 0x01)!= 0x01)
{
goto A;
}
Zaehlertaste1=0x00;
if((P3IN & 0x20)== 0x20)
ja
nein
if(Zaehlertaste2<21)
ja
nein
Zaehlertaste2++;
B:P5OUT=0x40;
DELAY();
P5OUT=0x10;
DELAY();
P5OUT=0x04;
DELAY();
P5OUT=0x01;
DELAY();
P5OUT=0x02;
DELAY();
P5OUT=0x08;
DELAY();
P5OUT=0x20;
DELAY();
P5OUT=0x80;
DELAY();
if((((P3IN & 0x10)== 0x10) & 0x01)!= 0x01)
{
goto B;
}
7
Zaehlertaste2=0x00;
Herunterladen