.include	"C:\DEF\8535def.inc"

.DSEG
	.org	0x70
Ntakt:	.byte	1
Flag:	.byte	1
N_LED:	.byte	1

.CSEG

	rjmp	start
	reti	 	; IRQ0 Handler
	reti	 	; IRQ1 Handler
	reti		; T2
	reti		; T2
	reti	 	; Timer1 Capture Handler
	reti		; Timer1 CompareA Handler
	reti		; Timer1 CompareB Handler
	reti		; Timer1 Overflow Handler
	rjmp	Tim0	; Timer0
	reti		; SPI Transfer Complete Handler

 ; ~~~~~~~~~~~~~~~~~
	reti
	reti
	reti
 ; ~~~~~~~~~~~~~~~~~
	reti
	reti
	reti
	reti
	reti

          ; ===========================
          ; По переполнению таймера 0
          ; ===========================
Tim0:	push	r24
	in	r24,SREG
	push	r24
	push	r25
	ldi	r24,255-57
	out     TCNT0,r24   ; 500 mks
	;
	lds	r24,Ntakt
	dec	r24
	sts	NTakt,r24
	brne	_20
	ldi	r24,0
	sts	Flag,r24
	;
_20:	pop	r25
	pop	r24
	out	SREG,r24
	pop	r24
	reti

start:	ldi	r25,0x2
	out	SPH,r25
	ldi	r25,0x5F
	out	SPL,r25
	sei

  ; Initialization

	ldi	r16,1
	out	TIFR,r16   ; to clear T/C0 overflow flag
	out	TIMSK,r16
	ldi	r16,3      ; 1:64
	out	TCCR0,r16
	ldi	r16,255-57 ; 500 mks
	out	TCNT0,r16
	;
         ;порт B
	ldi	R16,0xFF
	out	DDRB,R16

loop0:	ldi	r16,1
loop:	sts	N_LED,r16
  ; Будем зажигать 1-й СД. i = 1 ;
	lds	r16,N_LED
	com	r16
	out	PORTB,r16
  ; Зажгли i-й  СД
	;
	ldi	r16,200
	sts	Flag,r16
	sts	Ntakt,r16
  ; Зарядили константой 200 счетчик циклов,
  ; сбросили флаг  Flag > 0 .
	;
loop1d:	lds	r16,Flag
	tst	r16
	brne	loop1d
  ; ждем установки флага ( flag = 0 ) .
	;
	lds	r16,N_LED
	add	r16,r16
	brcc	loop
	rjmp	loop0
  ;  Если зажженный СД был последним,
  ;  переходим на 1-й, иначе продолжаем
  ;  двигать зажженный СД.
