Forum: Mikrocontroller und Digitale Elektronik Assembler Schleife und Frage


von Anja (Gast)


Lesenswert?

Hallo!
Kann mir bitte nochmal jemand helfen?
Hab immer noch so meine Probleme in Assembler und C(für den 8051)

1.Programmschleife, die nach 100 Durchläufen zum Label weiter springt:
mov R1,#01H
mov R0,#65H
schleife: djnz R0,schleife
          ljmp weiter
funktioniert das so?

2.Frage: Warum wird für den µC kein gewöhnliches C Entwicklungssystem
verwendet(Visual C++,...)? Ist die Verwendung eines dieser
Standardentwicklungssysteme prinzipiell überhaupt möglich?

3. Hab dann noch 3 kurze Programme in C,
ich häng sie im nächsten Thread mal dran,vielleicht kann sie kurz
jemand durchsehen und verbessern.

Schon jetzt vielen Dank für Eure Hilfe!!
Gruß
Anja

von olaf (Gast)


Lesenswert?

Deine Schleife wird zu oft durchlaufen. Es gibt fuer die MCS51
Softwaresimulatoren mit denen du das selber haettest testen koennen.

C++ wird nicht verwendet weil echte Maenner (TM) das nicht gut finden.
:-)

Im ernst, je abgehobener und abstrakter die Programmiersprache ist um
so mehr Leistung/Resourcen gehen im Controller floeten. Auch jetzt gibt
es schon Microcontroller die so klein sind das man da kaum C verwenden
kann. Wenn man privat in seinem Kaemmerchen programmiert dann ist das
egal, nimmt man einfach einen dickeren Controller. Will man aber
1Million videorecorder oder Toaster bauen um man kann einen Controller
verwenden der 1Euro billiger ist dann ist der Chef gluecklich.

Und der Vorteil von C Programmen ist das du die auch ganz gut auf einem
PC testen koenntest wenn du den wolltest.

Olaf

von Anja (Gast)


Lesenswert?

Danke Dir.
Kann das leider nicht ausprobieren. Mach gerade alte Prüfungen durch.
Hab keine Möglichkeiten das "Zeug" auszuprobieren.
Leider.

von Thomas (Gast)


Lesenswert?

1.) Probies aus. Ich bin jetzt nicht der Assembler kink, aber mines
erachtens musst du "djnz R1, schleife" schreiben. Weil der 8051 auf
low endian basis arbeitet !?

2.) VC++ ist ein 32 bit Compiler. Der Compiler muss aus deinem code
maschienencode erstellen, welchen dein 8051 versteht und auch ausführen
kann. Nur ist das hex format schonmal was anderes wie das PS (win32)
format. Auch die Mnemonics sind von Prozessor zu prozessor anders.

3.) Ehm....welches Programm ?

MfG

von peter dannegger (Gast)


Lesenswert?

Visual C++ ist kein Crosscompiler, d.h. er kann nicht verschiedene
Targets compilieren sondern ausschließlich nur 8086 Code erzeugen.

Ein Crosscompiler ist z.B. der GCC, das ist quasi der Standard-Compiler
für alle möglichen Targets.


Peter

von olaf (Gast)


Lesenswert?

Der MCS51 arbeitet nur mit einem Register. Die Zeile mit R1 ist komplett
ueberfluessig und vermutlich nur deshalb dort weil Anja etwas
abgeschrieben hat was sie nicht versteht.
Aber 65h sind 101 und der Befehl heisst decrement and jump if not Zero.
Ups, dann wird sie ja doch hundert mal durchlaufen, ich werd wohl alt.
:-)

Olaf

von Thomas X. (Gast)


Lesenswert?

mov R1,#01H
mov R0,#64H   ; <--- 64h, nicht 65h
schleife: djnz R0,schleife
          ljmp weiter

was verstehst du unter einem "(un)gewöhnlichen c entwickungssystem" ?

von Anja (Gast)


Lesenswert?

Vielen Dank!!
Hat mir sehr geholfen!
Gruß Anja

von Thomas (Gast)


Lesenswert?

peter dannegger:
Komt ganz darauf an , ob man com Compiler oder von der IDE redet (Anja
meinte ja "Entwicklungssystem"). man kann nämlich in die VC IDE sogar
Java Compiler einbinden (z.B. Symbian SDK).

von Thomas X. (Gast)


Lesenswert?

> Hat mir sehr geholfen!

naja, ich denke was dir wirklich helfen würde, wäre den befehlssatz des
8051 zu studieren :D

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.