.include 	"m16def.inc"


.ORG    0x000
	jmp	RESET
	jmp	EXT_INT0		;IRQ0 handler EICR regiszter engedélyezi az IT-jét
	jmp	EXT_INT1		;IRQ1 handler				- " -
	jmp	TIM2_COMP		;Timer2 compare	8 bites TCNT2, TIMSK reg. az IT eng., OCR2 reg.-hez compare
	jmp	TIM2_OVF		;Timer2 overflow		8 bites TCNT2, TIMSK reg. az IT eng., Timer2 overflow
							;TCCR2 control register szabja meg a Timer2 üzemmódját (PWM)
	jmp	TIM1_CAPT		;Timer1 capture	16 bites TCNT1, TIMSK reg. az IT eng., PD4 bitre ICR1H, ICR1L
	jmp	TIM1_COMPA		;Timer1 compare A 16 bites TCNT1, TIMSK reg. az IT eng., compare OCR1AH, OCR1AL
	jmp	TIM1_COMPB		;Timer1 compare B 16 bites TCNT1, TIMSK reg. az IT eng., compare OCR1BH, OCR1BL
	jmp	TIM1_OVF		;Timer1 overflow 16 bites TCNT1H(8)+TCNT1L(8), TIMSK reg. az IT eng., overflow
							;TCCR1A és TCCR1B control register szabja meg az üzemmódját
	jmp	TIM0_OVF		;Timer0 overflow 8 bites TCNT0, TIMSK reg. az IT eng., Timer0 overflow
							;TCCR0 control register szabja meg a Timer0 üzemmódját (PWM)
	jmp	SPI_STC			;SPI transfer complete	SPI transfer kész
	jmp	UART_RXC		;UART RX complete vevő vett egy byte-ot
	jmp	UART_DRE		;UDR empty a ténylegesen shiftelt regiszter előtti user data reg. üres
	jmp	UART_TXC		;UART TX complete az adásnak vége
	jmp	ADC_			;ADC conversion complete
	jmp	EE_RDY			;EEPROM ready EEPROM írásnak vége
	jmp	ANA_COMP		;Analog comparator	konvertálás kész
	jmp TWSI			;Two Wire Serial Interface Handler
	jmp EXT_INT2		;IRQ1 handler
    jmp TIM0_COMP		;Timer0 compare 8 bites TCNT0, TIMSK reg. az IT eng., OCR0 reg.-hez compare
	jmp SPM_RDY			;Store Program Memory Ready Handler


RESET:
	ldi temp,low(RAMEND)
	out SPL,temp
	ldi temp,high(RAMEND)
	out SPH,temp


;**** változók elnevezése

.def temp 		= r16
.def sitt 		= r17


;**** kezdőértékek beállítása

ldi temp,0
ldi sitt,0

; 1 - kimenet
; 0 - bemenet

;**** port A inic
	ldi	temp,0x00
	out DDRA,temp				;A port bemenet

;**** port B inic
	ldi	temp,0xFF
	out DDRB,temp				;B port kimenet

;**** port C inic
	ldi	temp,0x00
	out DDRC,temp				;C port bemenet + Jtag
	
;**** port D inic
	ldi	temp,0xFF
	out DDRD,temp				;D port kimenet

sei

; 100kHzes buszfreki beállítása

ldi temp,42
out twbr,temp
ldi temp,(0<<TWPS0)
out twsr,temp
call start_convert
call read_temp


;**** Főprogram

kezd:

	rjmp kezd

read_temp:

	ldi r16, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
	out TWCR, r16
		
	wait11:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait11

	in r16,TWSR
	andi r16, 0xF8
	cpi r16, 0x08 ; START elküldve
	brne ERROR

	ldi r16,0b10010000  ; control byte
	out TWDR, r16
	ldi r16, (1<<TWINT) | (1<<TWEN)
	out TWCR, r16

	wait22:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait22

	in r16,TWSR
	andi r16, 0xF8
	cpi r16, 0x18 ; sikeres vétel 
	brne ERROR

	ldi r16,0xAA;  read temp !!!!!!!!!!!!
	out TWDR, r16
	ldi r16, (1<<TWINT) | (1<<TWEN)
	out TWCR, r16

	wait33:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait33

	in r16,TWSR
	andi r16, 0xF8
	cpi r16, 0x28 ; sikeres vétel
	brne ERROR
;repeated start
	ldi r16, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
	out TWCR, r16
		
	wait111:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait111

	in r16,TWSR
	andi r16, 0xF8
	cpi r16, 0x10 ; repeated START elküldve
	brne ERROR

	ldi r16,0b10010001  ; control byte
	out TWDR, r16
	ldi r16, (1<<TWINT) | (1<<TWEN)
	out TWCR, r16

	wait222:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait222

	in r16,TWSR
	andi r16, 0xF8
	cpi r16, 0x40 ; sikeres vétel 
	brne ERROR

	wait11111:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait11111

	in temp,twdr
	mov r20,temp

	ldi r16, (1<<TWINT) | (1<<TWEA) | (1<<TWEN)
	out TWCR, r16

	wait1111:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait1111

	in temp,twdr
	mov r21,temp



ret

error:
nop
rjmp error

start_convert:

	ldi r16, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
	out TWCR, r16

	wait1:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait1

	in r16,TWSR
	andi r16, 0xF8
	cpi r16, 0x08 ; START elküldve
	brne ERROR

	ldi r16,0b10010000  ; control byte
	out TWDR, r16
	ldi r16, (1<<TWINT) | (1<<TWEN)
	out TWCR, r16

	wait2:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait2

	in r16,TWSR
	andi r16, 0xF8
	cpi r16, 0x18 ; sikeres vétel 
	brne ERROR

	ldi r16,0xEE;  START CONVERT !!!!!!!!!!!!
	out TWDR, r16
	ldi r16, (1<<TWINT) | (1<<TWEN)
	out TWCR, r16


	wait3:
	in r16,TWCR
	sbrs r16,TWINT
	rjmp wait3

	in r16,TWSR
	andi r16, 0xF8
	cpi r16, 0x28 ; sikeres vétel
	brne ERROR

	ldi r16, (1<<TWINT) | (1<<TWEN) | (1<<TWSTO)
	out TWCR, r16

ret




TWSI:
nop
reti

EXT_INT0:
EXT_INT1:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT:
TIM1_COMPA:
TIM1_COMPB:
TIM1_OVF:
TIM0_OVF:
SPI_STC:
UART_RXC:
UART_DRE:
UART_TXC:
ADC_:
EE_RDY:
ANA_COMP:
;TWSI:
EXT_INT2:
TIM0_COMP:
SPM_RDY:


	reti

