PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schleifen programmieren



Import-Script
11.02.2003, 19:45
Schleifen <BR>Jeder hat, oder wird mal das Problem haben, den uP f&uuml;r einige Zeit eine Warteschleife zu durchlaufen zu lassen. Ich benutze f&uuml;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-&#40;4 &#40;CALL RET Oberprogramm &#41; &#43; 22T POP PUSH&#41; <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 &#62; 33.000.000 Takte eingestellt werden <BR> <BR>Soll&amp; = 9999974 <BR>PRINT <BR>PRINT <BR>FOR vc&amp; = 1 TO 255 <BR> FOR vb&amp; = 1 TO 255 <BR> FOR va&amp; = 1 TO 255 <BR> Takt&amp; = &#40;&#40;va&amp; &#42; 2 &#43; 1&#41; &#42; vb&amp; &#43; vb&amp; &#42; 2 &#43; 1&#41; &#42; vc&amp; &#43; vc&amp; &#42; 2 &#43; 1 <BR> IF INT&#40;Soll&amp; / 10&#41; = INT&#40;Takt&amp; / 10&#41; THEN <BR> PRINT &#34;va=&#34;; va&amp;; &#34; ba=&#34;; vb&amp;; &#34; vc=&#34;; vc&amp;; &#34; Takt=&#34;; Takt&amp; <BR> END IF <BR> NEXT va&amp; <BR> NEXT vb&amp; <BR>NEXT vc&amp; <BR> <BR>Bis dann <BR>

Import-Script
12.02.2003, 16:37
Zeit schinden und Akku retten kann man auch anders: <BR> <BR> <BR> <BR> <BR>bla <BR>bla <BR>bla <BR>LCALL pause <BR>bla <BR>bla <BR>bla <BR> <BR> <BR> <BR> <BR>pause: <BR>PUSH A <BR>MOV R0, #ffh <BR>loop1: <BR>MOV R1, #ffh <BR>loop2: <BR>MOV R2, #ffh <BR>loop3: <BR>DJNZ R2, loop3 <BR>DJNZ R1, loop2 <BR>DJNZ R0, loop1 <BR>POP A <BR>RET <BR>

Import-Script
13.02.2003, 09:16
Sieht irgendwie aus, wie von hinten durch die Brust ins Auge. <BR> <BR>Du must also ein extra Basic-Programm bem&uuml;hen, um die Verzögerungen auszurechnen. Und wenn dann mal ein anderer Quarz rein soll, mußt Du sämtliche Berechnungen neu machen. <BR>Wirklich äußerst umständlich und fehleranfällig. <BR> <BR> <BR>Da ist es doch wesentlich einfacher, man benutzt eine Macro-fähigen Assembler, wie z.B. den Metalink oder Keil. Die machen nämlich alles vollautomatisch f&uuml;r Dich. <BR> <BR>Das dazu benötigte Macro sieht so aus: <BR> <BR><a href="http://www.specs.de/users/danni/appl/soft/delay/mdelay.mac" target=_top>http://www.specs.de/users/danni/appl/soft/delay/mdelay.mac</a> <BR> <BR> <BR>Peter <BR>