;******************************************************************************
; start of code
;******************************************************************************


.include <tn2313def.inc>
.dseg


    .cseg 

	.org 0
		rjmp	RESET

	.org INT0addr
		rjmp	INT0_INT

;******************************************************************************
; code
;******************************************************************************


RESET:
		ldi		r16, RAMEND
		out		SPL, r16	
		

		ldi r17,0   	;адрес ячейки со старшим байтом первой частоты 
		out EEAR, r17
		sbi EECR,EERE    
		in  r26,EEDR	 
		inc r17
		out EEAR, r17
		sbi EECR,EERE    
		in  r25,EEDR	 
		inc r17
		out EEAR, r17
		sbi EECR,EERE    
		in  r24,EEDR
		
	 
		
		clr r18		;В р18 хранится указатель на строку в еепром. (0х00-первая, 0х10-вторая, 0х20 третья)		
		clr r17		;В р17 хранится указатель на байт в еепром. 

		ldi		r16,0xF0 		; PD4, 5 ,6
		out		DDRD,r16		; as output
		sbi		PORTD, PD4		;Зажечь светодиод на PD4 (freq 1)

		ldi		r16,0x04		
		out		PIND, r16 		;подтягивающий резистор на кнопку и INT0


		ser		r16			; 
		out		DDRB,r16		; 
		
		; set sine table
		ldi		r31,high(sine*2)	; setup Z pointer hi
		ldi		r30,low(sine*2)		; setup Z pointer lo
		; clear accumulator 
		ldi 	r29,0x00			; clear accumulator 
		ldi 	r28,0x00			; clear accumulator 

		ldi 	r16, 80
		out		GIMSK,r16
		sei						; global enable interrupts

; main loop
LOOP1:
		add		r28,r24			; 1
		adc		r29,r25			; 1
		adc		r30,r26			; 1
		lpm		    			; 3
		out		PORTB,r0		; 1
		rjmp	LOOP1				; 2 => 9 cycles
	
INT0_INT:
		cli
		cbi		PORTD, PD4		;Потушить светодиоды индикации
		cbi		PORTD, PD5		
		cbi		PORTD, PD6		
		inc 	r18             		;увеличить счетчик . Если меньше 2-х, считать еепром по счетчику  	
		cpi	r18,3
		brsh    reset_r18
		cpi	r18,1
		breq	SET_10
		cpi	r18,2
		breq	SET_20
		
CONTINUE:
		out EEAR, r17
		sbi EECR,EERE    
		in  r26,EEDR	 
		inc r17
		out EEAR, r17
		sbi EECR,EERE    
		in  r25,EEDR	 
		inc r17
		out EEAR, r17
		sbi EECR,EERE    
		in  r24,EEDR
		rcall DELAY_1
		sei
		reti

RESET_R18:
		clr	r18
		clr	r17
		sbi	PORTD, PD4
		rjmp    CONTINUE
		ret
SET_10: 
		
		ldi	r17,0x10
		sbi	PORTD, PD5
		rjmp    CONTINUE
		ret
SET_20:
		ldi	r17,0x20
		sbi	PORTD, PD6
		rjmp    CONTINUE		
		ret

DELAY_1:
          ldi  R19, $BB
WGLOOP0:  ldi  R20, $4D
WGLOOP1:  ldi  R21, $FF
WGLOOP2:  dec  R21
          brne WGLOOP2
          dec  R20
          brne WGLOOP1
          dec  R19
          brne WGLOOP0
          ldi  R19, $02
WGLOOP3:  dec  R19
          brne WGLOOP3
          nop
	  ret


;******************************************************************************
; таблица синуса
;******************************************************************************
	.org 0x200
	
sine:		
	.DB 	0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae
	.DB 	0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8
	.DB 	0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5
	.DB 	0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff
	.DB 	0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7
	.DB 	0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc
	.DB 	0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3
	.DB 	0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83
	.DB 	0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51
	.DB 	0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27
	.DB 	0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a
	.DB 	0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00
	.DB 	0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08
	.DB 	0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23
	.DB 	0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c
	.DB 	0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c





