.include "m8def.inc"

.def tmp=r16
.def tmp3=r18
.def bits=r17
.def hl=r22
.def sech=r23
.def secl=r24
.def raz=r25

.equ SDA = portC4 
.equ SCL = portC5
.equ C = SREG_C
.cseg ; 
.org 0 ;
	rjmp inits

inits:
	
stack_init:
    ldi r16,high(RAMEND) 
    out SPH,r16 
    ldi r16,low(RAMEND)
    out SPL,r16

port_init:
	ldi tmp, (1<<SDA)|(1<<SCL)
	out ddrC, tmp
	out portC, tmp

	ldi tmp, 0b11110000
	out ddrB, tmp

	ldi tmp,255
	out ddrD, tmp

	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause


	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause


	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause


	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause


	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause


	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause
	rcall pause




begin:
	rcall read
	out portD, tmp
cc:	rjmp cc

read:
	rcall start
	ldi tmp, 0b11010001
	rcall setbit
	ldi tmp,7
	clc
	rcall setbit
	clc
	rcall getbit
	rcall NAK 
	clc
	rcall stop

ret 
;------------ формирование СТАРТ условия
start:
	sbi portC, SDA
	sbi portC, SCL
	nop
	nop	
	cbi portC, SDA
	nop
	nop
	nop
	nop	
	cbi portC, SCl
ret
;---------------------------------------
;------------ формирование СТОП условия
stop:
	cbi portC, SDA
	nop
	nop	
	sbi portC, SCL
	nop
	nop
	nop
	sbi portC, SDA
ret
;---------------------------------------
;------------ формирование сигнала подтвержения
ACK:
	cbi portC, SDA
	nop
	nop
	sbi portC, SCL
	nop
	nop
	nop
	nop
	nop
	cbi portC, SCL
ret
;------------ формирование сигнала NOподтвержения
;---------------------------------------
NAK:
	sbi ddrC, sda
	sbi portC, SDA
	nop
	nop
	sbi portC, SCL
	nop
	nop
	nop
	nop
	nop
	cbi portC, SCL
ret
;---------------------------------------
getbit:
	clr tmp
	push bits

	sbi portC, SDA
	cbi ddrC, SDA

	ldi bits, 8
	

x43:dec bits
	clc
	sbi portC, SCL
	rcall pause
	sbic pinC, SDA
	sec
	rjmp pc+2
	clc
	rol tmp
	cbi portC, SCL

	cpi bits, 0
	brne x43


	pop bits
ret
;----------------
setbit:
	sbi ddrC, sda 
	push bits
	ldi bits, 8

x42:
	clc
	rol tmp
	dec bits
	brcs y1
	rjmp y2
y1:	sbi portC, SDA 
	rjmp y0
y2:	cbi portC, SDA
	rcall pause
y0:	sbi portC, SCL
	rcall pause
	cbi portC, SCL
	rcall pause
	cpi bits, 0
	brne x42

	cbi ddrC, SdA
	sbi portC, SDA 
	rcall pause
	
	sbi portC, SCL
	rcall pause
	
	sbi ddrC, SDA 
	cbi portC, SCL
	
	pop bits
ret
;-----------

pause:
	ldi tmp3,20
p:	dec tmp3
	brne p
	ret






	
