;	Hotaru?
;
;	pwmled.asm	2003/07/01	
;
;	PB2 - LED - GND
;	Clock=10MHz
;
;asl -L pwmled.asm; p2hex -F intel pwmled
;
	cpu	at90s2313
	include	regavr


#define	TEMP	R16
#define	RAMP	R17
#define	TIMER	R18
#define	ROTATE	R19
#define	_SREG	R20

#define	LEDB	$04
#define	RAMPH	100
#define	RAMPL	1

	org	0

	rjmp	reset		;Reset
	rjmp	0		;INT0
	rjmp	0		;INT1
	rjmp	0		;TIM_CAPT1
	rjmp	0		;TIM_COMP1
	rjmp	0		;TIM_OVF1
	rjmp	tc0_ov		;TIM_OVF0
	rjmp	0		;UART_RXC
	rjmp	0		;UART_DRE
	rjmp	0		;UART_TXC
	rjmp	0		;ANA_COMP

tc0_ov	in	_SREG,SREG
	cpi	ROTATE,0
	brne	to_up
to_down	dec	RAMP
	cpi	RAMP,RAMPL	;(RAMP<RAMPL)?ROTATE=1
	brcc	tc0_end
	ldi	ROTATE,1
	rjmp	tc0_end
to_up	inc	RAMP
	cpi	RAMP,RAMPH	;(RAMP>RAMPH)?ROTATE=0
	brcs	tc0_end
	ldi	ROTATE,0
	rjmp	tc0_end
tc0_end	out	SREG,_SREG
	reti

reset:
	ldi	TEMP,iramend
	out	SPL,R16
	ldi	TEMP,LEDB
	out	DDRB,TEMP
	ldi	TEMP,$05	; 0000 0101=Clock/1024
	out	TCCR0,TEMP
	ldi	TEMP,(1<<TOIE0)
	out	TIMSK,TEMP
	sei

init	ldi	RAMP,RAMPL	; Half Bright
	ldi	ROTATE,1

loop	inc	TIMER
	cp	TIMER,RAMP
	brcc	ledoff		; (TIMER > RAMP) ? LED-OFF : LED-ON
ledon	ldi	TEMP,LEDB
	out	PORTB,TEMP
	nop
	rjmp	skip
ledoff	ldi	TEMP,0
	out	PORTB,TEMP
	rjmp	skip
skip	rjmp	loop
	
	end
