	





	ldi R21,0				; это будет счетчик единичек в передаче @@@ ДОБАВЛЕНО @@@

	ldi zl,low(transmit_buff)		; зададим адрес начала буфера передачи в ОЗУ
	ldi zh,high(transmit_buff)

	ldi yl,low(key_buff)			; зададим адрес начала буфера прочитанных кнопок 
	ldi yh,high(key_buff)

	ldi R17,5				; количество байт для передачи

keybuffer_loop: 

	ld temp,y+				; прочитаем байт для передачи

	ldi r18,8				; количество бит в байте для передачи



byte_loop:					; здесь кодируем импульс для бита


	rcall pulse_duration			; Вызов подпрограммы //////////////////////////////////////

	ROL temp				; двигаем байт влево
	brcc send_nullen			; если "С"=0 то записываем нулевую длительность

	rcall duration_unit			; Вызов подпрограммы //////////////////////////////////////

	inc R21					; передаем единицу - увеличим счетчик  @@@ ДОБАВЛЕНО @@@

send_nullen:


	rcall write_data_to_the_RAM
   
	dec R18					; уменьшим счетчик бит на передачу
	brne byte_loop

	dec R17					; уменьшим счетчик байт для передачи
	brne keybuffer_loop


; --------------------------------------------------------------------------------------------- 
; здесь формируем посылку для бита четности
; здесь фактически код для формирования одного бита 
; здесь кодируем импульс для бита


	rcall pulse_duration			; Вызов подпрограммы //////////////////////////////////////


; здесь в R21 число единичек

	ROR R21					; двигаем байт вправо
	brcs send_bitchetn			; если "С" установлен значит нечетное число единиц у нас

	rcall duration_unit			; Вызов подпрограммы //////////////////////////////////////

send_bitchetn:

	rcall write_data_to_the_RAM


;-----------------------------------------------------------------------------------------------------------
;
;
; а вот и подпрограммы (3 штуки)
;************************

pulse_duration:					; здесь задаем длительность для передачи импульса 
						; и для передачи нуля 
						; (хотя можно было сделать индивидуально для каждого)


	ldi r19,high(ImpLen)			; зададим фиксированную длительность импульса
	st z+,r19
	ldi r19,low(ImpLen)   
	st z+,r19

	ldi  xl, low(Nullen)			; длительность для передачи нуля
	ldi  xh, high(Nullen)

ret

;************************

duration_unit:					; здесь задаем длительность для передачи единицы


	ldi xl,low(onelen)			; длительность для передачи единицы
	ldi xh,high(onelen)

ret

;*************************

write_data_to_the_RAM:				; здесь будем записывать длительности в ОЗУ

	st z+,xh				; сохраним в буфере на передачу
	st z+,xl
ret

;*************************





