Forum: Mikrocontroller und Digitale Elektronik Assembler Crashkurs 8051


von Christoph (Gast)


Lesenswert?

Hi,
ich muss jemanden etwas Nachhilfe für die Prüfungsvorbereitung 
(Studiengang Maschinenbau) geben. Konkret geht es um µC-Technik mit 
Assemblerprogrammierung.

Nun suche ich ein Leitfaden bzw. einen Crashkurs für die 8051-Familie, 
ich selbst habe leider nicht mehr sehr viel Unterlagen was Assembler 
betrifft. ein schriftliches Dokument würde mir hier etwas helfen.

Im web findet man zwar sehr viel Informationen, jedoch fast nur für 
80x86, hier sind die Befehlssätze doch etwas anders.

Kennt jemand ein gutes Tutorial oder könnte vlt. mit einem PDF 
aushelfen!?

Ich muss (aufgrund des zeitlichen Rahmens) mehr oder weniger nur einen 
Crashkurs geben und habe selbst leider keine Unterlagen, das Skript des 
Schülers gibt diesbzgl. leider auch nicht sehr viel her...

Mein Schüler kann etwas Java-Programmieren, als Grundlage finde ich das 
jetzt erstmal nicht schlecht. Hat zwar jetzt erstmal wenig mit Assembler 
zu tun, aber immerhin kann man so schonmal einen Bezug zum "echten" 
Programmieren, wie man es dann im späteren Beruf benötigt, herstellen.

von Peter D. (peda)


Lesenswert?


von Stefan (Gast)


Lesenswert?

Am hilfreichsten fand ich immer das Handbuch zum Siemens SAB80515. Das 
war meine Referenz, auch wenn ich meistens kleinere Chips aus der MCS51 
Serie verwendet hatte (z.B. AT89C1051).

http://www.ieap.uni-kiel.de/surface/ag-berndt/lehre/fpmc/infineon/m80515.pdf

von Georg G. (df2au)


Lesenswert?

Feger und Reith haben auch einiges für Anfänger geschrieben. Es geht da 
zwar oft um 80515/80535, aber die Grundlagen sind die gleichen.

von Ralph B. (rberres)


Lesenswert?

Schaue mal nach Mikrocontroller Kochbuch.

Da ist sowohl die Hardware, als auch die Befehle des 8051 sehr gut 
beschrieben.

Ralph Berres

von Bernd N (Gast)


Lesenswert?


von Christoph (Gast)


Lesenswert?

vielen Dank für die links, da ist glaub einiges an verwertbarem Material 
dabei!

Danke!

von Ralf (Gast)


Lesenswert?

@Christoph:
> Mein Schüler kann etwas Java-Programmieren, als Grundlage finde ich das
> jetzt erstmal nicht schlecht.
Das sehe ich anders. In Java und anderen Hochsprachen legt man beim 
Erstellen einer Variablen den Typ und ggf. gleich noch einen Initialwert 
fest.
Der Programmierer braucht sich nicht um's Speichermanagement etc. 
kümmern, das macht alles der Compiler/Linker/etc.

In Assembler (oder genauer: zumindest in den meisten 8051-Assemblern) 
ist der Programmierer a) für's Management, b) den Typ und c) das 
(korrekte) Initialisieren zuständig.

Punkt a) bedeutet, dass ggf. manuell die Speicheradressen für temporäre 
Variablen überlagert werden müssen, wenn's der Assembler nicht 
automatisch unterstützt (da fällt mir ein, weiss jemand wie das beim 
originalen Intel-MCS51-Assembler geht?). Hinzu kommt, dass man 
beispielsweise Bits auf einem 8051 wirklich in einem RAM-Bereich, der 
extra für einzelne Bits vorgesehen ist, ablegt (sofern man das Teil 
optimal nutzen will). In Hochsprachen sind binäre Variablen i.d.R. 
genauso groß wie die Wortbreite der Plattform, also beispielsweise 
32-Bit -> 31 Bit "verschenkt". Auf nem PC spielt das kaum ne Geige, weil 
da genug RAM da ist und eine Plattform, die Bits nicht per se 
unterstützt mit dem Ansatz besser zurecht kommt.
ABER: Auf einem Standard 8051 Controller wird man Bit-Knautschen ab 
einer gewissen Programmkomplexität lernen und zu schätzen wissen.

Für b) wird's schon lauschig, erstens ist der 8051 eine 8-Bit-MCU, d.h. 
jede Berechnung mit Variablen mit mehr als 8-Bit setzt sich aus 
8-Bit-Berechnungen zusammen (viel Spaß bei Divisionen, etc.), und wenn's 
dann keine Ganzzahlberechnungen, sondern floats etc. sein müssen, dann 
wird's lauschig².

Punkt c) ist je nachdem trivial, aber es muss zu Fuß gemacht werden, 
über die entsprechenden MCU-Instruktionen.

Dein "Lehrling" muss sich also zusätzlich zum anderen Befehlssatz von 
solchen Sachen verabschieden - oder sich die entsprechenden Grundlagen 
wirklich in high-speed erarbeiten müssen.

Ralf

von Stefan (Gast)


Lesenswert?

Wer eine Programmiersprache gelernt hat, aknn sicher auch eine zweite 
lernen. Damit wird er sicherkein Problem haben.

von Ralf (Gast)


Lesenswert?

> Wer eine Programmiersprache gelernt hat, aknn sicher auch eine zweite
> lernen.
Kein Zweifel.

> Damit wird er sicherkein Problem haben.
Zwischen den Hochsprachen ist es aber denke ich einfacher als zwischen 
Hochsprache und Assembler.

Ralf

von Wilhelm F. (Gast)


Lesenswert?

Georg G. schrieb:

> Feger und Reith haben auch einiges für Anfänger geschrieben. Es geht da
> zwar oft um 80515/80535, aber die Grundlagen sind die gleichen.

Die waren sehr gut. Es gab auch einen Teil 1, Einführung in die 
Software, mit Software-Strategien und einer Menge Beispielsoftware z.B. 
Mehrbyte-Wandlungen zwischen BCD und BIN, Tastaturen aller Art, 
Arithmetik in 32 bit, und den Assembler auf Buchdiskette, mit 
vollständiger Beschreibung im Buch.

Das von Ralph Berres genannte Mikrocontroller-Kochbuch ist auch 
ausgezeichnet, damit begann ich vor 20 Jahren mit dem 8051.

Ob in PDF erhältlich, wage ich zu bezweifeln. Ich würde da als erstes 
meine Hochschulbibliothek ansteuern, da steht bestimmt einiges zum 8051 
herum.

von ... .. (0x01)


Lesenswert?

Wo kann man eigentlich noch einen 8051 in Deutschland kaufen?
Ich habe auf einigen Internetseiten gesucht aber nichts gefunden.

0x01

von Ralf (Gast)


Lesenswert?

> Ich habe auf einigen Internetseiten gesucht aber nichts gefunden.
oO Dann haste falsch gesucht.

> Wo kann man eigentlich noch einen 8051 in Deutschland kaufen?
Überall, Reichelt, Conrad, Digikey, Mouser, Avnet, etc. Alle hamse 
8051er im Angebot, die originalen mit der 12er-Taktteilung, SiLabs mit 
25/50/100MHz single-cycle-core, etc. Auch die Cypress PSoC mit 
8051-Core, alles da!!!

Ralf

von Wilhelm F. (Gast)


Lesenswert?

... ... schrieb:
> Wo kann man eigentlich noch einen 8051 in Deutschland kaufen?
> Ich habe auf einigen Internetseiten gesucht aber nichts gefunden.
>
> 0x01

Haben Segor und Reichelt nichts?

Denn sie haben schon mal noch 8085.

von Peter D. (peda)


Lesenswert?

Z.B. CSD:
AT89C51RB2-3CSUM
3,8675 EUR

Hat Bootloader, man braucht also kein Programmiergerät.

http://www.csd-electronics.de/200/cgi-bin/shop.dll?SESSIONID=0240229260642082&AnbieterID=2

von Ralph B. (rberres)


Lesenswert?

Der 8051 war die Version, wo das Programm herstellerseitig in Stein  ähm 
Silizium gemeiselt wurde. Istt also eine Geräteherstellerspezifische 
Version. Man kann den internen Rom zwar abschalten und ein externes Rom 
anschließen, um ihn verwenden zu können. Die Allgemein erhältliche 
Version heist 8031 mit 256MB Ram und 8032 mit 512MB Ram. Dann gab es 
noch den 8057 das war eine Version mit Eprom , war aber selten und 
teuer.

Später kam dann der 80525 und 80527 raus.

Ralph Berres

von Maier (Gast)


Lesenswert?

Ralph Berres schrieb:
> Die Allgemein erhältliche
> Version heist 8031 mit 256MB Ram und 8032 mit 512MB Ram.

Bist du dir bei den Größen des Speichers sicher?
Ein 8031 mit 256 MegaByte RAM, wie machst du das???

von Ralph B. (rberres)


Lesenswert?

OH Pardon Ich meinte Byte.

Das Interne Ram ist wirklich nicht groß.

256Byte beim 8031 und 512Byte beim 8032 ( oder waren es sogar nur die 
Hälfte? ).

Ralph Berres

von Georg G. (df2au)


Lesenswert?

Ralph Berres schrieb:
> Dann gab es
> noch den 8057 das war eine Version mit Eprom , war aber selten und
> teuer.

Der nennt sich 8751 und wird in Gold aufgewogen. Das dazugehörige 
Programmiergerät steht im Deutschen Museum in München.

von Ralph B. (rberres)


Lesenswert?

Georg G. schrieb:
> Der nennt sich 8751 und wird in Gold aufgewogen. Das dazugehörige
>
> Programmiergerät steht im Deutschen Museum in München.

stimmt!

Jetzt wo du es sagst erinnere ich mich auch wieder.

Ralph Berres

von 8051 Kurs (Gast)


Lesenswert?


von Helfender (Gast)


Lesenswert?

Gerade im Netz gefunden, vielleicht hilfts,
dann wird der Kurs vielleicht etwas praktischer:

http://www.edsim51.com/

(Selber nie eingesetzt, noch Ahnung ob es was kostet
und was man alles dazu braucht usw.)

von Manuel X. (vophatec)


Lesenswert?

Hm.

Ich finde ja das es nicht wirklich ausreicht sich den Assembler 
Befehlssatz ins Hirn zu hämmern. Grundlagen über CPU, Bus, Speicher, 
etc. sind da viel wichtiger. Und in kürze ist da nicht viel zu machen.

Unser Assembler Script (80c535) hatte dezente 600 Seiten 
(Technikerschule).

Ansonsten ist dieses hier nicht schlecht :

http://www.vogel-buchverlag.de/product_info.php/info/p57_Elektronik-5--Mikroprozessortechnik.html/XTCsid/1d3e87e32dc75d45305f6ec5589be060

von Christoph (Gast)


Lesenswert?

Hi,
nochmal danke für Eure Beiträge.

Mir ist durchaus bewußt dass auch Grundlagen über CPU, Bus, Speicher,
etc. für eine erfolgreiche Klausur notwendig sind.

Doch diese Zeit haben wir nicht. der Student dem ich Nachhilfe geben 
benötigt nur ein "BE" = Bestanden. Er hat schon etwas Grundkentnisse und 
auch Begriffe wie RAM, Adress-Datenbus und sonstige sind ihm bekannt.

Die Klausur ist nur ein Schein und es gibt keine Note, daher zielen wir 
jetzt auf 60 von 100 möglichen Punkten!



Zur allgm. Disskusion (oder dass, was aus meinem Thread wurde):

a.)
 Ich finde es durchaus gut, wenn man schon Java-Kentnisse hat. Das Hex- 
und Bin-System ist einem geläufig, man kennt schon ein wenig die Art und 
Weise wie man programmiertechnisch Probleme löst und es ist auch gut 
wenn man erklären kann dass ein [JNB] sowas ähnliches wie ein if ist und 
ein [DJNZ] sich hervorragend für Schleifen eignet.

b.)
Den "Ur-8051" (12er-Taktteilung) gibt es nicht mehr sehr oft. Conrad, 
Reichelt und Co bieten meist die 50- oder 100MHz-Variante an.

c.)
ABER: und das muss ich hier jetzt sagen, ich finde es traurig dass 
Maschinenbaustudenten noch assembler lernen müssen! - Zumal auf einem 
System das über 30 Jahre alt ist.
Ein halbwegs moderner µC (z.B. ein AVR, ein MSP oder ein ARM bzw. Cortex 
M3-Derivat) zusammen mit einer aktuellen IDE und eine venüftigen 
Hochsprache (C), würde den Berufsstartern deutlich besser helfen.

Bei Informatikern, welche die Materie bis ins kleinste Detail kennen 
sollten, ist das OK.
Aber ein MB sollte doch eher Kentnisse ins SPS, oder C haben.

Ich bin der Meinung hier stimmt das Gleichgewicht nicht mehr. Ein 
Maschinenbauer wird m.E. nie wieder etwas mit Assembler zu tun haben. 
Viel besser wäre es, sie würden lernen wie man eine SPS programmiert, 
dass sie den Unterschied zwischen AWL und FUP kennen, dass sie sich im 
CoDeSys, TwinCat oder im Step7 zurecht finden, und weil es eben doch um 
µC-Technik geht: dass sie C-Kentnisse oder meinetwegen auch Java können!


Auch ein Beispiel: der letzte Student den ich in meiner Firma betreuen 
musste (1. Praxissemester Maschinenbau) fragt mich wo der Unterschied 
zwischen "if-" und "for-" liegt!?
Eine brauchbare Hochsprache, welche die Studenten dann für ihr späteres 
Arbeitsleben auch benötigen können, lernen die dort anscheinend nicht!?

Beitrag #4985569 wurde von einem Moderator gelöscht.
Beitrag #4985944 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.