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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.