; **********************************************************
; * Mehr Action: LED-Blinker mit Verzoegerung              *
; * (C)2005 by info@avr-asm-tutorial.net                   *
; **********************************************************
;
.INCLUDE "tn13def.inc"
;
; Schaltbild:
;                   ATMEL ATtiny13
;                     ___   ____
;            ___    1/   |_|    |8
;+5 Volt O--|___|----|Res    Vcc|----O + 5 Volt
;                    |          |
;                    |PB3    PB2|
;                    |          |6  ___
;                    |PB4    PB1|--|___|--|<|--O + 5 Volt
;                   4|          |   330   LED
;        0 Volt O----|Gnd    PB0|
;                    |__________|
;
; Benutzte Register
;
; ZH:ZL (R31:R30) ist Zaehlregister fuer Verzoegerung
;
; Programm
;
	sbi DDRB,1 ; PB1 ist Ausgang
loop:
	sbi PORTB,1 ; 1 Takt, Ausgang auf Eins (LED ist aus)
;
; Verzoegerungsschleife Eins
; Registerpaar Z = ZH:ZL wird von Null rueckwaerts auf Null gezaehlt
;
loop1:
	sbiw ZL,1 ; 2 Takte, Ziehe von ZH:ZL eine 1 ab 
	brne loop1 ; 2 Takte bei Sprung, 1 Takt bei Nicht-Sprung
;
; 65.535 mal zwei+zwei Takte plus 1 mal zwei+ein Takt =
;     262.143 Takte
;
	cbi PORTB,1 ; 1 Takt, Ausgang auf Null (LED ist an)
;
; Noch mal 262.143 Takte Verzoegerung
;
loop2:
	sbiw ZL,1 ; Ziehe von ZH:ZL eine 1 ab
	brne loop2 ; wenn noch nicht Null, wiederhole
;
; Ende Verzoegerungsschleife
;
	rjmp loop ; 2 Takte, und das Ganze von vorne
;
; Zeitbilanz:
;    Ausgang 1 setzen:              1 Takt
;    Verzoegerungsschleife 1: 262.143 Takte
;    Ausgang 0 setzen:              1 Takt
;    Verzoegerungsschleife 2: 262.143 Takte
;    Ruecksprung an Anfang:         2 Takte
;    --------------------------------------
;    Summe                    524.290 Takte
;
;
; Interner Taktgenerator ATtiny13 = 1.200.000 Takte pro Sekunde
;
; Blinkfrequenz: = 1.200.000 / 524.290 = 2,2888 Hz 
;
; End of source code
;