;OBSLOUŽENÍ PŘERUŠENÍ OD čítače/časovače 0 - CC0, xtal 16 MHz
;bliká celý port C
	.nolist
	.include "m16def.inc"
	.list
	.cseg						;kodový segment
	.def	reg=r16				;pracovní registr
	.equ	ddr=ddrc			;registr řízení směru
	.equ	port=portc			;port
;Prostor vyhrazený pro volání přerušení
		.org	0
		rjmp	start			;skoc na začátek programu
		.org	oc0addr		 	;přerušení od CC0 - schoda TCTN0=OCR0
		rjmp	opcc0			;skoč a obsluž přerušení od CC0
;Nastavení zásobníku	
start:	ldi		reg,low (ramend)
		out		spl,reg			;nastav SP na konec SRAM
		ldi		reg,high (ramend)
		out		sph,reg
...............................................................................
;úvodní nastavení
		ldi		r26,6			;konstanta pro nulování PORTuC
		ldi		r25,1			;konstanta pro nastavení PORTuC
		ldi		r24,250			;čítání jedné sekundy za pomoci
		ldi		r23,40			;tří registrů v intervalech
		ldi		r22,10			;2,5 milisec, 100 milisec, 1 sec
		ldi		reg,255			;nastav registr
		out		ddr,reg			;nastav port C jako výstupní
		ldi		r21,160			;schoda TCNT0 s OCR0 po 10 µsec
		out		ocr0,r21		;zapiš do registru OCR0
		ldi		reg,0b00001001	;časování z vnitřních hodin, xtal=16MHz
		out		tccr0,reg		;nastavení CC0 - režim CTC
		ldi		reg,0b0000010	;	
		out		timsk,reg		;povol přerušení CC0 při schodě TCNT0=OCR0
		sei						;povol globální přerušení v SREG
;...............................................................................
;Hlavní program - celý port C bliká po asi 0,5 sec
zap:	cpse	r22,r25			;při schodě přeskoč následující řádek
		rjmp	vyp				;skoč (line 40)
		ldi		reg,255
		out 	port,reg		;nastav PORTC
vyp:	cpse	r22,r26			;při schodě přeskoč následující řádek
		rjmp	zap				;skoč
		ldi		reg,0
		out		port,reg		;nuluj PORTC
		rjmp	zap
;...............................................................................
;obsloužení přerušení od CC0
;nezapomeň uložit SREG, pak pokračuj v obsluze přerušení a je to třeba? (line 50)
opcc0:	dec		r24				;r24-1
		brne	zpet			;skoč není-li r24=0
		ldi		r24,250			;nuluje se po 2,5 µsec
		dec		r23				;r23-1
		brne	zpet			;skoč není-li r23=0
		ldi		r23,40			;nuluje se po 100 milisec
		dec		r22				;r22-1
		brne	zpet			;skoč není-li r22=0 (line 60)
		ldi		r22,10			;nuluje se po 1 sec
zpet:	reti					;návrat z ošetření přerušení CC0 do programu
;................................................................................
