Das Elektor-Forum schließt seine Pforten (siehe auch http://www.elektormagazine.de/forum). Ab Freitag, den 15. März, ist es nicht mehr möglich, sich im Forum einzuloggen. Alle Inhalte des Forums bleiben jedoch bis Ende März noch sichtbar. Am 01. April wird das Forum schließlich komplett geschlossen.

Lehrbrief 7, Fragen Seite 42

Postby olivarius » Tue Apr 27, 2010 12:00 am

Hallo,

kann mir jemand verraten, warum man in der For-Schleife mit der Hilfsvariablen arbeiten muß?
(LB_7, Seite 42)
Danke!

Oliver
olivarius
 
Posts: 13
Joined: Fri Jan 03, 2014 2:13 pm

Postby μtronix » Wed Apr 28, 2010 12:00 am

Hallo Oliver,

für die Zählschleife benötigst Du eine richtige Variable, die z.B. mit "unsigned char" definiert wird. In diesem Fall ist zwar "daw" auch vom Typ "unsigned char", aber es besteht ein wesentlicher Unterscheid:

Während z.B "unsigned char i=0;" einen bestimmten Speicherbereich -hier mit der Größe von einem Byte- im RAM belegt, ist dies z.B. bei "xdata unsigned char daw @ 0xe000;" etwas völlig anders. In diesem Fall bezeichnet "daw" eine bestimmte Stelle im Adressraum des CC03. Die angeschlossene externe Peripherie wird in diesem Fall über den nach außen geführten parallelen Adress- und Datenbus angesprochen.

Der Vorteil in der hier verwendeten Programmiersprache besteht darin, daß diese Speicherbereiche wie eine Variable angesprochen werden können, etwa "daw=100;". Dennoch sind diese keine "echten" Variablen im eigentlichen Sinn, sondern Synonyme für die explizit anzugebenden Adressen.

Schau Dir zum diesem Thema mal das Blockdiagramm im Datenblatt auf Seite 2 an.


Viele Grüße
Patrick
μtronix
 
Posts: 197
Joined: Fri Jan 03, 2014 2:12 pm

Postby bvb » Wed Apr 28, 2010 12:00 am

Hallo Oliver,
die Antwort auf Deine Frage muß etwas anders lauten:
wenn man programmiert for(daw=0; daw<=255; daw++) dann bedeutet das, daß man bei jedem Schleifendurchlauf die Variable daw aus dem AD558 AUSLESEN muß, denn daw ist ja das SFR im AD558.
Das ist aber gar nicht möglich, wenn Du Dir die Abb.4.2.3 genau ansiehst: der Chip hat nur einen Schreib(WR\)-Anschluß, es kann also nur ein Wert in das Register daw eingeschrieben werden.
daw kann niemals ausgelesen werden, da der AD558 gar keinen Lese-Anschluß hat !

Daher muß man mit einer Hilfsvariablen i arbeiten, die ganz normal im Datenspeicher-RAM abgelegt ist, und die somit beschreib- und auslesbar ist.

Viele Grüße

Bernd
bvb
 
Posts: 190
Joined: Fri Jan 03, 2014 1:53 pm

Postby olivarius » Wed Apr 28, 2010 12:00 am

Vielen Dank für eure Antworten. Wieder was dazu gelernt
olivarius
 
Posts: 13
Joined: Fri Jan 03, 2014 2:13 pm


Return to Mikrocontroller-Fernlehrgang (TFH)

Who is online

Users browsing this forum: No registered users and 1 guest