1 Software-gesteuerte Zeitschleifen

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 $200\,\mu s$ 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