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.
@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
> 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
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.
> 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
... ... 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.
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
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???
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
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.
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
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.)
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!?