-         
RSS-Feed anzeigen

enprog

Zeitschleifenbibliothek

Bewerten
Hallo,
hier stelle ich meine Zeitschleifenbibliothek vor.
Es enthält genaue Zeitschleifen von 1Mikrosekunde bis 1Minute. Und mann kann Zeitschleifen über eine verschachtelte Zeitschleife X mal aufrufen. Zum Beispiel, für 3 Sekunden
warten , lädt man in Register X eine 3 und ruft WX1s auf.
Alles andere ist im Quellkode Komentaren beschrieben.
Wenn noch Fragen, ich Antworte gerne.
Gruß

Code:
;*********************************************************************************
;       Titel: SR_TIME_16M 
;       Datum: 13.12.2012
;       Autor: enprog
;       
;       InformNationen zur Beschaltung
;       Prozessor: ATmega32    Quarzfrequenz:16MHz
;       Eingänge:
;       Ausgänge:
;       Information zur Funktionsweise: Zeitschleifenbibliothek
;
;*******************************************************************************

;Wait 1us
W1us: nop
      nop
	  nop
	  nop
	  nop
	  nop
	  nop
	  nop
	  nop
	  ret

; 16bit Zeitschleife wartet 10us(Wait 10us)
 
 W10us:  push WL ;rette verwendete Registerinhalte
        push WH 
		ldi WL,0x24  ;Schleifenzähler W=24
		ldi WH,0x00 

W10usL: sbiw  WL,1    ;dekrementiere den schleifenzähler W
       brne  W10usL   ; Schleife wenn nicht gleich null
	   pop WH         ;Registerinhalte Wiederherstellen
	   pop WL
	   ret   


; 16bit Zeitschleife wartet 100us(Wait 100us)
 
 W100us:  push WL ;rette verwendete Registerinhalte
        push WH 
		ldi WL,0x8c  ;Schleifenzähler W=396
		ldi WH,0x01 

W100usL: sbiw  WL,1    ;dekrementiere den schleifenzähler W
       brne  W100usL   ; Schleife wenn nicht gleich null
	   pop WH         ;Registerinhalte Wiederherstellen
	   pop WL
	   ret   

	; verschachtelte 16bit Zeitschleife wartet X mal 100us
	
WX100us: tst XL           ; Teste ob das Register gleich null oder negativ ist.Wenn X=0 dann zurück.
       brne WX100us      ;Sprung wenn nicht gleich null
	   tst XH
	   brne WX100us
	   ret
WX100us:push XL           ;rette verwendete Registerinhalte
       push XH
WX100usL: rcall  W100us     ;Rufe innere Schleife (Uterprogramm W1ms)
        sbiw  XL,1      ;dekrementiere den	 Schleifenzähler
		brne  WX100usL     ;Schleife
		pop   XH         ;Registerinhalte Wiederherstellen
		pop   XL
		ret

 


 
 
 ; 16bit Zeitschleife wartet 1ms(Wait 1ms)
 
 W1ms:  push WL ;rette verwendete Registerinhalte
        push WH 
		ldi WL,0x9C  ;Schleifenzähler W=3996
		ldi WH,0x0F 

W1msL: sbiw  WL,1    ;dekrementiere den schleifenzähler W
       brne  W1msL   ; Schleife wenn nicht gleich null
	   pop WH         ;Registerinhalte Wiederherstellen
	   pop WL
	   ret   
	

	   
	; verschachtelte 16bit Zeitschleife wartet X mal 1ms
	
WX1ms: tst XL           ; Teste ob das Register gleich null oder negativ ist.Wenn X=0 dann zurück.
       brne WX1msp      ;Sprung wenn nicht gleich null
	   tst XH
	   brne WX1msp
	   ret
WX1msp:push XL           ;rette verwendete Registerinhalte
       push XH
WX1msL: rcall  W1ms     ;Rufe innere Schleife (Uterprogramm W1ms)
        sbiw  XL,1      ;dekrementiere den	 Schleifenzähler
		brne  WX1msL     ;Schleife
		pop   XH         ;Registerinhalte Wiederherstellen
		pop   XL
		ret

	; 16bit Zeitschleife wartet 10ms(Wait 10ms)
 
 W10ms:  push WL ;rette verwendete Registerinhalte
        push WH 
		ldi WL,0x3c  ;Schleifenzähler W=39996
		ldi WH,0x9c 

W10msL: sbiw  WL,1    ;dekrementiere den schleifenzähler W
       brne  W10msL   ; Schleife wenn nicht gleich null
	   pop WH         ;Registerinhalte Wiederherstellen
	   pop WL
	   ret   


	; verschachtelte 16bit Zeitschleife wartet X mal 10ms
	
WX10ms: tst XL           ; Teste ob das Register gleich null oder negativ ist.Wenn X=0 dann zurück.
       brne WX10msp      ;Sprung wenn nicht gleich null
	   tst XH
	   brne WX10msp
	   ret
WX10msp:push XL           ;rette verwendete Registerinhalte
       push XH
WX10msL: rcall  W10ms     ;Rufe innere Schleife (Uterprogramm W1ms)
        sbiw  XL,1      ;dekrementiere den	 Schleifenzähler
		brne  WX10msL     ;Schleife
		pop   XH         ;Registerinhalte Wiederherstellen
		pop   XL
		ret

 ; 16bit Zeitschleife wartet 100ms(Wait 100ms)
 
 W100ms:  push WL                 ;rette verwendete Registerinhalte
        push WH 
		push r16
		ldi WL,0x50                  ;Schleifenzähler W=3920
		ldi WH,0x0f 
		ldi r16,0x63                ; r16=99
W100msr16:rcall W1ms                 ;unterprogramm W1ms wird 99mal aufgerufen
          subi r16,1                ;decrementiere r16
		  brne W100msr16            ; Schleife wenn r16 nicht gleich null

W100msL: sbiw  WL,1                ;dekrementiere den schleifenzähler W
       brne  W100msL              ; Schleife wenn nicht gleich null
	   nop
	   nop                        ; no operation für präzise Zeit
	   nop
	   pop r16
	   pop WH                     ;Registerinhalte Wiederherstellen
	   pop WL
	   ret 
	   
	; verschachtelte 16bit Zeitschleife wartet X mal 100ms
	
WX100ms: tst XL           ; Teste ob das Register gleich null oder negativ ist.Wenn X=0 dann zurück.
       brne WX100msp      ;Sprung wenn nicht gleich null
	   tst XH
	   brne WX100msp
	   ret
WX100msp:push XL           ;rette verwendete Registerinhalte
       push XH
WX100msL: rcall  W100ms     ;Rufe innere Schleife (Uterprogramm W1ms)
        sbiw  XL,1      ;dekrementiere den	 Schleifenzähler
		brne  WX100msL     ;Schleife
		pop   XH         ;Registerinhalte Wiederherstellen
		pop   XL
		ret
	     


; 16bit Zeitschleife wartet 1s(Wait 1s)
 
 W1s:  push WL                 ;rette verwendete Registerinhalte
        push WH 
		push r16
		ldi WL,0xf0                  ;Schleifenzähler W=39920
		ldi WH,0x9b 
		ldi r16,0x63                ; r16=99
W1sr16:rcall W10ms                 ;unterprogramm W1ms wird 99mal aufgerufen
          subi r16,1                ;decrementiere r16
		  brne W1sr16            ; Schleife wenn r16 nicht gleich null

W1sL: sbiw  WL,1                ;dekrementiere den schleifenzähler W
       brne  W1sL              ; Schleife wenn nicht gleich null
	   nop
	   nop                        ; no operation für präzise Zeit
	   nop
	   pop r16
	   pop WH                     ;Registerinhalte Wiederherstellen
	   pop WL
	   ret   

	; verschachtelte 16bit Zeitschleife wartet X mal 1s
	
WX1s: tst XL           ; Teste ob das Register gleich null oder negativ ist.Wenn X=0 dann zurück.
       brne WX1sp      ;Sprung wenn nicht gleich null
	   tst XH
	   brne WX1sp
	   ret
WX1sp:push XL           ;rette verwendete Registerinhalte
       push XH
WX1sL: rcall  W1s     ;Rufe innere Schleife (Uterprogramm W1ms)
        sbiw  XL,1      ;dekrementiere den	 Schleifenzähler
		brne  WX1sL     ;Schleife
		pop   XH         ;Registerinhalte Wiederherstellen
		pop   XL
		ret


; 16bit Zeitschleife wartet 1m(Wait 1m)
 
 W1m:  push WL                 ;rette verwendete Registerinhalte
        push WH 
		push XL
		push XH
		ldi WL,0xca                  ;Schleifenzähler W=33994
		ldi WH,0x84 
		ldi XL,6f
		ldi XH,17               ; x=5999
W1m10ms:rcall W10ms                 ;unterprogramm W1ms wird 5999mal aufgerufen
          sbiw XL,1                ;decrementiere X
		  brne W1m10ms            ; Schleife wenn X nicht gleich null

W1mL: sbiw  WL,1                ;dekrementiere den schleifenzähler W
       brne  W1mL              ; Schleife wenn nicht gleich null
	   nop
	   nop                        ; no operation für präzise Zeit
	   nop
	   pop XH
	   pop XL
	   pop WH                     ;Registerinhalte Wiederherstellen
	   pop WL
	   ret   

	; verschachtelte 16bit Zeitschleife wartet X mal 1m
	
WX1m: tst XL           ; Teste ob das Register gleich null oder negativ ist.Wenn X=0 dann zurück.
       brne WX1mp      ;Sprung wenn nicht gleich null
	   tst XH
	   brne WX1mp
	   ret
WX1mp:push XL           ;rette verwendete Registerinhalte
       push XH
WX1mL: rcall  W1m    ;Rufe innere Schleife (Uterprogramm W1ms)
        sbiw  XL,1      ;dekrementiere den	 Schleifenzähler
		brne  WX1mL     ;Schleife
		pop   XH         ;Registerinhalte Wiederherstellen
		pop   XL
		ret

"Zeitschleifenbibliothek" bei Twitter speichern "Zeitschleifenbibliothek" bei Facebook speichern "Zeitschleifenbibliothek" bei Mister Wong speichern "Zeitschleifenbibliothek" bei YiGG.de speichern "Zeitschleifenbibliothek" bei Google speichern "Zeitschleifenbibliothek" bei del.icio.us speichern "Zeitschleifenbibliothek" bei Webnews speichern "Zeitschleifenbibliothek" bei My Yahoo speichern

Kommentare