; ************************************
; * 16-bit Timer Example  by PEK '2000
; * 
; * The program counts up on Port B
; * every second.
; * Use a 4 MHz crystal!
; ************************************


.include "8515def.inc"


; ************************************
; * Variable Definitions             
; ************************************
.def	counter	=R16
.def	temp	=R17


; ************************************
; * Start of Code                    
; ************************************
.cseg
.org 0
	rjmp	start
.org 4	
	rjmp	count			; Timer1 CompareA Handler


start:	ldi	temp,low(RAMEND)
	out	SPL,temp		; Set stack pointer to last internal RAM location
	ldi	temp,high(RAMEND)
	out	SPH,temp
	
	ldi	temp,0xFF
	out	DDRB,temp		; Port B as output
	
	ldi	temp,0
	out	TCCR1A,temp		; Disable Compare Output Mode and PWM
	ldi	temp,0x0C
	out	TCCR1B,temp		; Enable CTC1 and CK/256
	ldi	temp,0x40	
	out	TIMSK,temp		; Enable T/C Output CompareA Match Interrupt 
	ldi	temp,61
	out	OCR1AH,temp		; 16-bit Counter compare value (1 sek at 4 MHz (CK/256))
	ldi	temp,9			; (9 + 61*256)*256
	out	OCR1AL,temp

	clr	counter			; Set counter to zero

	sei				; Enable global interrupts
	
loop:	
	out	PORTB,counter		; Out to Port B
	rjmp	loop


count:					; Timer1 CompareA Handler
	inc	counter			; Increase counter
	reti

