;.include "d:\avr\avrasm\appnotes\attyny2313def.inc"


	.def	Temp=R16
	.def	Temp1=R17
	.def	Temp2=R18
	.def	Temp3=R19
	.def	Temp4=R20
	.def	DecCount=R21
	.def	Scd=R22
	.def	Min=R23
	.def	Hour=R24
	.def	Status=R25


.dseg

Digit:	.byte 4
Line:	.byte 4
Key:	.byte 1

;******************************************************************************
;******************************************************************************

.cseg
.org 0

rjmp RESET      ; Reset Handler
rjmp EXT_INT0   ; IRQ0 Handler
rjmp EXT_INT1   ; IRQ1 Handler
rjmp TIM_CAPT1  ; Timer1 Capture Handler
rjmp TIM_COMP1  ; Timer1 Compare Handler
rjmp TIM_OVF1   ; Timer1 Overflow Handler
rjmp TIM_OVF0   ; Timer0 Overflow Handler
rjmp UART_RXC   ; UART RX Complete Handler
rjmp UART_DRE   ; UDR Empty Handler
rjmp UART_TXC   ; UART TX Complete Handler
rjmp ANA_COMP   ; Analog Comparator Handler


    ;reset:
  EXT_INT0:	; (ret или reti ??????)
  EXT_INT1:
 TIM_CAPT1:
  TIM_OVF0:
  TIM_OVF1:
  UART_RXC:
  UART_DRE:
  UART_TXC:
  ANA_COMP:
 TIM_COMP1:

reti

;******************************************************************************





;******************************************************************************
;инициализация стека
;******************************************************************************

reset:			;включение микроконтроллера


ldi Temp,RamEnd		;еще один вариант записи	ldi temp, low(Ramend)
out SPL,Temp		;инициализации стека		out SPL, temp


cli			;глобальный запрет прерываний (по умолчанию он - же)
        
;******************************************************************************





;*******************************************************************************
;настройка портов
;*******************************************************************************

ldi Temp,0b11111111
out DDRB,Temp           ;настроили порт "В" на вывод информации
			;к порту "В" будет прицеплен вывод на передатчик 0b10000000
			; и адресные ноги (пять штук 0b00011111) клавы будут 
			; прицнплены к нему же 

ldi Temp,0b01110000
out DDRD,Temp 		;настраиваем порт "D" на ввод(чтение)(0-ввод, 1-вывод)
			;но не весь, а только четыре млажших бита (PD0-PD3)
			;к которым прицеплены четыре строки клавиатуры (шина данных)
			; а остальные настроил на вывод для того что бы 
			;при их чтении получит не черте че а четкий ноль
			;*только самый старши бит настроен на ВВОД (потому что в порте "D" отсутсвует эта нога)



;*******************************************************************************
; проверка кнопок
;*******************************************************************************

keyboardreed:		;метка - опрос клавиатуры

ldi Temp,0b00000001
out PortB,Temp		;проверяем первую колонку клавиатуры (кнопки 1,6,11,16)

in Temp,PinD		;читаем порт "D" (читаем первую строку в первой колонке клавиатуры)
cpi Temp,0b00000001	;нажата кнопка 1 ?
breq METKAkey1		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b00000010	;нажата кнопка 6 ?
breq METKAkey6		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0000100	;нажата кнопка 11 ?
breq METKAkey11		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0001000	;нажата кнопка 16 ?
breq METKAkey16		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду





ldi Temp,0b00000010
out PortB,Temp		;проверяем вторую колонку клавиатуры (кнопки 2,7,12,17)

in Temp,PinD		;читаем порт "D" (читаем первую строку во второй колонке клавиатуры)
cpi Temp,0b00000001	;нажата кнопка 2 ?
breq METKAkey2		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b00000010	;нажата кнопка 7 ?
breq METKAkey7		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0000100	;нажата кнопка 12 ?
breq METKAkey12		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0001000	;нажата кнопка 17 ?
breq METKAkey17		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду





ldi Temp,0b00000100
out PortB,Temp		;проверяем третью колонку клавиатуры (кнопки 3,8,13,18)

in Temp,PinD		;читаем порт "D" (читаем первую строку в третьей колонке клавиатуры)
cpi Temp,0b00000001	;нажата кнопка 3 ?
breq METKAkey3		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b00000010	;нажата кнопка 8 ?
breq METKAkey8		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0000100	;нажата кнопка 13 ?
breq METKAkey13		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0001000	;нажата кнопка 18 ?
breq METKAkey18		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду





ldi Temp,0b00001000
out PortB,Temp		;проверяем четвертую колонку клавиатуры (кнопки 4,9,14,19)

in Temp,PinD		;читаем порт "D" (читаем первую строку в четвертой колонке клавиатуры)
cpi Temp,0b00000001	;нажата кнопка 4 ?
breq METKAkey4		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b00000010	;нажата кнопка 9 ?
breq METKAkey9		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0000100	;нажата кнопка 14 ?
breq METKAkey14		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0001000	;нажата кнопка 19 ?
breq METKAkey19		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду





ldi Temp,0b00010000
out PortB,Temp		;проверяем пятую колонку клавиатуры (кнопки 5,10,15,20)

in Temp,PinD		;читаем порт "D" (читаем первую строку в пятой колонке клавиатуры)
cpi Temp,0b00000001	;нажата кнопка 5 ?
breq METKAkey5		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b00000010	;нажата кнопка 10 ?
breq METKAkey10		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0000100	;нажата кнопка 15 ?
breq METKAkey15		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду
cpi Temp,0b0001000	;нажата кнопка 20 ?
breq METKAkey20		;если нажата то идти на метку.....
			;иначе  - идем дальше по коду

rjmp keyboardreed	;если нм чего не нажато то переход на метку - опрос клавиатуры


;*******************************************************************************






;*******************************************************************************
;обработка нажатия клавиш
;*******************************************************************************



METKAkey1:		; нужно передать 11111111 00000010 00000010 (кнопка 1)

ldi Temp,0b00000000	;Temp=|лог0| (выводим в порт "В" на вход радиопередатчика логический нуль)
ldi Temp1,0b10000000	;Temp1=|лог1| (выводим в порт "В" на вход радиопередатчика логическую еденицу)
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key1:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17   девятый бит, а затем семнадцатый!
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)   вычесть из значения Temp2 еденицу
brne METKA2key1		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;*******************************************************************************




;*******************************************************************************

METKAkey6:		; нужно передать 11111111 00001100 00001100 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key6:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp1		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key6		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;*******************************************************************************




;*******************************************************************************

METKAkey11:		; нужно передать 11111111 00010110 00010110 


ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key11:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key11	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;*******************************************************************************





;*******************************************************************************

METKAkey16:		; нужно передать 11111111 00100000 00100000 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key16:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp1		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key16	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру



;***********************************************************************************************************

METKAkey2:		; нужно передать 11111111 00000100 00000100


ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key2:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key2		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;***********************************************************************************************************





;*********************************************************************************************************** 

METKAkey7:		; нужно передать 11111111 00001110 00001110 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key7:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp1		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key7		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;***********************************************************************************************************************





;***********************************************************************************************************************

METKAkey12:		; нужно передать 11111111 00011000 00011000 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key12:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp1		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key12	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;******************************************************************************************************





;******************************************************************************************************

METKAkey17:		; нужно передать 11111111 00100010 00100010 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key17:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp1		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key17	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;*******************************************************************************************************





;*******************************************************************************************************

METKAkey3:		; нужно передать 11111111 00000110 00000110 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key3:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Tepm1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key3		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;************************************************************************************************************





;************************************************************************************************************
METKAkey8:		; нужно передать 11111111 00010000 00010000 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key8:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key8		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;*****************************************************************************************************



;*****************************************************************************************************

METKAkey13:		; нужно передать 11111111 00011010 00011010 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key13:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp1		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key13	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;*****************************************************************************************************




;*****************************************************************************************************

METKAkey18:		; нужно передать 11111111 00100100 00100100 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key18:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp1		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key18	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;*****************************************************************************************************





;*****************************************************************************************************

METKAkey4:		; нужно передать 11111111 00001000 00001000 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key4:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp1		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key4		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;***************************************************************************************************




;***************************************************************************************************

METKAkey9:		; нужно передать 11111111 00010010 00010010 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key9:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key9		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;******************************************************************************************************




;******************************************************************************************************

METKAkey14:		; нужно передать 11111111 00011100 00011100 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key14:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp1		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key14	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;********************************************************************************************************





;********************************************************************************************************

METKAkey19:		; нужно передать 11111111 00100110 00100110 
ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key19:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp1		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key19	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;********************************************************************************************************



;***********************************************************************************************************

METKAkey5:		; нужно передать 11111111 00001010 00001010 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key5:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp		;12/20
rcall Delay		;задержка
out PortB,Temp1		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key5		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;*********************************************************************************************************




;***********************************************************************************************************

METKAkey10:		; нужно передать 11111111 00010100 00010100 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key10:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key10	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;***********************************************************************************************************






;***********************************************************************************************************

METKAkey15:		; нужно передать 11111111 00011110 00011110 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key15:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp1		;13/21
rcall Delay		;задержка
out PortB,Temp1		;14/22
rcall Delay		;задержка
out PortB,Temp1		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key15	;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;***********************************************************************************************************




;***********************************************************************************************************

METKAkey20:		; нужно передать 11111111 00101000 00101000 

ldi Temp,0b00000000	;Temp=0
ldi Temp1,0b10000000	;Temp1=1
ldi Temp2,2		;Temp2=2

rcall startbit		;стартовые биты

METKA2key20:		;ВТОРАЯ МЕТКА
		
out PortB,Temp		;9/17
rcall Delay		;задержка
out PortB,Temp1		;10/18
rcall Delay		;задержка
out PortB,Temp		;11/19
rcall Delay		;задержка
out PortB,Temp1		;12/20
rcall Delay		;задержка
out PortB,Temp		;13/21
rcall Delay		;задержка
out PortB,Temp		;14/22
rcall Delay		;задержка
out PortB,Temp		;15/23
rcall Delay		;задержка
out PortB,Temp		;16/24
rcall Delay		;задержка

dec Temp2		;Temp2(-1)
brne METKA2key20		;если результат предидущего действия не равен нулю то переходим по метке
			;иначе идем дальше по коду
rjmp keyboardreed	;команда передана - идем опрашивать клавиатуру

;**************************************************************************************************************







;*******************************************************************************
;старт-биты
;*******************************************************************************

startbit:



out PortB,Temp1		;1-ый бит логическая еденица на вход передатчика 0b10000000
rcall Delay		;задержка
out PortB,Temp1		;2-ой бит
rcall Delay		;задержка
out PortB,Temp1		;3-ий бит
rcall Delay		;задержка
out PortB,Temp1		;4-ый бит
rcall Delay		;задержка
out PortB,Temp1		;5-ый бит
rcall Delay		;задержка
out PortB,Temp1		;6-ой бит
rcall Delay		;задержка
out PortB,Temp1		;7-ой бит
rcall Delay		;задержка
out PortB,Temp1		;8-ой бит
rcall Delay		;задержка

ret

;*******************************************************************************
;ЦИКЛ ЗАДержки
;*******************************************************************************

Delay:			;задержка
			;у нас стоит кварц 20МГц, а это значит что
			;на один такт работы уходит (1/20000000)=0,00000005 секунды
			;максимум нашего передатчика 6КГц и это значит
			;что мы не сможем передавать больше 12000 бит в 1 секунду
			;а меньше можем!!! - так и сделаем!
			;задержка будет считать до (256*32)=8192
			;каждый такт счета занимает 0,00000005 секунды
			;итого задержка составляет (0,00000005*8192)=0,0004096 секунды
			;в итоге получаем, что в 1 секунду 2441,40625 бит



	ldi Temp3,0	; 
	ldi Temp4,32	;



Loop:	dec Temp3	;
	brne Loop	;
			;
	dec Temp4	;
	brne Loop	;


	ret

;************************************************************************************************











