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;