In Situationen, in denen Wartezeiten als unkritisch angesehen werden können (wie. z.B. Zeitschleifen für die Tasten-Wiederholfunktion), wurden ,,normale'' Software gesteuerte Zeitschleifen programmiert, die jederzeit kurzzeitig durch Interrupts unterbrochen werden können.
Es existieren Unterprogramme mit fixen Verzögerungen im Bereich von
bis zu 1 Sekunde, sowie Zeitschleifen mit variablen
Parametern. Diese können kombiniert werden um alle benötigten Verzögerungen
zu erzielen.
; ---------------------------------
; fixed time delay for approx. 50 msec
; ---------------------------------
; input: none
; output: none
; affected: flags
;
TIME_50MS: ; 3 - rcall assumed
push temp2 ; 2
ldi temp2, 0x00 ; 1
TIME_50MS_L:
rcall TIME200US ; 779*256
dec temp2 ; 1*256
brne TIME_50MS_L ; 255*2
; 1 - loop true value
pop temp2 ; 2
ret ; 4
; 3+2+1+779*256+1*256+2*255+1+2+4=200203
; 200203/4000000*1000=50.05075 msec
Aufruf-Beispiel einer parametrisierten Zeitverzögerung (Parameter
der Zeitverzögerung in Millisekunden im Register temp2):
...
ldi temp2, Speedup_MSecs ; loop time for go up phase
rcall wait_msecs ; wait Speedup_MSecs millisecs
rjmp increase_speed ; ... increase speed
Alle Software-Timer Funktionen sind in der Datei lib/delay.lib definiert.
gerhard.reithofer@tech-edv.co.at