Assembler Crashkurs 8051

Gast #3008530
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.
Gast #3011072
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
Gast #3011171
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
Gast #3011180
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.
Gast #3011469
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
#3011756
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
Gast #3012353
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
Gast #3012498
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren