; Всё для Tiny2313 4 Mhz
;PD6-ds data port
;********************************************
; Reset на линию
dsReset:
		cbi	PORTd,	6
		sbi	DDRd, 6
		ldi 	tmp, 	220			
		rcall 	ds_delay
		cbi		DDRd, 6
		ldi 	tmp, 20 			
		rcall 	ds_delay
		;*******************
		ldi 	tmp, 	200			
		rcall 	ds_delay
      		in tmp, pind
ret
;************************************************
ds_delay:
		ldi 	tmp1, 2				
cycle1:
		nop
		dec 	tmp1
		brne	cycle1
		dec 	tmp
		brne	ds_delay
		ret
;************************************************
;Чтение данных с линии
;indata-прочитанные данные
ReadFromDevice:
		clr indata
	   	clr tmp1
read:		
		lsr indata
		inc tmp1
		cbi portd, 6
		sbi ddrd, 6
		ldi tmp,2
		push tmp1
		rcall ds_delay
	  	pop tmp1
	  	cbi ddrd, 6
		ldi tmp, 3
		push tmp1
		rcall ds_delay
	  	pop tmp1
		in indatatmp, Pind
	      	andi indataTmp, 0b01000000
	      	sbrc indataTmp, 6
         	ori indata, 0b10000000
         	ldi tmp, 22
		push tmp1
		rcall ds_delay
	  	pop tmp1
	 	cpi tmp1, 8
		brne read
ret
;************************************************
;Передача данных
;data-данные для отправки
OutToDevice:				
		ldi tmp, 0b00000001		
OUTDEV:			
		push data
		and data, tmp
		mov tmp1, tmp
		cpse data, tmp1
		rcall out0
		ldi tmp1, 0
		cpse data,tmp1
		rcall out1
		ldi tmp1, 0
		cpse tmp, tmp1
		lsl tmp
		pop data
		cpse tmp, tmp1
		rjmp OUTDEV
		ret

;********************************************************
;посылка "1"
;********************************************************
out1:
		push tmp
		push tmp1
		cbi Portd,6
		sbi ddrd, 6
		ldi 	tmp, 1				
		rcall 	ds_delay
		cbi ddrd, 6
		ldi 	tmp,20 			
		rcall 	ds_delay	
		pop tmp1
		pop tmp
		ret
;********************************************************
;посылка "0"
;********************************************************
out0:
		push tmp1
		push tmp
		cbi Portd,6
		sbi ddrd, 6
		ldi 	tmp, 26			
		rcall 	ds_delay
		cbi ddrd, 6
		pop tmp
		pop tmp1	
		ret
;********************************************************
;Запись байта данных в EEPROM
;eepAdr-Адрес ячейки EEPROM
writeToEEPROM_DS_Number:

sbic EECR, EEWE
rjmp writeToEEPROM_DS_Number	
	clr tmp	
   nop
		out EEARL, eepAdr
	nop
 		out EEDR, Indata
 	nop
      ldi tmp,(1<<EEMWE)
   nop
 		out EECR, tmp
 	nop
      ldi tmp, (1<<EEWE)|(1<<EEMWE)
   nop
 		out EECR, tmp
ret	
;********************************************************
;Чтение байта из EEPROM
ReadEEP:
 out EEARL, EEPADR
ldi tmp, 1
out EECR, tmp
in  data, EEDR

    ret
