; ********************************************************** ; * 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 ;