<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ET Tutorials &#187; Mikrocontroller</title>
	<atom:link href="http://et-tutorials.de/category/mikrocontroller/feed/" rel="self" type="application/rss+xml" />
	<link>http://et-tutorials.de</link>
	<description>Eletrotechnik Online</description>
	<lastBuildDate>Tue, 27 Jul 2010 11:09:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Array-Lösung mit Löschen des Bits</title>
		<link>http://et-tutorials.de/2681/array-losung-mit-loschen-des-bits/</link>
		<comments>http://et-tutorials.de/2681/array-losung-mit-loschen-des-bits/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 13:41:21 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2681</guid>
		<description><![CDATA[			
				
			
		





Nachdem wir in der vergangenen Folge die Funktion Eingabe mit Hilfe eines Arrays realisiert haben, ist die Aufgabe, das jeweilige Portbit nach der Bearbeitung wieder zu löschen noch offen.
Dies möchte ich in dieser Folge nun nachholen.
In der Funktion Eingabe() steht uns lediglich die Schachtnummer, in der eine Münze eingeworfen wurde, zu Verfügung. Mit Hilfe dieser [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2681%2Farray-losung-mit-loschen-des-bits%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2681%2Farray-losung-mit-loschen-des-bits%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px; padding-right:10px; margin-right:0px; padding-top:10px; padding-bottom: 10px;'>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 300x250, Erstellt 02.01.10 */
google_ad_slot = "4143115606";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>Nachdem wir in der vergangenen Folge die Funktion Eingabe mit Hilfe eines Arrays realisiert haben, ist die Aufgabe, das jeweilige Portbit nach der Bearbeitung wieder zu löschen noch offen.</p>
<p>Dies möchte ich in dieser Folge nun nachholen.</p>
<p>In der Funktion Eingabe() steht uns lediglich die Schachtnummer, in der eine Münze eingeworfen wurde, zu Verfügung. Mit Hilfe dieser Schachtnummer muss nun das entsprechende Portbit – und zwar nur dieses Portbit ! – zurückgesetzt werden.</p>
<h2>Bitweises Löschen des Portbits</h2>
<p>In der Folge über die <a href="http://et-tutorials.de/1908/bitweise-manipulation/">Bitweise Manipulation also das Bitweise Setzen und Löschen des Ports</a> habe ich ja bereits den Mechanismus vorgestellt, wie man mit dem Operator &amp; einzelne Bits zurücksetzen kann.</p>
<p>Die Maske hierfür müssen wir uns mit der Information über die Schachtnummer nun selbst zusammenbauen.</p>
<h2>Der SHIFT-Operator</h2>
<p>Wie bereits in der letzten Folge vorbereitet, kann man dies mit dem SHIFT-Operator &lt;&lt; prima machen. In dem heutigen Video zeige ich, wie man das gewünschte Bitmuster zusammenstellen kann.</p>
<p>Hierzu kann man einfach eine 1 (binär gedacht als 00000001) soweit wie gewünscht nach links schieben. Man erhält 1 Byte mit 0, bei dem nur an der gewünschten Stelle eine 1 steht. Zieht man diesen Wert anschließend von einer 0xFF (binär gedacht 11111111) ab, erhält man die gewünschte Maske, z.B. 11111101.</p>
<p>Mit Hilfe dieser Maske kann man dann, wie in der Folge zur <a href="http://et-tutorials.de/1908/bitweise-manipulation/">Bitweise Manipulation</a>,  also das Bitweise Setzen und Löschen des Ports, gezeigt, das gewünschte Portbit zurückzusetzen. Alle anderen Portbits werden nicht verändert.</p>
<h2>Noch einfacher durch das Bitweise Invertieren</h2>
<p>Am Ende des Videos zeige ich noch, wie man die Maske noch eleganter zusammenstellen kann. Durch das Bitweise Invertieren der „geschifteten 1“ lässt sich die Maske sehr einfach erstellen.</p>
<p>Die Details im folgenden Video:<br />
<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/rcWOU2zrV40&amp;hl=de_DE&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/rcWOU2zrV40&amp;hl=de_DE&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p><div style='float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 336x280, Erstellt 02.01.10 */
google_ad_slot = "6455248777";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<br />
<img src="http://vg01.met.vgwort.de/na/f4047960c2a04a64b2f59b5325cce9f9" alt="" width="1" height="1" /></p>
<h2>Sommerpause</h2>
<p>Mit diesem Artikel möchte ich eine Sommerpause beim Mikrocontroller-Kurs einlegen.</p>
<p>Wenn Du bis zu dieser Folge dem Kurs aufmerksam gefolgt bist und die Übungen gelöst hast, dann hast Du Dir auch eine Pause, vor allem bei diesem Wetter <img src='http://et-tutorials.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> , mehr als verdient.</p>
<p>Sollte es Dir aber zu langweilig werden, empfehle ich die Programmierung des Kaffeeautomaten noch einmal von Anfang an selbständig zu programmieren.</p>
<p>Programmieren lernt man durch Programmieren. Sehr wichtig ist also das eigenständige Programmiren.</p>
<p>Sicher fallen Dir an der einen oder anderen Stelle auch noch Verbesserungsmöglichkeiten ein, die Du evtl. schon selbst umsetzen kannst, oder die wir nach den Sommerferien gemeinsam umsetzen können.</p>
<p><strong>Bis dahin wünsche ich Dir auch einen schönen, sonnigen Sommer!</strong></p>
<p>Wenn Du Dich bereits auf den Email-Verteil gesetzt hast, erhälst Du automatische eine Email, wenn es wieder los geht.</p>
<p>Falls nicht, trage, wenn Du möchtest, Deine Email Adresse in das folgende Feld ein.</p>
<form style="border:3px solid #840000;padding:3px;text-align:center;" action="http://feedburner.google.com/fb/a/mailverify" method="post"><strong>Trage hier Deine Email-Adresse ein:</strong></p>
<input style="width: 440px;" name="email" type="text" />
<input name="uri" type="hidden" value="EtTutorialsMikrocontroller" />
<input name="loc" type="hidden" value="de_DE" />
<input type="submit" value="Absenden" /> </form>
<p style="text-align: left;">Anschließend erhältst Du dann automatisch eine Email, wenn es wieder losgeht. In jeder Email befindet sich ein Link, mit dem Du Dich auch einfach wieder abmelden kannst.</p>
<p style="text-align: left;">
<p>Die Teilnehmerzahl beträgt zur Zeit:</p>
<p><a href="http://feeds.feedburner.com/EtTutorialsMikrocontroller"><img style="border:0" src="http://feeds.feedburner.com/~fc/EtTutorialsMikrocontroller?bg=FFFFFF&amp;fg=840000&amp;anim=1" alt="" width="88" height="26" /></a></p>
<p><strong>Wichtig:</strong></p>
<p><strong>Deine EMail-Adresse behandle ich natürlich vertraulich und gebe diese </strong><strong>an niemanden weiter. Zudem kannst Du Dich jederzeit durch einen Klick auf den Abmeldelink in einer der Emails einfach wieder abmelden.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2681/array-losung-mit-loschen-des-bits/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lösung der Aufgabe und SHIFT Operator</title>
		<link>http://et-tutorials.de/2620/losung-der-aufgabe-und-shift-operator/</link>
		<comments>http://et-tutorials.de/2620/losung-der-aufgabe-und-shift-operator/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 17:19:12 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2620</guid>
		<description><![CDATA[			
				
			
		





In der letzten Folge habe ich das Element Array vorgestellt.
Mit einem Array kann man eine Struktur von Daten gleichen Typs sehr geschickt speichern.
Auf die einzelnen Feld des Arrays kann dann sehr elegant über den geeigneten Index zugegriffen werden.
Deine Aufgabe aus der letzten Woche war es, ein Array zu nutzen, um nur einen Parameter an die [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2620%2Flosung-der-aufgabe-und-shift-operator%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2620%2Flosung-der-aufgabe-und-shift-operator%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px;padding-right:10px; margin-right:0px;  padding-top:10px; padding-right:10px; padding-bottom:10px'>
<iframe src="http://rcm-de.amazon.de/e/cm?t=ettut-21&o=3&p=12&l=st1&mode=books-de&search=Elektrotechnik%2C%20Aufgaben&fc1=000000&lt1=&lc1=3366FF&bg1=FFFFFF&f=ifr" marginwidth="0" marginheight="0" width="300" height="250" border="0" frameborder="0" style="border:none;" scrolling="no"></iframe></div>
In der letzten Folge habe ich das Element Array vorgestellt.</p>
<p>Mit einem Array kann man eine Struktur von Daten gleichen Typs sehr geschickt speichern.</p>
<p>Auf die einzelnen Feld des Arrays kann dann sehr elegant über den geeigneten Index zugegriffen werden.</p>
<p>Deine Aufgabe aus der letzten Woche war es, ein Array zu nutzen, um nur einen Parameter an die Funktion Eingabe zu übergeben.</p>
<p>In dem Array</p>
<pre>int Schacht[8]</pre>
<p>sind die 8 möglichen Zahlenwerte einer europäischen Münze gespeichert. Da sich diese Information nicht ändert, muss sie nicht bei jedem Funktionsaufruf übergeben zu werden.</p>
<p>Das heutige Video ist in 2 Teile unterteilt.</p>
<p>Im ersten Teil zeige ich eine mögliche Lösung für das Auslesen des Münzwertes aus dem Array.</p>
<p>Im zweiten Teil des Videos geht es dann um das zurücksetzen des Portbits. Anhand der Information, in welchem Schacht eine Münze erkannt worden ist, kann ein Bitmuster errechnet werden, mit dessen Hilfe das entsprechende Portbit zurückgesetzt werden kann.</p>
<h2>Die Lösung der Aufgabe</h2>
<p>Im heutigen Video geht es also zunächst um eine mögliche Lösung der Aufgabe von letzter Woche.</p>
<p>Aus der Information, an welcher Stelle eine Münze erkannt worden ist, wird der Münzwert aus dem Array gelesen und dann zum aktuellen Betrag addiert. Damit es nicht ganz so einfach ist, habe ich alles in einer Zeile programmiert.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/m7ETH36shIY&amp;hl=de_DE&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/m7ETH36shIY&amp;hl=de_DE&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><div style='float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 336x280, Erstellt 02.01.10 */
google_ad_slot = "6455248777";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<h2>Der SHIFT-Operator</h2>
<p>Nach der Addition des Münzwertes zum Gesamtbetrag muss noch das jeweilige Port-Bit zurückgesetzt werden. Wie im Video gezeigt, kann mit dem SHIFT-Operator ein Bit nach links oder rechts verschoben werden.</p>
<p>Deine Aufgabe für die nächste Woche ist es, den SHIFT Operator zu nutzen, um das korrekte Bit wieder auf 0 zu setzen. Wenn Du Dich nicht mehr so genau daran erinnerst, wie man einzelne Bits löscht, kann Dir der <a href="http://et-tutorials.de/1908/bitweise-manipulation/">Artikel über das Setzen und Löschen von Bits innerhalb eines Bytes</a> sicher helfen.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<br />
<img src="http://vg01.met.vgwort.de/na/775efdc7bbc44f77a703236bd49a57bb" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2620/losung-der-aufgabe-und-shift-operator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arrays</title>
		<link>http://et-tutorials.de/2579/arrays/</link>
		<comments>http://et-tutorials.de/2579/arrays/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 13:47:08 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2579</guid>
		<description><![CDATA[			
				
			
		





In den vergangenen Folgen ging es ja schon um die Optimierung der Programmierung für unsren Kaffeeautomaten.
Bei der Aufgabenstellung zur Auslagerung von Code in Funktionen habe ich ja schon angedeutet, dass man nicht unbedingt die Münzschachtnummer UND den Wert der Münze bei jedem Funktionsaufruf übergeben muss.
Wenn man weiß in welchen Münzschacht eine Münze liegt, kennt man [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2579%2Farrays%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2579%2Farrays%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px; padding-right:10px; margin-right:0px; padding-top:10px; padding-bottom: 10px;'>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 200x90, Erstellt 31.12.09 */
google_ad_slot = "8670310840";
google_ad_width = 200;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>In den vergangenen Folgen ging es ja schon um die Optimierung der Programmierung für unsren Kaffeeautomaten.</p>
<p>Bei der Aufgabenstellung zur <a href="http://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/">Auslagerung von Code in Funktionen</a> habe ich ja schon angedeutet, dass man nicht unbedingt die Münzschachtnummer UND den Wert der Münze bei jedem Funktionsaufruf übergeben muss.</p>
<p>Wenn man weiß in welchen Münzschacht eine Münze liegt, kennt man ja auch den Wert der Münze.</p>
<p>Bei der ersten Lösung haben wir der Einfachheit beide Informationen an die Funktion Eingabe() übergeben und dort ausgewertet.</p>
<p>Im folgenden soll es darum gehen, nur die Nummer des Münzschachts zu übergeben und dann aus dieser Information, den Wert der Münze zu ermitteln.</p>
<h2>Array</h2>
<p>Dies lässt sich einfach über sogenannte Arrays realisieren.</p>
<p>In einem Array lassen sich Daten gleichen Typs in einem Feld anordnen.</p>
<p>Die einzelnen Daten lassen sich dann über einen fortlaufenden Index ansprechen.</p>
<p>Also genau das, was wir brauchen.</p>
<p>Beim Kaffeeautomaten lassen sich die einzelnen Münzschächte durchnummerieren. Die Zuordnung Schacht-Nummer und Münzwert lässt sich dann über ein Array realisieren.</p>
<p>Im Video zeige ich die</p>
<ul>
<li>Definition des Arrays</li>
<li>die Möglichkeiten der Initialisierung</li>
<li>und das Auslesen des Arrays</li>
</ul>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/8U2IYvXjT3Q&#038;hl=de_DE&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8U2IYvXjT3Q&#038;hl=de_DE&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object><br />
<div style=float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 300x250, Erstellt 24.11.09 */
google_ad_slot = "0526996616";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<h2>Nun bist Du wieder an der Reihe</h2>
<p>Das Array soll nun verwendet werden, um die Parameterübergabe an die Funktion Eingabe zu erleichtern. Es soll in folgenden nur noch der Index des Schachtes [0 ... 7] übergeben werden.</p>
<p>In der Funktion Eingabe() soll dann der korrekte Münzwert über das Array ermittelt werden und der Gesamtbetrag entsprechend erhöht werden.</p>
<p>Das Zurücksetzen des Ports ist nun etwas schwieriger, weil wir die Schachtnummer als Index von 0 bis 7 und nicht mehr als binärcodiertes Portbit zur Verfügung haben.</p>
<p>Kümmere Dich also noch nicht um das Zurücksetzen des Ports. Dies wird Inhalt des nächsten Artikels sein.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<br />
<img src="http://vg01.met.vgwort.de/na/67f541484dab4c2f9b481819752331d4" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2579/arrays/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lösung für eine Funktion zur Münzeingabe</title>
		<link>http://et-tutorials.de/2436/losung-fur-eine-funktion-zur-munzeingabe/</link>
		<comments>http://et-tutorials.de/2436/losung-fur-eine-funktion-zur-munzeingabe/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 18:31:26 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2436</guid>
		<description><![CDATA[			
				
			
		





Im heutigen Artikel möchte ich eine mögliche Lösung für die Aufgabe aus dem letzten Artikel, nämlich die Programmierung der Funktion Eingabe() für unseren Kaffeeautomaten vorstellen.
Wie immer gibt es verschiedene Möglichkeiten die Funktion zu realisieren.
Mein Vorschlag ist daher nur eine mögliche Lösung. Es gibt sicher elegantere Lösung. Vor allem der Umgang mit der Variablen Betrag lässt [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2436%2Flosung-fur-eine-funktion-zur-munzeingabe%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2436%2Flosung-fur-eine-funktion-zur-munzeingabe%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px; padding-right:10px; margin-right:0px; padding-top:10px; padding-bottom: 10px;'>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 200x90, Erstellt 31.12.09 */
google_ad_slot = "8670310840";
google_ad_width = 200;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>Im heutigen Artikel möchte ich eine mögliche Lösung für die Aufgabe aus dem letzten Artikel, nämlich die <a href="http://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/">Programmierung der Funktion Eingabe()</a> für unseren Kaffeeautomaten vorstellen.</p>
<p>Wie immer gibt es verschiedene Möglichkeiten die Funktion zu realisieren.</p>
<p>Mein Vorschlag ist daher nur eine mögliche Lösung. Es gibt sicher elegantere Lösung. Vor allem der Umgang mit der Variablen Betrag lässt sich sicher noch optimieren <img src='http://et-tutorials.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Nähere Information gibt es dazu Video.</p>
<h2>Die Anforderungen an die Funktion Eingabe()</h2>
<p>In der Funktion Eingabe sollen zwei Dinge umgesetzt werden.</p>
<ol>
<li>Die      Erhöhung des Gesamtbetrages um den Wert der eingeworfenen Münze und die      Ausgabe des Gesamtbetrages.</li>
<li>Das      Zurücksetzen des entsprechenden Portbits, damit die Münze beim nächsten      Durchlauf nicht noch einmal gezählt wird.</li>
</ol>
<p>Um die Funktion Eingabe() zu realiseren, musst Du verschiedene Dinge, die Du in den vergangenen Folgen gelernt hast umsetzen.</p>
<p>Zur Verwendung von Funktionen kannst Du Dir evtl, noch einmal die Videos ab Artikel 22 <a href="../2155/funktionen-in-c/">Funktionen in C</a> angucken.</p>
<p>Auch die Videos zur <a href="../1226/variablenzuweisung-teil-2/">Variablenzuweisung</a>, <a href="../2369/1226/variablenzuweisung-teil-2/"></a>zur <a href="../1244/bedingte-anweisungen-mit-if/">if-Abfrage</a> und zur <a href="../1908/bitweise-manipulation/">Bitweisen Manipulation</a> können vielleicht helfen.</p>
<p>Während der erste Teil, Die Erhöhung des Gesamtbetrages um den Wert der eingeworfenen Münze und die Ausgabe des Gesamtbetrages, noch verhältnismäßig einfach ist, geht es bei dem 2. Teil der Aufgabe schon ziemlich zur Sache.</p>
<p>Wie häufig bei Funktionen, bei denen die Ausführung abhängig von Parametern ist, ist es auch in diesem Beispiel so, dass Du bei der Programmierung der Funktion noch nicht weißt, welche Parameter übergeben werden. Du musst also die Funktion so flexibel gestalten, dass aus den übergebenen Parametern die durchzuführenden Befehle errechnet werden können.</p>
<p>Eine mögliche Lösung findest Du im Video.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/7M1EDMIYppk&amp;hl=de_DE&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/7M1EDMIYppk&amp;hl=de_DE&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<div style='float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 336x280, Erstellt 02.01.10 */
google_ad_slot = "6455248777";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<p>Bis zum nächsten Mal.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<br />
<img src="http://vg01.met.vgwort.de/na/39342b6a47694371a3a92f68e4e319a5" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2436/losung-fur-eine-funktion-zur-munzeingabe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kaffeeautomat-Funktion für die Münzauswertung</title>
		<link>http://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/</link>
		<comments>http://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 04:27:09 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2369</guid>
		<description><![CDATA[			
				
			
		


Nach einem Ausflug in das Reich der Funktionen, geht es nun zurück zur Programmierung des Kaffeeautomaten.
Zur Erinnerung:
Der Kaffeeautomat hatte eine Münzeingabe, die alle europäischen Geldstücke vom 1 Ct Stück bis zum 2 € annimmt.
Dass dies zufällig 8 verschiedene Münzen sind, freut uns natürlich. So können wir die einzelnen Münzschächte über die Bits genau eines Bytes [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2369%2Fkaffeeautomat-funktion-fur-die-munzauswertung%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2369%2Fkaffeeautomat-funktion-fur-die-munzauswertung%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px; padding-right:10px; margin-right:0px; padding-top:10px; padding-bottom: 10px;'>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 300x250, Erstellt 02.01.10 */
google_ad_slot = "4143115606";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>Nach einem Ausflug in das Reich der Funktionen, geht es nun zurück zur <a href="http://et-tutorials.de/1519/programmierung-eines-kaffeeautomaten/">Programmierung des Kaffeeautomaten</a>.</p>
<p><strong>Zur Erinnerung:</strong></p>
<p>Der Kaffeeautomat hatte eine Münzeingabe, die alle europäischen Geldstücke vom 1 Ct Stück bis zum 2 € annimmt.</p>
<p>Dass dies zufällig 8 verschiedene Münzen sind, freut uns natürlich. So können wir die einzelnen Münzschächte über die Bits genau eines Bytes abfragen.</p>
<p>Eine mögliche <a href="http://et-tutorials.de/1537/programmierung-eines-kaffeeautomaten-%E2%80%93-teil-2/">Programmierung der Münzeingabe</a> haben wir ja bereits besprochen und haben anschließend noch das Programm optimiert, so dass auch mehrere Münzen gleichzeitig bzw. schnell hintereinander eingeworfen werden können.</p>
<p>Das war durch das <a href="http://et-tutorials.de/1991/bitweises-auslesen-eines-ports/  ">Bitweise Auslesen</a> der Information möglich.</p>
<h2>Schlanker Code</h2>
<p>Das Programm funktionierte bis dahin so weit auch ganz gut. Es fällt jedoch auf, dass der Code zur Identifikation der einzelnen Münzen fast gleich ist.</p>
<p>Das Programm besteht daher aus sehr ähnlichen Programmteilen.</p>
<p>Eine ideale Voraussetzung, um diese Programmteile in eine Funktion zu integrieren und dann jeweils nur diese Funktion aufzurufen.</p>
<p>Im folgenden Video zeige am C-Programm, was ich damit meine.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Uc963JFZXok&amp;hl=de_DE&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/Uc963JFZXok&amp;hl=de_DE&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<div style=float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 300x250, Erstellt 24.11.09 */
google_ad_slot = "0526996616";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<h2>Jetzt geht’s zur Sache</h2>
<p>Und hier kommt Deine Aufgabe zur nächsten Woche.</p>
<p>Versuche die Funktion Eingabe() zu realisieren, so dass sie so flexibel ist, um mit den unterschiedlichen Münzen zurecht zu kommen. Es soll also in der Funktion Eingabe der korrekte Wert zum Betrag addiert und anschließend das zughörige Bit des Ports P1 zurückgesetzt werden.</p>
<p>Guck Dir zur Lösung der Aufgabe am besten noch einmal die älteren Videos zum Kaffeeautomaten und die Videos zur Verwendung von Funktionen (ab Video 22 <a href="http://et-tutorials.de/2155/funktionen-in-c/">Funktionen in C</a> an.</p>
<p>Auch die Videos zur <a href="http://et-tutorials.de/1226/variablenzuweisung-teil-2/">Variablenzuweisung</a>, <a href="../1226/variablenzuweisung-teil-2/"></a> zur <a href="http://et-tutorials.de/1244/bedingte-anweisungen-mit-if/">if-Abfrage</a> und zur <a href="http://et-tutorials.de/1908/bitweise-manipulation/">Bitweisen Manipulation</a> können vielleicht helfen.</p>
<p>In der nächsten Folge werde ich eine mögliche Lösung vorstellen. Ich empfehle aber nicht bis dahin zu warten, sondern auf jeden Fall selbst eine Lösung zu versuchen. Durch diese Aufgabe wird vieles aus den vergangenen Artikeln wiederholt und zusammengefasst. Das ist für Dich eine ideale Möglichkeit um zu überprüfen, ob Du bis hierhin wirklich alles verstanden hast.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<br />
<img src="http://vg01.met.vgwort.de/na/1d46256a319b41d8a88f2852c1b81103" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lösung der Übungsaufgabe zu Funktionen</title>
		<link>http://et-tutorials.de/2325/losung-der-ubungsaufgabe-zu-funktionen/</link>
		<comments>http://et-tutorials.de/2325/losung-der-ubungsaufgabe-zu-funktionen/#comments</comments>
		<pubDate>Mon, 24 May 2010 10:08:12 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2325</guid>
		<description><![CDATA[			
				
			
		





In den vergangenen Artikeln bin ich auf die Behandlung von Funktionen und das Thema Parameterübergabe eingegangen.
Zum Abschluss gab es dann im Artikel der letzten Woche eine Aufgabe. Und zwar ging es darum, mit Hilfe von Funktionen den Umfang und die Fläche eines Kreises zu berechnen.
Als drittes sollte dann anschließend noch das Volumen eines Zylinders berechnet [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2325%2Flosung-der-ubungsaufgabe-zu-funktionen%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2325%2Flosung-der-ubungsaufgabe-zu-funktionen%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px; padding-right:10px; margin-right:0px; padding-top:10px; padding-bottom: 10px;'>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 200x90, Erstellt 31.12.09 */
google_ad_slot = "8670310840";
google_ad_width = 200;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>In den vergangenen Artikeln bin ich auf die Behandlung von Funktionen und das Thema Parameterübergabe eingegangen.</p>
<p>Zum Abschluss gab es dann im Artikel der letzten Woche eine Aufgabe. Und zwar ging es darum, mit Hilfe von Funktionen den Umfang und die Fläche eines Kreises zu berechnen.</p>
<p>Als drittes sollte dann anschließend noch das Volumen eines Zylinders berechnet werden, wobei bei der zu programmierenden Funktion volumen() auf die Funktion flaeche() zurückgegriffen werden sollte.</p>
<p>Die Berechnung der Grundfläche des Zylinders sollte also nicht in der Funktion volumen() selbst, sondern sozusagen an die Funktion flaeche delegiert werden. Also ein Aufruf einer Funktion innerhalb einer Funktion.</p>
<p>Um weiterhin mit Integer-Werten rechnen zu können, hatte ich für PI=3 vorgegeben &#8211; was ja zu 95% auch so stimmt <img src='http://et-tutorials.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Im ersten Video zeige ich Dir heute eine mögliche Lösung der Aufgabe.</p>
<p><script src="http://de.sevenload.com/pl/t54EFwX/500x314" type="text/javascript"></script> Link: <a href="http://de.sevenload.com/videos/t54EFwX-Mikrocontroller-Teil-26-1"><img src="http://static.sevenload.net/img/sevenload.png" alt="Mikrocontroller Teil 26-1" width="66" height="10" /></a> <!-- INCLUDE javascript_bottom --></p>
<p>Da das Video zu lang geworden wäre, habe ich das Video heute wieder geteilt.  Im zweiten Teil werde ich das Programm zunächst einmal testen und dann den Quell-Code noch etwas nachbessern.</p>
<p>Auf viele Variablendefinitionen des ersten Videos kann man nämlich verzichten und somit das Programm kürzen und die Nutzung des Speicherplatzes optimieren.  Gerade wenn man mit dem Programmieren beginnt, ist es häufig einfach den Code ein bisschen ausführlicher als nötig zu schreiben und dann im zweiten Schritt das Programm zu kürzen.</p>
<p>Später, wenn man etwas mehr Erfahrung in der C-Programmierung hat, fasst man automatisch an bestimmten Stellen mehrere Befehle zusammen.  Aber auch dann sollte es m.E. nicht übertreiben. Man möchte ein C-Programm ja auch ein Jahr später noch verstehen können.  Zu sehr komprimierter C-Code ist aber häufig schwer zu lesen.    <script src="http://de.sevenload.com/pl/1GQDETI/500x314" type="text/javascript"></script></p>
<p>Link: <a href="http://de.sevenload.com/videos/1GQDETI-Mikrocontroller-Kurs-Teil-26-2"><img src="http://static.sevenload.net/img/sevenload.png" alt="Mikrocontroller Kurs Teil 26 - 2" width="66" height="10" /></a></p>
<p><!-- INCLUDE javascript_bottom --></p>
<p><div style='float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 336x280, Erstellt 02.01.10 */
google_ad_slot = "6455248777";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<p>So, dass war zunächst einmal eine Einführung in den Bereich Funktionen. In der nächsten Folge werde ich mich wieder unserem Kaffeeautomaten zuwenden und überprüfen, an welchen Stellen wir durch den Gebrauch von Funktionen unser Programm für den Kaffeeautomaten verbessern können.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.</p>
<p>[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .] <img src="http://vg01.met.vgwort.de/na/bfedba8df0594dfca58ffdc4683139e4" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2325/losung-der-ubungsaufgabe-zu-funktionen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Funktionen in C, Parameterübergabe</title>
		<link>http://et-tutorials.de/2305/funktionen-in-c-parameterubergabe/</link>
		<comments>http://et-tutorials.de/2305/funktionen-in-c-parameterubergabe/#comments</comments>
		<pubDate>Mon, 17 May 2010 09:55:06 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2305</guid>
		<description><![CDATA[			
				
			
		





In der letzten Folge hatte ich bereits erläutert, wie Compiler und Linker und anschließend auch das Zielsystem, der Mikrocontroller selbst, mit Variablen umgeht, also wo Variabolen gespeichert werden.
Dieses Wissen hilft nun, beim Aufruf von Funktionen. Vor allem wenn es darum geht, den aufzurufenden Funktionen Parameter zu übergeben.
Da das heutige Video etwas lang geworden wäre, habe [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2305%2Ffunktionen-in-c-parameterubergabe%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2305%2Ffunktionen-in-c-parameterubergabe%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px; padding-right:10px; margin-right:0px; padding-top:10px; padding-bottom: 10px;'>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 200x90, Erstellt 31.12.09 */
google_ad_slot = "8670310840";
google_ad_width = 200;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>In der letzten Folge hatte ich bereits erläutert, wie Compiler und Linker und anschließend auch das Zielsystem, der Mikrocontroller selbst, mit Variablen umgeht, also wo Variabolen gespeichert werden.</p>
<p>Dieses Wissen hilft nun, beim Aufruf von Funktionen. Vor allem wenn es darum geht, den aufzurufenden Funktionen Parameter zu übergeben.</p>
<p>Da das heutige Video etwas lang geworden wäre, habe ich es in 2 Teile aufgeteilt.</p>
<p>Im ersten Video zeige ich den prinzipiellen Funktionsaufruf und die Parameterübergabe sozusagen als Trockenübung.</p>
<p>Im zweiten Video werde ich dann wieder die Entwicklungsumgebung an und zeige den Funktionsaufruf am System.</p>
<h2>Alles geht über den Stack</h2>
<p>Wenn es sich vermeiden lässt, globale Variablen für die Kommunikation zwischen unterschiedlichen Funktionen zu nehmen, nutzt man lokale Variablen. Da lokale Variablen eine begrenzte Sichtbarkeit und eine begrenzte Gültigkeitsdauer haben, können Programme so besser strukturiert werden.</p>
<p>Die Variablen für die Parameterübergabe von Funktion zu Funktion werden also über den Stack übergeben.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/R1WEEoVBtI8&amp;hl=de_DE&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/R1WEEoVBtI8&amp;hl=de_DE&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Im zweiten Video zeige ich die Implementierung des Funktionsaufrufes in der Entwicklungsumgebung und, am Ende des Videos, die Deklarationen von Funktionen, wenn Parameter mit übergeben werden sollen.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/qirS3cOs5M8&amp;hl=de_DE&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/qirS3cOs5M8&amp;hl=de_DE&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<div style=float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 300x250, Erstellt 24.11.09 */
google_ad_slot = "0526996616";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<h2>Nun bist Du wieder an der Reihe &#8230;</h2>
<p>Heute gibt es wieder – endlich <img src='http://et-tutorials.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  &#8211; eine Hausaufgabe.</p>
<p>Die heutige Hausaufgabe besteht aus drei Funktionen. Und zwar sollen zum einen für einen Kreis der Umfang und der Flächeninhalt berechnet werden. Zudem soll für einen Zylinder das Volumen berechnet werden.</p>
<p>Radius und Höhe sollen über den PORT 1 (Radius) und PORT 2(Höhe) eingegeben werden können. Der Einfachheit halber soll alles in der Grundeinheit m angegeben werden.</p>
<p>Die Besonderheit bei der Berechnung des Volumens für den Zylinder besteht darin, dass zur Berechnung der Grundfläche des Zylinders die vorher definierte Funktion genutzt werden soll.</p>
<p>Also:</p>
<p><strong>Programmiere die Funktionen</strong></p>
<ul>
<li>int umfang (int radius)</li>
</ul>
<ul>
<li>int flaeche (int radius)</li>
</ul>
<ul>
<li>int volumen(int radius, int hoehe)</li>
</ul>
<p>wobei in der Funktion volumen() die Funktion flaeche() genutzt werden soll.</p>
<p>Zu Beginn von main() sollen radius und hoehe über die Ports P1 und P2 eingelesen werden.</p>
<p>Am Ende von main sollen Umfang, Fläche und Volumen ausgegeben werden.</p>
<p>Hinweis:<br />
Für unsere Übung reichen grobe Werte. Wir nehmen für PI = 3</p>
<p>Und zur Erinnerung ein paar Formeln:</p>
<ul>
<li>U=2*PI*radius</li>
</ul>
<ul>
<li>A=Pi*radius²</li>
</ul>
<ul>
<li>V=A*hoehe</li>
</ul>
<p>Bis zum nächsten Mal!</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="http://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<p><img src="http://vg01.met.vgwort.de/na/ddb0d2a0e9844edc80c1b1417ea466f3" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2305/funktionen-in-c-parameterubergabe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funktionen in C, Globale und lokale Variablen</title>
		<link>http://et-tutorials.de/2276/funktionen-in-c-globale-und-lokale-variablen/</link>
		<comments>http://et-tutorials.de/2276/funktionen-in-c-globale-und-lokale-variablen/#comments</comments>
		<pubDate>Mon, 10 May 2010 12:25:01 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2276</guid>
		<description><![CDATA[			
				
			
		


Was wären Funktionen doch langweilig, wenn sie immer nur das gleiche machen würden. Um Programme effizient zu machen, macht es Sinn mit unterschiedlichen Werten zu arbeiten, sogenannten Variablen.
In einem der vergangenen Artikel habe ich ja schon gezeigt, welche Variablen es in der Programmiersprache C gibt.
Beim Umgang mit Variablen und Funktionen stellt sich häufig die Frage, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2276%2Ffunktionen-in-c-globale-und-lokale-variablen%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2276%2Ffunktionen-in-c-globale-und-lokale-variablen%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px; padding-right:10px; margin-right:0px; padding-top:10px; padding-bottom: 10px;'>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 200x90, Erstellt 31.12.09 */
google_ad_slot = "8670310840";
google_ad_width = 200;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>Was wären Funktionen doch langweilig, wenn sie immer nur das gleiche machen würden. Um Programme effizient zu machen, macht es Sinn mit unterschiedlichen Werten zu arbeiten, sogenannten Variablen.</p>
<p>In einem der vergangenen Artikel habe ich ja schon gezeigt, welche <a href="Datentypen und die formatierte Ausgabe mit printf()">Variablen es in der Programmiersprache C</a> gibt.</p>
<p>Beim Umgang mit Variablen und Funktionen stellt sich häufig die Frage, auf welche Variablen kann eine Funktion zugreifen, mit welchen Variablen kann eine Funktion arbeiten.</p>
<h2>Wozu Gültigkeitsbereiche</h2>
<p>Häufig möchte man gar nicht, dass jede Variable von jeder Funktion änderbar ist. Stell Dir vor mehrere Programmierer arbeiten an einem Projekt und müssten sich einigen, wer denn seine Inter-Variable „i“ nennen darf.</p>
<p>Oder noch schlimmer: Man nutzt Funktionen aus einem anderen Projekt und müsste bevor man selbst programmiert, alle Programme durchforsten ob die Variable „Wert“ schon einmal genutzt worden ist.</p>
<p>Um dies zu verhindern unterscheidet man zwischen globalen Variablen, die global, also im gesamten Programm gelten und lokalen Variablen, die einen beschränkten Gültigkeitsbereich haben.</p>
<h2>Speicherorte von Variablen</h2>
<p>Welche Variablen global sind und welche lokal sind, versteht man am besten, wenn man sich einmal anguckt, in welche Speicherbereiche die Variablen vom Compiler/Linker bzw. vom Mikrocontroller abgelegt werden.</p>
<p>Globale Variablen kann der Compiler bei der Erstellung des Programms in den Datenbereich ablegen. Bei lokalen Variablen ist bei der Übersetzung des Programms nicht bekannt, wie häufig (oder ob überhaupt) diese Variablen  benötigt werden.</p>
<p>Im folgenden Video zeige ich daher zunächst, wie der Compiler bzw. während der Ausführung der Mikrocontroller Variablen behandelt.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/CgTt7j5y5QQ&#038;hl=de_DE&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/CgTt7j5y5QQ&#038;hl=de_DE&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>Nachdem Du nun gesehen hast, wo Compiler und Mikrocontroller die Variablen verwalten, möchte ich im nächsten Video einige Beispiele zeigen.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/-yUkcRWj6i8&#038;hl=de_DE&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-yUkcRWj6i8&#038;hl=de_DE&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object><br />
<div style=float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 300x250, Erstellt 24.11.09 */
google_ad_slot = "0526996616";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<p>Am besten ist nun, Du rufst auf Deinem PC die Entwicklungsumgebung auf und testet selbst einmal die Gültigkeitsbereiche von Variablen.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="http://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<br />
<img src="http://vg01.met.vgwort.de/na/c777df524ae14d6e854920ecb13d8cd1" width="1" height="1" alt=""></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2276/funktionen-in-c-globale-und-lokale-variablen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Funktionen in C, Definition und Deklaration</title>
		<link>http://et-tutorials.de/2198/funktionen-in-c-definition-und-deklaration/</link>
		<comments>http://et-tutorials.de/2198/funktionen-in-c-definition-und-deklaration/#comments</comments>
		<pubDate>Mon, 03 May 2010 15:12:56 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2198</guid>
		<description><![CDATA[			
				
			
		





Durch die Verwendung von Funktionen kann man Programme strukturieren und effizienter machen.
In unserem Beispiel möchten wir die Geldeingabe und die Getränkeausgabe für unseren Kaffeeautomaten optimieren. Gleiche Programmteile möchten wir nur einmal programmieren und dann von verschiedenen Stellen aufrufen können.
Nachdem ich also in der letzten Folge schon einmal kurz die prinzipielle Verwendung von Funktion angesprochen habe, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2198%2Ffunktionen-in-c-definition-und-deklaration%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2198%2Ffunktionen-in-c-definition-und-deklaration%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px;padding-right:10px; margin-right:0px;  padding-top:10px; padding-right:10px; padding-bottom:10px'>
<iframe src="http://rcm-de.amazon.de/e/cm?t=ettut-21&o=3&p=12&l=st1&mode=books-de&search=Elektrotechnik%2C%20Aufgaben&fc1=000000&lt1=&lc1=3366FF&bg1=FFFFFF&f=ifr" marginwidth="0" marginheight="0" width="300" height="250" border="0" frameborder="0" style="border:none;" scrolling="no"></iframe></div>
Durch die Verwendung von Funktionen kann man Programme strukturieren und effizienter machen.<br />
In unserem Beispiel möchten wir die Geldeingabe und die Getränkeausgabe für unseren Kaffeeautomaten optimieren. Gleiche Programmteile möchten wir nur einmal programmieren und dann von verschiedenen Stellen aufrufen können.</p>
<p>Nachdem ich also in der letzten Folge schon einmal kurz die prinzipielle Verwendung von Funktion angesprochen habe, möchte ich mit der heutigen Folge beginnen, etwas tiefer in das Thema Funktionen in C einzusteigen.</p>
<h2>Definition und Deklaration</h2>
<p>Konkret soll es heute um das Thema Definition und Deklarationen von Funktionen in C gehen. Um die Verwendung von Funktionen zu verstehen ist es hilfreich ein wenig über die Arbeitsweise eines Compilers zu verstehen.</p>
<p>Das prinzipielle Vorgehen beim Übersetzen eines Programms hatte ich zu Beginn des Kurs schon vorgestellt. Wenn Du Dich nicht mehr genau erinnerst, könnte diese Folge interessant sein, ich der ich die Zusammenarbeit von Compiler und Linker kurz zeige.</p>
<p>Im heutigen Video zeige ich zunächst noch einmal, wie Funktionen sich gegenseitig aufrufen können und demonstriere dann mit dem Emulator, die Probleme bei der Definition von Funktionen und die Lösung mit Hilfe der Deklaration von Funktionen.</p>
<p>Hier zunächst das heutige Video.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/5au9O79NiXE&amp;hl=de_DE&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/5au9O79NiXE&amp;hl=de_DE&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<div style='float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 336x280, Erstellt 02.01.10 */
google_ad_slot = "6455248777";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div><br />
Die Ursprungsquelldatei:</p>
<blockquote>
<pre>/*——————————————————————————
 HELLO.C

 Copyright 1995-2005 Keil Software, Inc.
 ——————————————————————————*/

 #include &lt;REG52.H&gt;               
  #include &lt;stdio.h&gt;               
 /*————————————————
 The main C function.  Program execution starts
 here after stack initialization.
 ————————————————*/

void funk1(void); // Deklaration von funk1
void funk2(void); // Deklaration von funk2

void main (void) {

 /*————————————————
 Setup the serial port for 1200 baud at 16MHz.
 ————————————————*/
 #ifndef MONITOR51
 SCON  = 0x50;              
 TMOD |= 0x20;              
 TH1   = 221;               
 TR1   = 1;                                           
 TI    = 1;                 
 #endif

 /*————————————————
 Note that an embedded program never exits (because
 there is no operating system to return to).  It
 must loop and execute forever.
 ————————————————*/

printf("In main()\n");

while(1)
{

}

}    //end main</pre>
</blockquote>
<h2>Zusammengefasst</h2>
<p>In der <strong>Definition </strong>einer Funktion wird genau festgelegt, wie eine Funktion aufgebaut ist, welche Parameter sie übergeben bekommt und welchen Wert sie an die aufrufende Funktion zurückgibt.</p>
<p>Eine <strong>Deklaration</strong> gibt dem Compiler Informationen darüber, dass eine bestimmte Funktion existiert und welche Parameter sie erwartet und welchen Wert sie zurückgibt. Die Deklaration einer Funktion hilft dem Compiler beim weiteren Übersetzen des Programms.</p>
<p>Häufig werden Deklarationen von Funktionen in sogenannten Header-Dateien ausgelagert und dann im Quellcode über den #include-Befehl eingebettet. Dies erhöht bei größeren Programmen die Übersichtlichkeit.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="http://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<p><img src="http://vg01.met.vgwort.de/na/eecc26656e3e45bdb60fa881eb2bb583" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2198/funktionen-in-c-definition-und-deklaration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funktionen in C</title>
		<link>http://et-tutorials.de/2155/funktionen-in-c/</link>
		<comments>http://et-tutorials.de/2155/funktionen-in-c/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 11:42:57 +0000</pubDate>
		<dc:creator>Wolfgang Bengfort</dc:creator>
				<category><![CDATA[Mikrocontroller]]></category>

		<guid isPermaLink="false">http://et-tutorials.de/?p=2155</guid>
		<description><![CDATA[			
				
			
		





Ähnliche oder gleiche Befehle, die öfter genutzt werden kann man besser in Funktionen ausgliedern.
Für unseren Kaffeeautomaten wird beispielsweise bei der Auswertung des Geldeinwurfs jedes Mal zunächst überprüft, ob der Restbetrag noch ausreicht, eine passende Meldung ausgegeben, ggf. das Getränk ausgegeben und der Betrag entsprechend belastet.
Den Code für diese Befehlfolge muss man, wenn man eine Funktion [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fet-tutorials.de%2F2155%2Ffunktionen-in-c%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fet-tutorials.de%2F2155%2Ffunktionen-in-c%2F&amp;source=ETTutorials&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><div style='float:left; padding-left:10px; margin-left:0px; padding-right:10px; margin-right:0px; padding-top:10px; padding-bottom: 10px;'>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 200x90, Erstellt 31.12.09 */
google_ad_slot = "8670310840";
google_ad_width = 200;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>Ähnliche oder gleiche Befehle, die öfter genutzt werden kann man besser in Funktionen ausgliedern.</p>
<p>Für unseren Kaffeeautomaten wird beispielsweise bei der Auswertung des Geldeinwurfs jedes Mal zunächst überprüft, ob der Restbetrag noch ausreicht, eine passende Meldung ausgegeben, ggf. das Getränk ausgegeben und der Betrag entsprechend belastet.</p>
<p>Den Code für diese Befehlfolge muss man, wenn man eine Funktion hierfür schreibt, nur einmal programmieren (und im Speicher des Mikrocontrollers ablegen) und diese Funktion dann bei der Wahl eines Getränks aufrufen.</p>
<p>Wir habe in unserem Beispiel zwar nur 3 Getränke zur Auswahl um die Anwendung übersichtlich zu halten.</p>
<p>Welche Einsparung man bei 20 Getränken erhielte kann man sich aber leicht vorstellen.</p>
<h2>2 Vorteile von Funktionen</h2>
<ol>
<li>Das Programm wird durch Funktionen strukturierter.<br />
Wenn zur Verwendung einer Befehlsfolge eine Funktion genutzt wird und die Befehlfolge dann anschließend doch noch geändert werden soll, dann muss man diese Änderung nur einmal vornehmen &#8211; eben in dieser Funktion.</li>
<li>Das Programm wird kleiner.<br />
Mikrocontroller-Steuerungen sind häufig mit relativ wenig Speicher ausgestattet. Diesen Speicher muss man effektiv nutzen. Auch unser Emulator hat eine Beschränkung des Speichers, und zwar auf 2K Programmspeicher. Mit unseren derzeitigen Programmen stoßen wir schon knapp an diese Grenze.</li>
</ol>
<h2>Was sind Funktionen</h2>
<p>Eine Funktionen, die wir schon kennen, ist die Funktion main(), die direkt zu Beginn vom Mikrocontroller aufgerufen wird.</p>
<p>Weiter Funktionen können definiert und dann innerhalb von main() aufgerufen werden.</p>
<p>In dem Video zeige ich, wie man Funktionen definiert, sie dann aufruft und wie man Parameter übergibt und Rückgabewerte zurückgibt und auswertet.</p>
<h2>Das Video</h2>
<p>Schau Dir zunächst einmal das Video an. Hier geht es zunächst einmal um eine grobe Einordnung des Themas Funktionen.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/YOpW3SQk83A&amp;hl=de_DE&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/YOpW3SQk83A&amp;hl=de_DE&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<div style='float:center; padding-left:10px; margin-left:0px;  padding-top:10px; padding-bottom: 10px;'><center>
<script type="text/javascript"><!--
google_ad_client = "pub-9604435451771969";
/* 336x280, Erstellt 02.01.10 */
google_ad_slot = "6455248777";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center></div></p>
<h2>Jetzt bist Du wieder an der Reihe.</h2>
<p>Die „Hausaufgabe“ ist dieses Mal etwas lose definiert.</p>
<p>Versuche einmal mit diesen Funktionen etwas herum zu experimentieren. Bau also zunächst einmal das Beispiel nach.</p>
<p>Vielleicht fallen Dir ähnliche Aufgabenstellungen ein, die Du mit Funktionen realisieren kannst. An der einen oder anderen Stelle wirst Du wahrscheinlich auf Probleme stoßen, die wir hier noch nicht behandelt haben.</p>
<p>Das stört jedoch nicht – im Gegenteil. Das könnte Dir helfen beim Verständnis helfen, wenn es in den nächsten Folgen um die Feinheiten beim Gebrauch von Funktionen geht.</p>
]]></content:encoded>
			<wfw:commentRss>http://et-tutorials.de/2155/funktionen-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
