Import-Script
11.02.2003, 19:45
Schleifen <BR>Jeder hat, oder wird mal das Problem haben, den uP für einige Zeit eine Warteschleife zu durchlaufen zu lassen. Ich benutze für diese Zwecke eine dreifach verschachtelte Schleife, bei der ich zuvor alle Register rette und die Schleife mit einem CALL abarbeite. <BR> <BR>Beispiel : <BR> <BR>t100ms: ;--- 100.000 Takte--- <BR>;Taktberechnung <BR>; 99.974 = 100.000-(4 (CALL RET Oberprogramm ) + 22T POP PUSH) <BR> PUSH ACC <BR> MOV A ,R0 <BR> PUSH ACC <BR> MOV A ,R1 <BR> PUSH ACC <BR> MOV A ,R2 <BR> PUSH ACC <BR> <BR> MOV R2 ,#4 <BR>t100ms_2: <BR> MOV R1 ,#102 <BR>t100ms_0: <BR> MOV R0 ,#121 <BR> DJNZ R0 ,$ <BR> <BR> DJNZ R1 ,t100ms_0 <BR> DJNZ R2 ,t100ms_2 <BR> <BR> NOP <BR> <BR> POP ACC <BR> MOV R2 ,A <BR> POP ACC <BR> MOV R1 ,A <BR> POP ACC <BR> MOV R0 ,A <BR> POP ACC <BR> <BR> RET <BR> <BR>Die Frage ist nun, wir groß sind die Register : <BR> <BR>Hierzu habe ich ein QBASIC-Programm geschrieben, das mir die Werte errechnet. Duch verändern der Variablen kann das Programm einfach angepaßt werden. Es können > 33.000.000 Takte eingestellt werden <BR> <BR>Soll& = 9999974 <BR>PRINT <BR>PRINT <BR>FOR vc& = 1 TO 255 <BR> FOR vb& = 1 TO 255 <BR> FOR va& = 1 TO 255 <BR> Takt& = ((va& * 2 + 1) * vb& + vb& * 2 + 1) * vc& + vc& * 2 + 1 <BR> IF INT(Soll& / 10) = INT(Takt& / 10) THEN <BR> PRINT "va="; va&; " ba="; vb&; " vc="; vc&; " Takt="; Takt& <BR> END IF <BR> NEXT va& <BR> NEXT vb& <BR>NEXT vc& <BR> <BR>Bis dann <BR>