Forum: Mikrocontroller und Digitale Elektronik Kleines mathematisches Problem


von MK (Gast)


Lesenswert?

Es handelt sich dabei um einen 80c515 Mk, ich hab dazu ein kleines 
assembler Programm, welches lediglich eine warteschleife darstellt:

http://codepad.org/SouBVBdC

(den Output einfach nicht beachten Zunge raus ).

Hier ist der Programm Ablaufplan(als Link):

http://img440.imageshack.us/my.php?image=papjb4.jpg

Ich bräuchte die Formeln für T1, T2, T3 und T4, ich weiss das es etwas 
mit: T1=4
T2= 5+T1*R1(R1 kann eine Zahl zwischen 0 und 255 sein) war, bin mir aber 
nicht sicher...



Mit den besten wünschen für ein schönes Wochenende

von Matthias L. (matze88)


Lesenswert?

Simulator?

von Matthias L. (Gast)


Lesenswert?

Ich würde die T's als Sprungmarken interpetieren.

Falls du die Schleifendurchlaufzeiten meinst:

T1 = R2_i * 4

T2 = R1_i * T1 + 1

T3 = R0_i * T2 + 1

gesamt
   = T3 + 1

der Index _i bezeichnet den Initialwert des Registers.

von chris (Gast)


Lesenswert?

moin

warum nimmst nicht djnz????

Warten : Mov Ro, # 4    ;Lade Register R0 mit 4 Bit
Marke 1: Mov R1, # 255          ;Lade Register R1 mit 255 Bit
Marke 2: Mov R2, # 255          ;Lade Register R2 mit 255 Bit
Marke 3: Djnz R2,Marke3
         Djnz R1,Marke2
         Djnz Ro,Marke1
         ;ret oder jump was immer du willst

gruss chris

von Johannes (Gast)


Lesenswert?

Hm, da braucht mal wieder jemand Hausaufgabenhilfe? Dein Ansatz ist 
schon richtig...
Das Programm beinhaltet 3 ineinandergeschachtelte Schleifen.
Die innere Schleife benötigt 4 Takte pro Durchlauf: zweimal einen und 
eimal zwei (für den Vergleich A!=0).
Das ganze wird 255 mal augeführt, da R2 mit dieser Zahl initialisiert 
wird. Pro Durchlauf des T2-Loops haben wir also 255*T1 zzgl. einmal 5 
Extra-Takte.
T3-Loop analog: T3=255*T2+5
T4 sehe ich nicht, dürfte aber 4*T3+1 sein.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dein Programm könnte etwas kompakter so beschrieben werden:
1
Warten: 
2
      Mov R0, # 4    
3
M1:   Mov R1, # 255          
4
M2:   Mov R2, # 255          
5
M3:   djnz R2,M3
6
      djnz R1,M2
7
      djnz R0,M1
dann ergibt sich die Anzahl der Schleifendurchläufe an M3 zu 4*255*255.
Aber diese Berechnung ist noch das allerkleinste Problem, das du hast.


Schlimmer sieht es da aus:

> Marke 1:
Labels dürfen keine Leerzeichen enthalten.

> Warten : Mov Ro, # 4    ;Lade Register R0 mit 4 Bit
Ro  abcdef...klmn o pqr...xyz.

> Marke 1: Mov R1, # 255  ;Lade Register R1 mit 255 Bit
> Marke 2: Mov R2, # 255  ;Lade Register R2 mit 255 Bit
In R0..2 passen immer nur 8 Bit.

> Dec R2          ;Vom Inhalt des Registers R2 wird 1 abgezogen
> Mov A,R2        ;Lade Akkumulator mit Inhalt von Register R2
> JNZ Marke 3     ;Springe zu Marke 3 wenn Akkumulator ungl. 0
Dafür gibt es den Befehl  djnz (decrement and jump if not zero).

> Jnz Marke 2     ;Springe zu Marke 2 wenn Akkumulator ungl. 0
> Dec R1          ;Vom Inhalt des Registers R1 wird 1 abgezogen
> Mov A,R1        ;Lade Akkumulator mit Inhalt von Register R1
> JNZ Marke 2     ;Springe zu Marke 2 wenn Akkumulator ungl. 0
Da wird 2 mal an die Marke 2 gesprungen, das ist so sicher nicht 
beabsichtigt.

>T1, T2, T3 und T4
tauchen im Code nirgends auf.

Spare dir die ganzen Kommentare. Das was da steht, steht vorne im Code 
schon wesentlich kompakter und leserlicher... ;-)

EDIT: Schade, zweiter...

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.