80C51/52 kleines Programm

Sep 08, 2003 4 Replies

Hi, ein kleines Prgramm für einen 80C51/52 soll folgendes können: Akku auf Null setzen, anschließend inkremetieren bis der Akku den Wert



10 erreicht hat und dann in eine endlosschleife verzweigen. für den Vergleich is das Register R0 zu nehmen.

ich habe das folgenderweise gelöst:



MOV R0, #10 CLR A LOOP: INC A CJNE A, R0; LOOP ENDLOS: NOP JMP ENDLOS



In der Musterlösung steht das so drin: CLR A MOV R=,#10 LOOP: INC A DJNZ R0,LOOP ENDLOS: NOP JMP ENDLOS



Ist das prinzipiell egal wie das ausgeführt wird, oder gibt es gravierende Vor/Nachteile, oder ist ersteres schlichtweg falsch?



Danke schonmal, Timo



Hi

evtl. ist die zweite Lösung ein paar Takte schneller/Bytes kleiner. Schau mal ins Datenblatt wieviele Zyklen/Bytes djnz bzw. cjne haben. Ansonsten wäre da noch zu erwähnen das der 8051 der Befehl jmp garnicht kennt. D.h. es muß ein Assembler verwendet werden der aus dem jmp automatisch ermittelt ob es ein sjmp/ajmp/ljmp ist.

-- Matthias Weißer snipped-for-privacy@matwei.de

formatting link

Hallo Timo,

Diese Lösung entspricht der Aufgabe. Bei CJNE wird gesprungen, wenn der Akku ungleich R0 ist.

funktioniert zwar auch, entspricht aber nicht der Aufgabe. DJNZ dekrementiert R0 und springt, wenn 0. Nach verlassen von LOOP ist R0=0, bei Deiner Lösung bleibt R0=10 und wird gemäß der Aufgabe für den Vergleich verwendet.

Gruß Gerd

Timo Gerber schrieb...

Nach Prozessorhandbuch geht aber "CJNE A,Rx,rel" nicht. Es geht nur "CJNE A,direct,rel". Es k=F6nnte sein, da=DF Dein Assembler aber unter=20 Kenntniss der aktuellen Registerbank daraus den 'richtigen' Befehl=20 generiert.

Das NOP k=F6nnte man sich noch sparen, damit die Endlosschleife noch ein=20 wenig schneller abgearbeitet wird ;-)

=20

W=FCrde so auch gehen. Wobei die erste L=F6sung IMO etwas eleganter ist,=20 wenn man =FCberhaupt von Eleganz sprechen kann. Die Eleganteste L=F6sung=20 w=E4re, A direkt mit 10 zu initialisieren und dann zu schleifen.

- Heinz

Danke an alle Antworten, hat mir gut weitergeholfen. Timo

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required