; **********************************************************
; * Mehr Action: LED-Blinker mit Verzoegerung              *
; * Original fuer ATtiny13, fuer ATtiny12 umgeschrieben    *
; * (C)2005 by info@avr-asm-tutorial.net                   *
; **********************************************************
;
.INCLUDE "tn12def.inc"
;
;
; Anmerkung zur Umstellung des Programms von ATtiny13 auf ATtiny12:
;
;   Der ATtiny12 beherrscht die Wort-Instruktionen adiw und sbiw nicht.
;   Sie muessen daher ersetzt werden durch entsprechende Byte-Operationen.
;   gavrasm hat hier einen Bug und erkennt die ungueltige Operation nicht!
;
;   Der Chip mit der Nummer 2 ist fertig mit diesem Programm gebrannt.
;
; Schaltbild:
;                   ATMEL ATtiny12
;                     ___   ____
;            ___    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
;
; Konstanten
;
.EQU bBlink = 1 ; blinkendes Portbit
;
; Programm
;
	sbi DDRB,bBlink ; PB1 ist Ausgang
loop:
	sbi PORTB,bBlink ; Ausgang auf Eins (LED ist aus)
loop1:
	subi ZL,1 ; Ziehe von ZL eine 1 ab
	breq loop1a ; Null geworden, teste auf MSB=Null
	brcc loop1 ; kein Carry, weiter Loop1 bis Null
	dec ZH ; MSB eins abziehen
	rjmp loop1 ; weiter mit loop1 bis Null
loop1a:
	tst ZH ; teste MSB auf Null
	brne loop1 ; noch nicht Null, weiter mit loop1 bis Null
	cbi PORTB,bBlink ; Ausgang auf Null (LED ist an)
loop2:
	subi ZL,1 ; Ziehe von ZL eine 1 ab
	breq loop2a ; Null, pruefe MSB auf Null
	brcc loop2 ; kein Carry, weiter loop2 bis Null
	dec ZH ; MBN eins abziehen
	rjmp loop2 ; weiter mit loop2 bis Null
loop2a:
	tst ZH ; teste MSB auf Null
	brne loop2 ; noch nicht Null, weiter mit loop2 bis Null
	rjmp loop ; und das Ganze von vorne
;
; End of source code
;
