Source file: /~heha/basteln/Haus/Uhren/Küchenuhr/5Hz.zip/5Hz.S

#define __SFR_OFFSET 0
#include <avr/io.h>
/* Pinzuordnung ATtiny12 (ATtiny11 geht auch) - besser ATtiny12V
1	RESET	3V (kein Pullup!)
2	XTAL1	Uhrenquarz 32 KHz
3	XTAL2	Uhrenquarz
4	GND	0V
5	PB0	Kontrolle Taktausgang 128 Hz
6	PB1	Treibspule +
7	PB2	Treibspule -
8	Ucc	3V
*/

#define PW 50	// 20 % aktiv

	sbi	ACSR,7		// Analogvergleicher ausschalten
	sbi	DDRB,0		// PB0 = Ausgang
	rjmp	main
isrt0:
// Timer0-ISR @ 128 Hz
// Register müssen nicht gesichert werden!
	sbi	PORTB,0		// Prüfimpuls 128 Hz
	subi	r23,-10		// Addiere 10
	brcs	1f		// kein Überlauf bei Addition
	out	PORTB,r18	// positiver Treibpuls
	out	DDRB,r17	// ausgeben!
	rjmp	3f
1:	cpi	r23,PW
	brcs	2f
	out	DDRB,r16	// Treiber hochohmig
	rjmp	3f
2:	cpi	r23,PW/2
	brcs	3f
	out	PORTB,r19	// negativer Treibpuls
3:	cbi	PORTB,0		// Ende Prüfimpuls
	reti

main:	ldi	r16,1		// R16: DDRB: Treibspule hochohmig
	out	TCCR0,r16	// Timer0 mit Vorteiler 1 starten
	ldi	r24,2
	out	TIMSK,r24	// Interrupt aktivieren
	ldi	r24,0x60	// Pull-Up-Disable
	out	MCUCR,r24	// SLEEP aktivieren (Quarz läuft durch)
	ldi	r17,7		// R17: DDRB: Treibspule treibt
	ldi	r18,3		// R18: PORTB: Treibspule +
	ldi	r19,5		// R18: PORTB: Treibspule -
	sei
4:	sleep
	rjmp	4b
Detected encoding: UTF-80