; **************************************************************
; * Der Timer blinkt alleine                                   *
; * (C)2005 by 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|
;                    |__________|
;
; Register definitions
;
.DEF rmp = R16 ; Multipurpose register
;
; Programmbeginn
;
; Internen Prozessortakt durch 32 teilen
; Takt = 9,6 MHz / 32 = 300 kHz
;
	ldi rmp,0b10000000 ; Vorteiler-Bit auf Eins setzen
	out CLKPR,rmp
	ldi rmp,0b00000101 ; Prozessorvorteiler auf 32 setzen
	out CLKPR,rmp
;
; PB1=OC0B als Ausgang setzen
;
	sbi DDRB,1
;
; 8-Bit-Timer mit 300 kHz Prozessortakt mit Vorteiler durch 1024
; 300 kHz / 1024 = 293 Hz, / 147 = 2 Hz, /2 = 1 Hz
;
	ldi rmp,147 ; Setze Compare A auf 147 (Ende Zaehler)
	out OCR0A,rmp
	ldi rmp,74 ; Setze Compare B auf halben Timer-Wert
	out OCR0B,rmp
	ldi rmp,0b00010010 ; CTC, toggle Ausgang B bei Compare Match
	out TCCR0A,rmp
	ldi rmp,0b00000101 ; Vorteiler durch 1024, Timer starten
	out TCCR0B,rmp
	ldi rmp,0b00100000 ; SLEEP Modus ermoeglichen
	out MCUCR,rmp
	sleep ; Prozessor schlafen legen
; Unsinn
; End of source code
;
