
;CodeVisionAVR C Compiler V3.12 Advanced
;(C) Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
;http://www.hpinfotech.com

;Build configuration    : Release
;Chip type              : ATtiny2313A
;Program type           : Application
;Clock frequency        : 14,745600 MHz
;Memory model           : Tiny
;Optimize for           : Speed
;(s)printf features     : int
;(s)scanf features      : int, width
;External RAM size      : 0
;Data Stack size        : 32 byte(s)
;Heap size              : 0 byte(s)
;Promote 'char' to 'int': Yes
;'char' is unsigned     : Yes
;8 bit enums            : Yes
;Global 'const' stored in FLASH: No
;Enhanced function parameter passing: Yes
;Enhanced core instructions: On
;Automatic register allocation for global variables: On
;Smart register allocation: On

	#define _MODEL_TINY_

	#pragma AVRPART ADMIN PART_NAME ATtiny2313A
	#pragma AVRPART MEMORY PROG_FLASH 2048
	#pragma AVRPART MEMORY EEPROM 128
	#pragma AVRPART MEMORY INT_SRAM SIZE 128
	#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60

	.LISTMAC
	.EQU UDRE=0x5
	.EQU RXC=0x7
	.EQU USR=0xB
	.EQU UDR=0xC
	.EQU EERE=0x0
	.EQU EEWE=0x1
	.EQU EEMWE=0x2
	.EQU EECR=0x1C
	.EQU EEDR=0x1D
	.EQU EEARL=0x1E
	.EQU WDTCR=0x21
	.EQU WDTCSR=0x21
	.EQU MCUSR=0x34
	.EQU MCUCR=0x35
	.EQU SPL=0x3D
	.EQU SREG=0x3F
	.EQU GPIOR0=0x13
	.EQU GPIOR1=0x14
	.EQU GPIOR2=0x15

	.DEF R0X0=R0
	.DEF R0X1=R1
	.DEF R0X2=R2
	.DEF R0X3=R3
	.DEF R0X4=R4
	.DEF R0X5=R5
	.DEF R0X6=R6
	.DEF R0X7=R7
	.DEF R0X8=R8
	.DEF R0X9=R9
	.DEF R0XA=R10
	.DEF R0XB=R11
	.DEF R0XC=R12
	.DEF R0XD=R13
	.DEF R0XE=R14
	.DEF R0XF=R15
	.DEF R0X10=R16
	.DEF R0X11=R17
	.DEF R0X12=R18
	.DEF R0X13=R19
	.DEF R0X14=R20
	.DEF R0X15=R21
	.DEF R0X16=R22
	.DEF R0X17=R23
	.DEF R0X18=R24
	.DEF R0X19=R25
	.DEF R0X1A=R26
	.DEF R0X1B=R27
	.DEF R0X1C=R28
	.DEF R0X1D=R29
	.DEF R0X1E=R30
	.DEF R0X1F=R31

	.EQU __SRAM_START=0x0060
	.EQU __SRAM_END=0x00DF
	.EQU __DSTACK_SIZE=0x0020
	.EQU __HEAP_SIZE=0x0000
	.EQU __CLEAR_SRAM_SIZE=__SRAM_END-__SRAM_START+1

	.MACRO __CPD1N
	CPI  R30,LOW(@0)
	LDI  R26,HIGH(@0)
	CPC  R31,R26
	LDI  R26,BYTE3(@0)
	CPC  R22,R26
	LDI  R26,BYTE4(@0)
	CPC  R23,R26
	.ENDM

	.MACRO __CPD2N
	CPI  R26,LOW(@0)
	LDI  R30,HIGH(@0)
	CPC  R27,R30
	LDI  R30,BYTE3(@0)
	CPC  R24,R30
	LDI  R30,BYTE4(@0)
	CPC  R25,R30
	.ENDM

	.MACRO __CPWRR
	CP   R@0,R@2
	CPC  R@1,R@3
	.ENDM

	.MACRO __CPWRN
	CPI  R@0,LOW(@2)
	LDI  R30,HIGH(@2)
	CPC  R@1,R30
	.ENDM

	.MACRO __ADDB1MN
	SUBI R30,LOW(-@0-(@1))
	.ENDM

	.MACRO __ADDB2MN
	SUBI R26,LOW(-@0-(@1))
	.ENDM

	.MACRO __ADDW1MN
	SUBI R30,LOW(-@0-(@1))
	SBCI R31,HIGH(-@0-(@1))
	.ENDM

	.MACRO __ADDW2MN
	SUBI R26,LOW(-@0-(@1))
	SBCI R27,HIGH(-@0-(@1))
	.ENDM

	.MACRO __ADDW1FN
	SUBI R30,LOW(-2*@0-(@1))
	SBCI R31,HIGH(-2*@0-(@1))
	.ENDM

	.MACRO __ADDD1FN
	SUBI R30,LOW(-2*@0-(@1))
	SBCI R31,HIGH(-2*@0-(@1))
	SBCI R22,BYTE3(-2*@0-(@1))
	.ENDM

	.MACRO __ADDD1N
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	SBCI R22,BYTE3(-@0)
	SBCI R23,BYTE4(-@0)
	.ENDM

	.MACRO __ADDD2N
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	SBCI R24,BYTE3(-@0)
	SBCI R25,BYTE4(-@0)
	.ENDM

	.MACRO __SUBD1N
	SUBI R30,LOW(@0)
	SBCI R31,HIGH(@0)
	SBCI R22,BYTE3(@0)
	SBCI R23,BYTE4(@0)
	.ENDM

	.MACRO __SUBD2N
	SUBI R26,LOW(@0)
	SBCI R27,HIGH(@0)
	SBCI R24,BYTE3(@0)
	SBCI R25,BYTE4(@0)
	.ENDM

	.MACRO __ANDBMNN
	LDS  R30,@0+(@1)
	ANDI R30,LOW(@2)
	STS  @0+(@1),R30
	.ENDM

	.MACRO __ANDWMNN
	LDS  R30,@0+(@1)
	ANDI R30,LOW(@2)
	STS  @0+(@1),R30
	LDS  R30,@0+(@1)+1
	ANDI R30,HIGH(@2)
	STS  @0+(@1)+1,R30
	.ENDM

	.MACRO __ANDD1N
	ANDI R30,LOW(@0)
	ANDI R31,HIGH(@0)
	ANDI R22,BYTE3(@0)
	ANDI R23,BYTE4(@0)
	.ENDM

	.MACRO __ANDD2N
	ANDI R26,LOW(@0)
	ANDI R27,HIGH(@0)
	ANDI R24,BYTE3(@0)
	ANDI R25,BYTE4(@0)
	.ENDM

	.MACRO __ORBMNN
	LDS  R30,@0+(@1)
	ORI  R30,LOW(@2)
	STS  @0+(@1),R30
	.ENDM

	.MACRO __ORWMNN
	LDS  R30,@0+(@1)
	ORI  R30,LOW(@2)
	STS  @0+(@1),R30
	LDS  R30,@0+(@1)+1
	ORI  R30,HIGH(@2)
	STS  @0+(@1)+1,R30
	.ENDM

	.MACRO __ORD1N
	ORI  R30,LOW(@0)
	ORI  R31,HIGH(@0)
	ORI  R22,BYTE3(@0)
	ORI  R23,BYTE4(@0)
	.ENDM

	.MACRO __ORD2N
	ORI  R26,LOW(@0)
	ORI  R27,HIGH(@0)
	ORI  R24,BYTE3(@0)
	ORI  R25,BYTE4(@0)
	.ENDM

	.MACRO __DELAY_USB
	LDI  R24,LOW(@0)
__DELAY_USB_LOOP:
	DEC  R24
	BRNE __DELAY_USB_LOOP
	.ENDM

	.MACRO __DELAY_USW
	LDI  R24,LOW(@0)
	LDI  R25,HIGH(@0)
__DELAY_USW_LOOP:
	SBIW R24,1
	BRNE __DELAY_USW_LOOP
	.ENDM

	.MACRO __GETD1S
	LDD  R30,Y+@0
	LDD  R31,Y+@0+1
	LDD  R22,Y+@0+2
	LDD  R23,Y+@0+3
	.ENDM

	.MACRO __GETD2S
	LDD  R26,Y+@0
	LDD  R27,Y+@0+1
	LDD  R24,Y+@0+2
	LDD  R25,Y+@0+3
	.ENDM

	.MACRO __PUTD1S
	STD  Y+@0,R30
	STD  Y+@0+1,R31
	STD  Y+@0+2,R22
	STD  Y+@0+3,R23
	.ENDM

	.MACRO __PUTD2S
	STD  Y+@0,R26
	STD  Y+@0+1,R27
	STD  Y+@0+2,R24
	STD  Y+@0+3,R25
	.ENDM

	.MACRO __PUTDZ2
	STD  Z+@0,R26
	STD  Z+@0+1,R27
	STD  Z+@0+2,R24
	STD  Z+@0+3,R25
	.ENDM

	.MACRO __CLRD1S
	STD  Y+@0,R30
	STD  Y+@0+1,R30
	STD  Y+@0+2,R30
	STD  Y+@0+3,R30
	.ENDM

	.MACRO __POINTB1MN
	LDI  R30,LOW(@0+(@1))
	.ENDM

	.MACRO __POINTW1MN
	LDI  R30,LOW(@0+(@1))
	LDI  R31,HIGH(@0+(@1))
	.ENDM

	.MACRO __POINTD1M
	LDI  R30,LOW(@0)
	LDI  R31,HIGH(@0)
	LDI  R22,BYTE3(@0)
	LDI  R23,BYTE4(@0)
	.ENDM

	.MACRO __POINTW1FN
	LDI  R30,LOW(2*@0+(@1))
	LDI  R31,HIGH(2*@0+(@1))
	.ENDM

	.MACRO __POINTD1FN
	LDI  R30,LOW(2*@0+(@1))
	LDI  R31,HIGH(2*@0+(@1))
	LDI  R22,BYTE3(2*@0+(@1))
	LDI  R23,BYTE4(2*@0+(@1))
	.ENDM

	.MACRO __POINTB2MN
	LDI  R26,LOW(@0+(@1))
	.ENDM

	.MACRO __POINTW2MN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	.ENDM

	.MACRO __POINTW2FN
	LDI  R26,LOW(2*@0+(@1))
	LDI  R27,HIGH(2*@0+(@1))
	.ENDM

	.MACRO __POINTD2FN
	LDI  R26,LOW(2*@0+(@1))
	LDI  R27,HIGH(2*@0+(@1))
	LDI  R24,BYTE3(2*@0+(@1))
	LDI  R25,BYTE4(2*@0+(@1))
	.ENDM

	.MACRO __POINTBRM
	LDI  R@0,LOW(@1)
	.ENDM

	.MACRO __POINTWRM
	LDI  R@0,LOW(@2)
	LDI  R@1,HIGH(@2)
	.ENDM

	.MACRO __POINTBRMN
	LDI  R@0,LOW(@1+(@2))
	.ENDM

	.MACRO __POINTWRMN
	LDI  R@0,LOW(@2+(@3))
	LDI  R@1,HIGH(@2+(@3))
	.ENDM

	.MACRO __POINTWRFN
	LDI  R@0,LOW(@2*2+(@3))
	LDI  R@1,HIGH(@2*2+(@3))
	.ENDM

	.MACRO __GETD1N
	LDI  R30,LOW(@0)
	LDI  R31,HIGH(@0)
	LDI  R22,BYTE3(@0)
	LDI  R23,BYTE4(@0)
	.ENDM

	.MACRO __GETD2N
	LDI  R26,LOW(@0)
	LDI  R27,HIGH(@0)
	LDI  R24,BYTE3(@0)
	LDI  R25,BYTE4(@0)
	.ENDM

	.MACRO __GETB1MN
	LDS  R30,@0+(@1)
	.ENDM

	.MACRO __GETB1HMN
	LDS  R31,@0+(@1)
	.ENDM

	.MACRO __GETW1MN
	LDS  R30,@0+(@1)
	LDS  R31,@0+(@1)+1
	.ENDM

	.MACRO __GETD1MN
	LDS  R30,@0+(@1)
	LDS  R31,@0+(@1)+1
	LDS  R22,@0+(@1)+2
	LDS  R23,@0+(@1)+3
	.ENDM

	.MACRO __GETBRMN
	LDS  R@0,@1+(@2)
	.ENDM

	.MACRO __GETWRMN
	LDS  R@0,@2+(@3)
	LDS  R@1,@2+(@3)+1
	.ENDM

	.MACRO __GETWRZ
	LDD  R@0,Z+@2
	LDD  R@1,Z+@2+1
	.ENDM

	.MACRO __GETD2Z
	LDD  R26,Z+@0
	LDD  R27,Z+@0+1
	LDD  R24,Z+@0+2
	LDD  R25,Z+@0+3
	.ENDM

	.MACRO __GETB2MN
	LDS  R26,@0+(@1)
	.ENDM

	.MACRO __GETW2MN
	LDS  R26,@0+(@1)
	LDS  R27,@0+(@1)+1
	.ENDM

	.MACRO __GETD2MN
	LDS  R26,@0+(@1)
	LDS  R27,@0+(@1)+1
	LDS  R24,@0+(@1)+2
	LDS  R25,@0+(@1)+3
	.ENDM

	.MACRO __PUTB1MN
	STS  @0+(@1),R30
	.ENDM

	.MACRO __PUTW1MN
	STS  @0+(@1),R30
	STS  @0+(@1)+1,R31
	.ENDM

	.MACRO __PUTD1MN
	STS  @0+(@1),R30
	STS  @0+(@1)+1,R31
	STS  @0+(@1)+2,R22
	STS  @0+(@1)+3,R23
	.ENDM

	.MACRO __PUTB1EN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	RCALL __EEPROMWRB
	.ENDM

	.MACRO __PUTW1EN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	RCALL __EEPROMWRW
	.ENDM

	.MACRO __PUTD1EN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	RCALL __EEPROMWRD
	.ENDM

	.MACRO __PUTBR0MN
	STS  @0+(@1),R0
	.ENDM

	.MACRO __PUTBMRN
	STS  @0+(@1),R@2
	.ENDM

	.MACRO __PUTWMRN
	STS  @0+(@1),R@2
	STS  @0+(@1)+1,R@3
	.ENDM

	.MACRO __PUTBZR
	STD  Z+@1,R@0
	.ENDM

	.MACRO __PUTWZR
	STD  Z+@2,R@0
	STD  Z+@2+1,R@1
	.ENDM

	.MACRO __GETW1R
	MOV  R30,R@0
	MOV  R31,R@1
	.ENDM

	.MACRO __GETW2R
	MOV  R26,R@0
	MOV  R27,R@1
	.ENDM

	.MACRO __GETWRN
	LDI  R@0,LOW(@2)
	LDI  R@1,HIGH(@2)
	.ENDM

	.MACRO __PUTW1R
	MOV  R@0,R30
	MOV  R@1,R31
	.ENDM

	.MACRO __PUTW2R
	MOV  R@0,R26
	MOV  R@1,R27
	.ENDM

	.MACRO __ADDWRN
	SUBI R@0,LOW(-@2)
	SBCI R@1,HIGH(-@2)
	.ENDM

	.MACRO __ADDWRR
	ADD  R@0,R@2
	ADC  R@1,R@3
	.ENDM

	.MACRO __SUBWRN
	SUBI R@0,LOW(@2)
	SBCI R@1,HIGH(@2)
	.ENDM

	.MACRO __SUBWRR
	SUB  R@0,R@2
	SBC  R@1,R@3
	.ENDM

	.MACRO __ANDWRN
	ANDI R@0,LOW(@2)
	ANDI R@1,HIGH(@2)
	.ENDM

	.MACRO __ANDWRR
	AND  R@0,R@2
	AND  R@1,R@3
	.ENDM

	.MACRO __ORWRN
	ORI  R@0,LOW(@2)
	ORI  R@1,HIGH(@2)
	.ENDM

	.MACRO __ORWRR
	OR   R@0,R@2
	OR   R@1,R@3
	.ENDM

	.MACRO __EORWRR
	EOR  R@0,R@2
	EOR  R@1,R@3
	.ENDM

	.MACRO __GETWRS
	LDD  R@0,Y+@2
	LDD  R@1,Y+@2+1
	.ENDM

	.MACRO __PUTBSR
	STD  Y+@1,R@0
	.ENDM

	.MACRO __PUTWSR
	STD  Y+@2,R@0
	STD  Y+@2+1,R@1
	.ENDM

	.MACRO __MOVEWRR
	MOV  R@0,R@2
	MOV  R@1,R@3
	.ENDM

	.MACRO __INWR
	IN   R@0,@2
	IN   R@1,@2+1
	.ENDM

	.MACRO __OUTWR
	OUT  @2+1,R@1
	OUT  @2,R@0
	.ENDM

	.MACRO __CALL1MN
	LDS  R30,@0+(@1)
	LDS  R31,@0+(@1)+1
	ICALL
	.ENDM

	.MACRO __CALL1FN
	LDI  R30,LOW(2*@0+(@1))
	LDI  R31,HIGH(2*@0+(@1))
	RCALL __GETW1PF
	ICALL
	.ENDM

	.MACRO __CALL2EN
	PUSH R26
	PUSH R27
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	RCALL __EEPROMRDW
	POP  R27
	POP  R26
	ICALL
	.ENDM

	.MACRO __CALL2EX
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	RCALL __EEPROMRDD
	ICALL
	.ENDM

	.MACRO __GETW1STACK
	IN   R30,SPL
	IN   R31,SPH
	ADIW R30,@0+1
	LD   R0,Z+
	LD   R31,Z
	MOV  R30,R0
	.ENDM

	.MACRO __GETD1STACK
	IN   R30,SPL
	IN   R31,SPH
	ADIW R30,@0+1
	LD   R0,Z+
	LD   R1,Z+
	LD   R22,Z
	MOVW R30,R0
	.ENDM

	.MACRO __NBST
	BST  R@0,@1
	IN   R30,SREG
	LDI  R31,0x40
	EOR  R30,R31
	OUT  SREG,R30
	.ENDM


	.MACRO __PUTB1SN
	LDD  R26,Y+@0
	SUBI R26,-@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1SN
	LDD  R26,Y+@0
	SUBI R26,-@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1SN
	LDD  R26,Y+@0
	SUBI R26,-@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1SNS
	LDD  R26,Y+@0
	SUBI R26,-@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1SNS
	LDD  R26,Y+@0
	SUBI R26,-@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1SNS
	LDD  R26,Y+@0
	SUBI R26,-@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1RN
	MOV  R26,R@0
	SUBI R26,-@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1RN
	MOV  R26,R@0
	SUBI R26,-@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1RN
	MOV  R26,R@0
	SUBI R26,-@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1RNS
	MOV  R26,R@0
	SUBI R26,-@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1RNS
	MOV  R26,R@0
	SUBI R26,-@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1RNS
	MOV  R26,R@0
	SUBI R26,-@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1PMN
	LDS  R26,@0
	SUBI R26,-@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1PMN
	LDS  R26,@0
	SUBI R26,-@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1PMN
	LDS  R26,@0
	SUBI R26,-@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1PMNS
	LDS  R26,@0
	SUBI R26,-@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1PMNS
	LDS  R26,@0
	SUBI R26,-@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1PMNS
	LDS  R26,@0
	SUBI R26,-@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __GETB1SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R30,Z
	.ENDM

	.MACRO __GETB1HSX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R31,Z
	.ENDM

	.MACRO __GETW1SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R0,Z+
	LD   R31,Z
	MOV  R30,R0
	.ENDM

	.MACRO __GETD1SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R0,Z+
	LD   R1,Z+
	LD   R22,Z+
	LD   R23,Z
	MOVW R30,R0
	.ENDM

	.MACRO __GETB2SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R26,X
	.ENDM

	.MACRO __GETW2SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R27,X
	MOV  R26,R0
	.ENDM

	.MACRO __GETD2SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R1,X+
	LD   R24,X+
	LD   R25,X
	MOVW R26,R0
	.ENDM

	.MACRO __GETBRSX
	MOVW R30,R28
	SUBI R30,LOW(-@1)
	SBCI R31,HIGH(-@1)
	LD   R@0,Z
	.ENDM

	.MACRO __GETWRSX
	MOVW R30,R28
	SUBI R30,LOW(-@2)
	SBCI R31,HIGH(-@2)
	LD   R@0,Z+
	LD   R@1,Z
	.ENDM

	.MACRO __GETBRSX2
	MOVW R26,R28
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	LD   R@0,X
	.ENDM

	.MACRO __GETWRSX2
	MOVW R26,R28
	SUBI R26,LOW(-@2)
	SBCI R27,HIGH(-@2)
	LD   R@0,X+
	LD   R@1,X
	.ENDM

	.MACRO __LSLW8SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R31,Z
	CLR  R30
	.ENDM

	.MACRO __PUTB1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X,R30
	.ENDM

	.MACRO __PUTW1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X+,R30
	ST   X+,R31
	ST   X+,R22
	ST   X,R23
	.ENDM

	.MACRO __CLRW1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X+,R30
	ST   X,R30
	.ENDM

	.MACRO __CLRD1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X+,R30
	ST   X+,R30
	ST   X+,R30
	ST   X,R30
	.ENDM

	.MACRO __PUTB2SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	ST   Z,R26
	.ENDM

	.MACRO __PUTW2SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	ST   Z+,R26
	ST   Z,R27
	.ENDM

	.MACRO __PUTD2SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	ST   Z+,R26
	ST   Z+,R27
	ST   Z+,R24
	ST   Z,R25
	.ENDM

	.MACRO __PUTBSRX
	MOVW R30,R28
	SUBI R30,LOW(-@1)
	SBCI R31,HIGH(-@1)
	ST   Z,R@0
	.ENDM

	.MACRO __PUTWSRX
	MOVW R30,R28
	SUBI R30,LOW(-@2)
	SBCI R31,HIGH(-@2)
	ST   Z+,R@0
	ST   Z,R@1
	.ENDM

	.MACRO __PUTB1SNX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R27,X
	MOV  R26,R0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X,R30
	.ENDM

	.MACRO __PUTW1SNX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R27,X
	MOV  R26,R0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1SNX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R27,X
	MOV  R26,R0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X+,R30
	ST   X+,R31
	ST   X+,R22
	ST   X,R23
	.ENDM

;NAME DEFINITIONS FOR GLOBAL VARIABLES ALLOCATED TO REGISTERS
	.DEF _TickTimer1s=R3

;GPIOR0-GPIOR2 INITIALIZATION VALUES
	.EQU __GPIOR0_INIT=0x00
	.EQU __GPIOR1_INIT=0x00
	.EQU __GPIOR2_INIT=0x00

	.CSEG
	.ORG 0x00

;START OF CODE MARKER
__START_OF_CODE:

;INTERRUPT VECTORS
	RJMP __RESET
	RJMP 0x00
	RJMP _ext_int1_isr
	RJMP 0x00
	RJMP 0x00
	RJMP _timer1_ovf_isr
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00

_tbl10_G100:
	.DB  0x10,0x27,0xE8,0x3,0x64,0x0,0xA,0x0
	.DB  0x1,0x0
_tbl16_G100:
	.DB  0x0,0x10,0x0,0x1,0x10,0x0,0x1,0x0

_0x0:
	.DB  0x72,0x66,0x49,0x6E,0x69,0x74,0xD,0xA
	.DB  0x0
__RESET:
	CLI
	CLR  R30
	OUT  EECR,R30
	OUT  MCUCR,R30

;DISABLE WATCHDOG
	LDI  R31,0x18
	WDR
	IN   R26,MCUSR
	CBR  R26,8
	OUT  MCUSR,R26
	OUT  WDTCR,R31
	OUT  WDTCR,R30

;CLEAR R2-R14
	LDI  R24,(14-2)+1
	LDI  R26,2
__CLEAR_REG:
	ST   X+,R30
	DEC  R24
	BRNE __CLEAR_REG

;CLEAR SRAM
	LDI  R24,__CLEAR_SRAM_SIZE
	LDI  R26,__SRAM_START
__CLEAR_SRAM:
	ST   X+,R30
	DEC  R24
	BRNE __CLEAR_SRAM

;GPIOR0-GPIOR2 INITIALIZATION
	LDI  R30,__GPIOR0_INIT
	OUT  GPIOR0,R30
	;__GPIOR1_INIT = __GPIOR0_INIT
	OUT  GPIOR1,R30
	;__GPIOR2_INIT = __GPIOR0_INIT
	OUT  GPIOR2,R30

;HARDWARE STACK POINTER INITIALIZATION
	LDI  R30,LOW(__SRAM_END-__HEAP_SIZE)
	OUT  SPL,R30

;DATA STACK POINTER INITIALIZATION
	LDI  R28,LOW(__SRAM_START+__DSTACK_SIZE)

	RJMP _main

	.ESEG
	.ORG 0

	.DSEG
	.ORG 0x80

	.CSEG
;/*****************************************************
;This program was produced by the
;CodeWizardAVR V2.05.3 Standard
; Программа приёмника RFM12B
;Project : Tiny2313A
;Version : 1.0
;Date    : 18.09.2014
;Author  : MartKot
;Company : Tornado
;Comments: тестовый проект приёмника маяка GPS
;Tiny2313-RFM12B
;SPI Register&Counter=USICLK
;USI Counter Overflow Interrupt-NO
;Universal Serial Interface initialization
;Mode: Three Wire (SPI), программное тактирование
;// Clock source: Register & Counter=USICLK / NO
;// USI Counter Overflow Interrupt: Off
;//f=490кГц, 2,04мкс, 30такт
;//f=1,05МГц, 880Kbit/sec
;f=7,1МГц 7,142Мбит/сек; 8бит скорость 2,31Мбит/сек; 16бит-скорость 1,918Мбит/сек
;=======================================
;// USART initialization
;// Communication Parameters: 8 Data, 1 Stop, No Parity
;// USART Receiver: On
;// USART Transmitter: On
;// USART Mode: Asynchronous
;// USART Baud Rate: 115,2 Kbit/sec
;
;Chip type               : ATtiny2313A
;AVR Core Clock frequency: 14,745600 MHz
;Memory model            : Tiny
;External RAM size       : 0
;Data Stack size         : 32
;Flash(Кбайт) : 2
;SRAM(Байт)   : 128
;EEPROM(Байт) : 128
;
;EEPROM usage: 0 byte(s), 0,0% of EEPROM
;Program size: 593 words (1186 bytes), 57,9% of FLASH
;последние изменения 28.01.2015
;*****************************************************/
;
;#include <tiny2313a.h>
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x20
	.EQU __sm_mask=0x50
	.EQU __sm_powerdown=0x10
	.EQU __sm_standby=0x40
	.SET power_ctrl_reg=mcucr
	#endif
;#include <stdio.h>
;#include <delay.h>
;#include <string.h>
;//#include <interrupt.h>
;
;//====  tiny2313 INTERFACE ====//
;#define DCLK PINB.1 //вход прерывания от FIFO, если заполнен до указанного порога
;#define nINT PINB.3 //вход детектора действительных данных
;#define FSK PORTB.2 //выход, FIFO select 0-при включении внутреннего приемного регистра
;#define nSEL  4   // PORTB.4 SPI nSEL (chip select)
;//#define SDI PINB.5   // PORTB.5 SPI DI input (SPI RFM12B data output)
;#define SDO PORTB.6   // PORTB.6 SPI DO otput (SPI RFM12B data input)
;#define nIRQ_LOW PIND.2 //прерывание от nIRQ, ждём low флага окончания передачи
;//#define nIRQ_LOW() while(PIND&(1<<nIRQ))
;//#define nIRQ 2  // PORTD.2 прерывание от rfm12b
;//#define SCK PORTB.7 // SPI clock
;//#define SDI PORTB.6 // SPI RFM12B data input
;//#define SDO PORTB.5 // SPI RFM12B data output
;//#define nSEL  PORTB.4 // SPI nSEL (chip select)
;//#define nIRQ PORTD.2 //прерывание от rfm12b - low
;
;//============== установка скорости USART ===============//
;//#define BAUDRATE UBRRL=0x5F; //USART Baud Rate: 9600bps(14,745600 MHz)
;//для 9600bps, GPS будет работать с заводскими настройками!!!
;//#define BAUDRATE UBRRL=0x2F; //23 для Baud Rate: 19200bps
;//#define BAUDRATE UBRRL=0x17; //23 для Baud Rate: 38400bps
;//#define BAUDRATE UBRRL=0x0F; //USART Baud Rate: 57600bps
;#define BAUDRATE UBRRL=0x07; //Baud Rate: 115200bps и 14,745600 MHz
;
;//====== IO CONTROL ===============//
;#define HI(x) PORTB |= (1<<(x))  //установить бит (х) в "1"
;#define LO(x) PORTB &= ~(1<<(x)) //сбросить бит (х) в "0"
;
;
;//====== LED, приём-передача ======//
;//#define LED 6 //PORTD.6 RX(0)-приём, 1-передача
;//#define LED_OFF() PORTD &= ~(1<<LED)//PORTD.6=0; rfRx вкл ЗЕЛ светодиод
;//#define LED_ON() PORTD |= (1<<LED)  //PORTD.6=1; rfTx вкл КРАСН светодиод
;#define LED_OFF(x) PORTD.x=0 //выкл светодиод - приём Rx (начальное значение)
;#define LED_ON(x) PORTD.x=1 //вкл светодиод - передача Tx,
;#define LEDB_OFF(x) PORTB.x=0 //выкл светодиод PORTB.x
;#define LEDB_ON(x) PORTB.x=1 //вкл светодиод PORTB.x
;//=======================================================
;//=======================================================
;//knb,k1b1...k2b4-тип unsigned char, значения до 0xFF
;//#define knb 'k' //0x6B(107)-символ опознования кнопки 'k'
;//#define k1b1 0x31  //первый байт ----|
;//#define k1b2 0x32  //второй байт     |-- шифр кнопки1
;//#define k1b3 0x33  //третий байт     |
;//#define k1b4 0x34  //четвёртый байт--|
;
;//#define k2b1 0x35  //первый байт ----|
;//#define k2b2 0x36  //второй байт     |-- шифр кнопки2
;//#define k2b3 0x37  //третий байт     |
;//#define k2b4 0x38  //четвёртый байт--|
;//=======================================================
;
;#define testTX1
;//#define testTX2
;#ifdef testTX1
;  //конфигурация профиля testTX1
; #else
;  //конфигурация профиля testTX2
;#endif
;
;//======= Declare your global variables here ==========//
;//eeprom unsigned char knb='k'; //0x6B -символ опознования кнопки 'k'
;//eeprom unsigned char k1b1= 0x41;  //первый байт ---|
;//eeprom unsigned char k1b2= 0x31;  //второй байт    |-- шифр кнопки1
;//eeprom unsigned char k1b3= 0x32;  //третий байт    |
;//eeprom unsigned char k1b4= 0x33;  //            ---|
;//
;//eeprom unsigned char k2b1= 0x42;  //первый байт ---|
;//eeprom unsigned char k2b2= 0x34;  //второй байт    |-- шифр кнопки2
;//eeprom unsigned char k2b3= 0x35;  //третий байт    |
;//eeprom unsigned char k2b4= 0x36;  //            ---|
;
;eeprom unsigned char knb;
;eeprom unsigned char k1b1,k1b2,k1b3,k1b4;
;eeprom unsigned char k2b1,k2b2,k2b3,k2b4;
;
;bit flag_1s; //флаг таймера 1сек
;//bit flag_Kn;     //флаг кнопки
;unsigned char TickTimer1s; //счётчик Timer1 1сек
;//unsigned char dataGPS=0;
;//bit init_GPS_error = 1;
;//char string_GPS[4]="1,2";
;//unsigned char data=0;
;
;
;//===============| Прототипы функций |=================//
;//void LEDB_Blink(char blink, char timeb); //мигаем светодиодом blink раз, с задержкой timeb
;void LED_Blink(unsigned char blink, unsigned int timeb); //мигаем светодиодом blink раз, с задержкой timeb
;unsigned int writeCmd(unsigned int cmd); //отправка и приём 2 байтов по SPI на RF модуль
;//unsigned char rfSend_Byte(unsigned char rf_byte);
;void rfSend_Byte(unsigned char rf_byte); //отправка 1 байта по SPI на RF модуль
;void rfInit();             //инициализация RF модуля
;unsigned char rfRecv();    //приём данных от RF модуля
;void FIFOReset();          //сброс буфера RF модуля
;//void Check_JumperT1(void); //проверка перемычки и запуск таймера
;void init_ATtiny(void);
;void rfSend_K(char kb);
;
;// Timer1 overflow interrupt service routine
;interrupt [TIM1_OVF] void timer1_ovf_isr(void)
; 0000 0095 {

	.CSEG
_timer1_ovf_isr:
; .FSTART _timer1_ovf_isr
	ST   -Y,R26
	ST   -Y,R30
	IN   R30,SREG
	ST   -Y,R30
; 0000 0096 //максимально возможный период счёта 4,551сек
; 0000 0097 // Reinitialize Timer1 value 1,0sec (настройки в init_ATtiny)
; 0000 0098 //TCNT1H=0x8F80 >> 8;  // 0.5sec
; 0000 0099 //TCNT1L=0x8F80 & 0xff;// 0.5sec
; 0000 009A //==============================
; 0000 009B TCNT1H=0x1F00 >> 8;  //1.0sec, 0.25sec
	LDI  R30,LOW(31)
	OUT  0x2D,R30
; 0000 009C TCNT1L=0x1F00 & 0xff;//1.0sec, 0.25sec
	LDI  R30,LOW(0)
	OUT  0x2C,R30
; 0000 009D //==============================
; 0000 009E //TCNT1H=0xA600 >> 8;  //0.1sec
; 0000 009F //TCNT1L=0xA600 & 0xff;//0.1sec
; 0000 00A0 //==============================
; 0000 00A1 //можно проверять перемычку здесь if(PIND.5==1) {код таймера};
; 0000 00A2 
; 0000 00A3 flag_1s ^=1;   //переодическое переключение sec
	LDI  R26,0
	SBIC 0x13,0
	LDI  R26,1
	LDI  R30,LOW(1)
	EOR  R30,R26
	BRNE _0x3
	CBI  0x13,0
	RJMP _0x4
_0x3:
	SBI  0x13,0
_0x4:
; 0000 00A4  if (PIND.4==1){ //если включен выход D.4
	SBIS 0x10,4
	RJMP _0x5
; 0000 00A5  TickTimer1s++;
	INC  R3
; 0000 00A6    if (TickTimer1s == 2){
	LDI  R30,LOW(2)
	CP   R30,R3
	BRNE _0x6
; 0000 00A7      PORTD.4=0; //выкл.выход D.4 через 2сек
	CBI  0x12,4
; 0000 00A8      TickTimer1s = 0; //обнуляем через 5сек
	CLR  R3
; 0000 00A9    };
_0x6:
; 0000 00AA  };
_0x5:
; 0000 00AB 
; 0000 00AC //PORTB.0=0; //выкл.выход B.0 через 1сек
; 0000 00AD //PORTD.4=0; //выкл.выход D.4 пикаем с периодом 1сек
; 0000 00AE /*
; 0000 00AF  if (flag_1s==1 && flag_Kn==1) {
; 0000 00B0     GIMSK=0x80; //разрешить прерывания int1
; 0000 00B1     GIFR=0x80;
; 0000 00B2     flag_Kn=0;
; 0000 00B3  };
; 0000 00B4  */
; 0000 00B5 }
	LD   R30,Y+
	OUT  SREG,R30
	LD   R30,Y+
	LD   R26,Y+
	RETI
; .FEND
;
;
;// External Interrupt 0 ==== программа обрабобтки прерывания
;//при инициализации устройств, глобально запрещаем все прерывания
;/*
;interrupt [EXT_INT0] void ext_int0_isr(void) //сейчас выключено в init_ATtiny
;{
; //тут хаваем данные с RFM12
;dataGPS=((writeCmd(0xB000))&0x00FF);
;putchar(dataGPS);//передача данных на UART
;}
;*/
;
;// External Interrupt 1 service routine
;interrupt [EXT_INT1] void ext_int1_isr(void)
; 0000 00C5 {
_ext_int1_isr:
; .FSTART _ext_int1_isr
	ST   -Y,R0
	ST   -Y,R1
	ST   -Y,R15
	ST   -Y,R22
	ST   -Y,R23
	ST   -Y,R24
	ST   -Y,R25
	ST   -Y,R26
	ST   -Y,R27
	ST   -Y,R30
	ST   -Y,R31
	IN   R30,SREG
	ST   -Y,R30
; 0000 00C6 GIMSK=0x00; //запретить прерывания int1, здесь это лишнее
	LDI  R30,LOW(0)
	OUT  0x3B,R30
; 0000 00C7 if (PIND.3==0 && PIND.5==1) rfSend_K(1); //посылаем по RF код кнопки 1
	SBIC 0x10,3
	RJMP _0xA
	SBIC 0x10,5
	RJMP _0xB
_0xA:
	RJMP _0x9
_0xB:
	LDI  R26,LOW(1)
	RCALL _rfSend_K
; 0000 00C8 if (PIND.3==0 && PIND.5==0) rfSend_K(2); //посылаем по RF код кнопки 2, поставить диод между кн1 и кн2
_0x9:
	SBIC 0x10,3
	RJMP _0xD
	SBIS 0x10,5
	RJMP _0xE
_0xD:
	RJMP _0xC
_0xE:
	LDI  R26,LOW(2)
	RCALL _rfSend_K
; 0000 00C9 //if (PIND.5==0) rfSend_K(2); //посылаем по RF код кнопки 2, поставить диод между кн1 и кн2
; 0000 00CA GIMSK=0x80; //разрешить прерывания int1
_0xC:
	LDI  R30,LOW(128)
	OUT  0x3B,R30
; 0000 00CB //перед тем, как выйти из прерывания, надо сбросить флаг запроса прерывания,
; 0000 00CC // так как из-за дребезга он мог установиться повторно.
; 0000 00CD }
	LD   R30,Y+
	OUT  SREG,R30
	LD   R31,Y+
	LD   R30,Y+
	LD   R27,Y+
	LD   R26,Y+
	LD   R25,Y+
	LD   R24,Y+
	LD   R23,Y+
	LD   R22,Y+
	LD   R15,Y+
	LD   R1,Y+
	LD   R0,Y+
	RETI
; .FEND
;
;//Program size: 602 words (1204 bytes), 58,8% of FLASH
;
;//========= USART работа с прерываниями TX ==============
;//Program size: 663 words (1326 bytes), 64,7% of FLASH
;//занимает 5,9% of FLASH
;/*
;#define DATA_REGISTER_EMPTY (1<<UDRE)
;#define RX_COMPLETE (1<<RXC)
;#define FRAMING_ERROR (1<<FE)
;#define PARITY_ERROR (1<<UPE)
;#define DATA_OVERRUN (1<<DOR)
;
;// USART Transmitter buffer
;#define TX_BUFFER_SIZE 8  //8,16,24,32,40,48,56,64,72
;char tx_buffer[TX_BUFFER_SIZE];
;unsigned char tx_wr_index=0,tx_rd_index=0; //для буфера <=256
;unsigned char tx_counter=0; //TX_BUFFER_SIZE < 256
;
;
;// USART Transmitter interrupt service routine
;interrupt [USART_TXC] void usart_tx_isr(void)
;{
;if (tx_counter)
;   {
;   --tx_counter;
;   UDR=tx_buffer[tx_rd_index++];
;#if TX_BUFFER_SIZE != 256
;   if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
;#endif
;   }
;}
;
;#ifndef _DEBUG_TERMINAL_IO_
;// Write a character to the USART Transmitter buffer
;#define _ALTERNATE_PUTCHAR_
;#pragma used+
;void putchar(char c)
;{
;while (tx_counter == TX_BUFFER_SIZE);
;#asm("cli")
;if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
;   {
;   tx_buffer[tx_wr_index++]=c;
;#if TX_BUFFER_SIZE != 256
;   if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
;#endif
;   ++tx_counter;
;   }
;else
;   UDR=c;
;#asm("sei")
;}
;#pragma used-
;#endif
;*/
;
;//================ Описания функций ===================//
;void LED_Blink(char blink, unsigned int timeb) //задержка и мигание светодиодом blink раз
; 0000 0109 {
_LED_Blink:
; .FSTART _LED_Blink
; 0000 010A  char i;
; 0000 010B  for(i = 0; i < blink; i++)
	ST   -Y,R27
	ST   -Y,R26
	ST   -Y,R17
;	blink -> Y+3
;	timeb -> Y+1
;	i -> R17
	LDI  R17,LOW(0)
_0x10:
	LDD  R30,Y+3
	CP   R17,R30
	BRSH _0x11
; 0000 010C     {
; 0000 010D      LED_ON(6); //вкл. светодиод PORTD.6
	SBI  0x12,6
; 0000 010E      delay_ms(timeb);
	LDD  R26,Y+1
	LDD  R27,Y+1+1
	RCALL _delay_ms
; 0000 010F      LED_OFF(6); //выкл. тест светодиод PORTD.6
	CBI  0x12,6
; 0000 0110      delay_ms(timeb);
	LDD  R26,Y+1
	LDD  R27,Y+1+1
	RCALL _delay_ms
; 0000 0111     };
	SUBI R17,-1
	RJMP _0x10
_0x11:
; 0000 0112  }
	LDD  R17,Y+0
	RJMP _0x2060003
; .FEND
;
;
;
;//=========== USI - SPI //программный SPI//==============
;//=== инициализация портов, SPI в init_ATtiny ===
;//функция передачи-приёма 2-х байт(16bit) по USI с max скоростью (до Fclk/2)
;//такт 7,1МГц, 0,14мкс(7,142Мбит/сек), время передачи 16bit 5,49мкс(2,9Mbit/sec),
;//полное время передачи одной команды 16bit-8,34мкс или 1,918Мбит/сек (40 тактов)
;unsigned int writeCmd(unsigned int cmd)  //3,70MHz
; 0000 011C {
_writeCmd:
; .FSTART _writeCmd
; 0000 011D  unsigned int recv_16b=0; //16bit полученные из USIDR
; 0000 011E  LO(nSEL);  // PORTB.4 SPI nSEL (chip select ENABLE)
	ST   -Y,R27
	ST   -Y,R26
	RCALL __SAVELOCR2
;	cmd -> Y+2
;	recv_16b -> R16,R17
	__GETWRN 16,17,0
	CBI  0x18,4
; 0000 011F  //USIDR = data_w;//передаваемые данные в сдвиговый регисть
; 0000 0120  USIDR =cmd>>8;//16bit->8bit старший разряд, передаваемые данные в сдвиговый регистр
	LDD  R30,Y+3
	ANDI R31,HIGH(0x0)
	OUT  0xF,R30
; 0000 0121  USICR = 0b00010001;//и формируем тактирующие импульсы программно
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0122  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0123  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0124  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0125  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0126  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0127  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0128  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0129  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 012A  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 012B  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 012C  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 012D  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 012E  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 012F  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0130  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0131  recv_16b = USIDR<<8; //сохраняем старший байт из USIDR
	IN   R30,0xF
	MOV  R31,R30
	LDI  R30,0
	MOVW R16,R30
; 0000 0132 
; 0000 0133  USIDR = cmd&0x00FF;//оставляем младший байт (8бит разряд вместо FF)
	LDD  R30,Y+2
	OUT  0xF,R30
; 0000 0134  //USIDR =cmd<<8;//16bit->8bit младший разряд, передаваемые данные в сдвиговый регистр
; 0000 0135  USICR = 0b00010001;//и формируем тактирующие импульсы программно
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0136  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0137  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0138  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0139  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 013A  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 013B  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 013C  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 013D  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 013E  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 013F  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0140  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0141  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0142  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0143  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0144  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0145  recv_16b |=USIDR; //(побитовая операция ИЛИ) добовляем младший байт из USIDR
	IN   R30,0xF
	LDI  R31,0
	__ORWRR 16,17,30,31
; 0000 0146  HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
	SBI  0x18,4
; 0000 0147  return recv_16b; //возврашаем 16bit полученные данные из USIDR
	MOVW R30,R16
	RCALL __LOADLOCR2
_0x2060003:
	ADIW R28,4
	RET
; 0000 0148 }
; .FEND
;
;/******
;//8bit функция передачи по USI 7,1МГц 0,14мкс и RF
;//3,46мкс 19тактов или 2,31Мбит/сек
;//Передача-чтение байта по SPI с опросом освобождения прд. регистра RF
;unsigned char rfSend_Byte(unsigned char rf_byte)
;{//LO(2); //вкл. тест светодиод PORTB.2
; //while(nIRQ_LOW); //wait for previously TX over PIND.2=0
; //nIRQ_LOW Здесь отключен, работаем в прерывании INT0 по nIRQ
; //LO(nSEL);  // PORTB.4 SPI nSEL (chip select ENABLE)
; USIDR = rf_byte;//8bit отправляем байт в сдвиговый регистр
; USICR = 0b00010001;//и формируем тактирующие импульсы программно
; USICR = 0b00010011;
; USICR = 0b00010001;
; USICR = 0b00010011;
; USICR = 0b00010001;
; USICR = 0b00010011;
; USICR = 0b00010001;
; USICR = 0b00010011;
; USICR = 0b00010001;
; USICR = 0b00010011;
; USICR = 0b00010001;
; USICR = 0b00010011;
; USICR = 0b00010001;
; USICR = 0b00010011;
; USICR = 0b00010001;
; USICR = 0b00010011;
; rf_byte = USIDR; //сохраняем байт из USIDR
; //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
; return rf_byte; //возврашаем 8bit полученные из USIDR
;//HI(2); //выкл. тест светодиод PORTB.2
;    //USISR |= (1<<USIOIF);//сбрасываем флаг
;	//while(!(USISR & (1<<USIOIF))){};//пока нет флага окончания передачи
;} *****/
;
;//8bit функция передачи по USI 7,1МГц 0,14мкс и RF
;//3,46мкс 19тактов или 2,31Мбит/сек
;void rfSend_Byte(unsigned char rf_byte) //Передача байта по SPI с опросом освобождения прд. регистра RF
; 0000 016F {
_rfSend_Byte:
; .FSTART _rfSend_Byte
; 0000 0170    //LO(2); //вкл. тест светодиод PORTB.2
; 0000 0171    //wait for previously TX over PIND.2=0
; 0000 0172  while(nIRQ_LOW); //передающий регистр готов к приёму след. байта
	ST   -Y,R26
;	rf_byte -> Y+0
_0x16:
	SBIC 0x10,2
	RJMP _0x16
; 0000 0173  USIDR = rf_byte;//8bit отправляем байт в сдвиговый регистр
	LD   R30,Y
	OUT  0xF,R30
; 0000 0174  USICR = 0b00010001;//и формируем тактирующие импульсы программно
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0175  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0176  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0177  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0178  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0179  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 017A  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 017B  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 017C  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 017D  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 017E  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 017F  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0180  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0181  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0182  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 0183  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 0184      //HI(2); //выкл. тест светодиод PORTB.2
; 0000 0185      //USISR |= (1<<USIOIF);//сбрасываем флаг
; 0000 0186 	 //while(!(USISR & (1<<USIOIF))){};//пока нет флага окончания передачи
; 0000 0187 }
	RJMP _0x2060001
; .FEND
;//================= END //программный SPI//===============================
;
;//======== инициализация RF12B RX =======================
;//Initialization of RX radio module 433MHz//==28.04.2014
;void rfInit()
; 0000 018D {
_rfInit:
; .FSTART _rfInit
; 0000 018E     //LO(0);  //0 на nRES Команда на сброс модуля
; 0000 018F     //HI(0); //1 на nRES
; 0000 0190     writeCmd(0xFE00);//Команда на сброс 0xFE00 - если модуль начинает глючить, без неё модуль глючит!
	LDI  R26,LOW(65024)
	LDI  R27,HIGH(65024)
	RCALL _writeCmd
; 0000 0191     delay_ms(150); //after power-on reset, the module will not accept commands for about 150 ms
	LDI  R26,LOW(150)
	LDI  R27,0
	RCALL _delay_ms
; 0000 0192     //===================================================
; 0000 0193     writeCmd(0x80D8);//EL,EF,enable register,433MHz,12.5pF
	LDI  R26,LOW(32984)
	LDI  R27,HIGH(32984)
	RCALL _writeCmd
; 0000 0194     //writeCmd(0x8058);//ДЛЯ аналогового приёма, FSK выход сигнала, перекл. ногу МК pinB2 на ВХОД! ====
; 0000 0195 //PORTB=0x10;
; 0000 0196 //DDRB=0xD0;//PB2=IN
; 0000 0197 //DDRB=0xD4; //PB2=Out State2=0
; 0000 0198 //========
; 0000 0199 //PORTB=0x14; //PB2=Out State2=1 FSK в режиме приёма начальная настройка
; 0000 019A //DDRB=0xD4;  //PB2=Out State2=1
; 0000 019B 
; 0000 019C     writeCmd(0x82D9); //вкл. RX, изменения только здесь!x82(D9)99
	LDI  R26,LOW(33497)
	LDI  R27,HIGH(33497)
	RCALL _writeCmd
; 0000 019D     //writeCmd(0xA640); //frequency select 434МГц
; 0000 019E     writeCmd(0xA620); //frequency select 433,92МГц
	LDI  R26,LOW(42528)
	LDI  R27,HIGH(42528)
	RCALL _writeCmd
; 0000 019F     //=== настройка скорости =======
; 0000 01A0     //writeCmd(0xC608); //38.4kbps
; 0000 01A1     writeCmd(0xC605); //57.6kbps
	LDI  R26,LOW(50693)
	LDI  R27,HIGH(50693)
	RCALL _writeCmd
; 0000 01A2     //writeCmd(0xC602); //115.2kbps
; 0000 01A3     writeCmd(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
	LDI  R26,LOW(38048)
	LDI  R27,HIGH(38048)
	RCALL _writeCmd
; 0000 01A4     //writeCmd(0x95A0); //VDI,MIDDLE,134kHz(57.6kbps),0dBm,-103dBm
; 0000 01A5     //writeCmd(0x96A0); //VDI,SLOW,134kHz(57.6kbps),0dBm,-103dBm
; 0000 01A6     //writeCmd(0x9480); //VDI,FAST,200kHz(115,2kbps),0dBm,-103dBm
; 0000 01A7     //==============================
; 0000 01A8     writeCmd(0xC2EC); //al,ml,DIG,DQD4(авт.режим быстрый->медленный, ручной-быстрый)
	LDI  R26,LOW(49900)
	LDI  R27,HIGH(49900)
	RCALL _writeCmd
; 0000 01A9     //writeCmd(0xC2FC); //включение аналогового фильтра, для приёма на наушники
; 0000 01AA     //writeCmd(0xC2AC); //AL,!ml,DIG,DQD4(авт.режим быстрый->медленный)
; 0000 01AB     //writeCmd(0xC2BC); //включение аналогового фильтра, для приёма на наушники
; 0000 01AC     //writeCmd(0xC26C); //!AL,ml,DIG,DQD4(ручной, быстрый)
; 0000 01AD     //writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR 81-заполнение FIFO-буфера не по шаблону синхронизации
; 0000 01AE     writeCmd(0xCA83); //FIFO8,SYNC,ff,DR 83-заполнение FIFO-буфера по шаблону синхронизации
	LDI  R26,LOW(51843)
	LDI  R27,HIGH(51843)
	RCALL _writeCmd
; 0000 01AF     //writeCmd(0xCAC3);
; 0000 01B0     //writeCmd(0xCAE3);
; 0000 01B1     writeCmd(0xCED6); //синхробайт (SYNC=D4 по умолчанию)
	LDI  R26,LOW(52950)
	LDI  R27,HIGH(52950)
	RCALL _writeCmd
; 0000 01B2     //writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
; 0000 01B3     writeCmd(0xC49B); //@PWR,YES RSTRIC,st,!fi,OE,EN
	LDI  R26,LOW(50331)
	LDI  R27,HIGH(50331)
	RCALL _writeCmd
; 0000 01B4     //=== настройка модуляции и выходной мощности ===
; 0000 01B5     writeCmd(0x9850); //!mp,90kHz(57.6kbps),MAX OUT
	LDI  R26,LOW(38992)
	LDI  R27,HIGH(38992)
	RCALL _writeCmd
; 0000 01B6     //writeCmd(0x9870); //!mp,120kHz(115,2kbps),MAX OUT (120kHz зависит от скорости передачи)
; 0000 01B7     //===============================================
; 0000 01B8     writeCmd(0xCC77); //OB1, OB0, LPX, 0-ddy, 1-DDIT, 1, 0-CBW0
	LDI  R26,LOW(52343)
	LDI  R27,HIGH(52343)
	RCALL _writeCmd
; 0000 01B9     writeCmd(0xE000); //NOT USED
	LDI  R26,LOW(57344)
	LDI  R27,HIGH(57344)
	RCALL _writeCmd
; 0000 01BA     writeCmd(0xC800); //NOT USED
	LDI  R26,LOW(51200)
	LDI  R27,HIGH(51200)
	RCALL _writeCmd
; 0000 01BB     writeCmd(0xC000); //1.0MHz,2.2V NOT USED
	LDI  R26,LOW(49152)
	LDI  R27,HIGH(49152)
	RJMP _0x2060002
; 0000 01BC            //printf("test-0\n\r");
; 0000 01BD     //======================================================
; 0000 01BE     //LO(nSEL);  // PORTB.4 SPI nSEL (chip select ENABLE)
; 0000 01BF     //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
; 0000 01C0     //writeCmd(0x8219); //включен только кварцевый генератор
; 0000 01C1     //writeCmd(0x8218); //включен синтезатор, кварцевый генератор
; 0000 01C2     //writeCmd(0x8259); //вкл демодулятора
; 0000 01C3     //writeCmd(0x8221); // et-вкл. всего тракта передатчика,dc
; 0000 01C4     //writeCmd(0x8281); // et-вкл. всего тракта приёмника,dc
; 0000 01C5 }
; .FEND
;
;/************ с опросом регистра состояния
;unsigned char rfRecv() {
;  unsigned int dataRF;
;
;  while(1) {   //можно просто ждать FIFO RX
;   while(nIRQ_LOW) {};  //FIFO=8, ждём, когда на nIRQ появится 0
;  //while(nINT) {  //если данные действительны
;  //while(nIRQ_LOW) {};  //FIFO=8, ждём, когда на nIRQ появится 0
;    dataRF = writeCmd(0x0000); //читаем регистр состояния
;    if (dataRF&0x8000) {       //если флаг FIFO RX равен 1
;      dataRF = writeCmd(0xB000);
;      return (dataRF&0x00FF);//отбрасываем старший байт
;    }
; }
;}
;************/
;
;//программный SPI//
;//Указание из ДШ: во время доступа к FIFO fsck не может буть выше чем fref/4 =2,5МГц,
;//где fref равна частоте кварцевого резонатора модуля 10МГц. Если скважность тактового сигнала - не 50%,
;//то самый короткий период импульса clk должен быть как минимум 2/fref секунд.
;//на самом деле, данные из модуля RFM12B считываются без ошибок на максимальной скорости,
;//при частоте fsck SPI 3,70MHz SCK!!!
;
;//Вариант 1 SPI 3,70MHz SCK!!!
;//***
;unsigned char rfRecv() {   //приём данных RF и передача по SPI 3,70MHz SCK!!!
; 0000 01E1 unsigned char rfRecv() {
_rfRecv:
; .FSTART _rfRecv
; 0000 01E2 //unsigned char dataRF;
; 0000 01E3 SDO=0; //SPI DO otput (SPI RFM12B data input)
	CBI  0x18,6
; 0000 01E4     //if (nINT && DCLK) {} //если данные действительны и FIFO заполнен
; 0000 01E5 while (!(nINT && DCLK));   //ждём действительных данных и заполнения FIFO
_0x1B:
	SBIS 0x16,3
	RJMP _0x1E
	SBIC 0x16,1
	RJMP _0x1D
_0x1E:
	RJMP _0x1B
_0x1D:
; 0000 01E6  FSK=0;    //0-выбор FIFO для чтения
	CBI  0x18,2
; 0000 01E7  LO(nSEL); // PORTB.4 SPI nSEL=0 (chip select ENABLE)
	CBI  0x18,4
; 0000 01E8 
; 0000 01E9  //USIDR = 0;//передаваемые данные в сдвиговый регисть
; 0000 01EA  USICR = 0b00010001;//и формируем тактирующие импульсы программно 3,70MHz SCK!!!(foc/4)
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 01EB  USICR = 0b00010011; //0x13
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 01EC  USICR = 0b00010001; //0x11
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 01ED  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 01EE  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 01EF  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 01F0  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 01F1  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 01F2  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 01F3  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 01F4  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 01F5  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 01F6  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 01F7  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 01F8  USICR = 0b00010001;
	LDI  R30,LOW(17)
	OUT  0xD,R30
; 0000 01F9  USICR = 0b00010011;
	LDI  R30,LOW(19)
	OUT  0xD,R30
; 0000 01FA  //dataRF = USIDR; //сохраняем байт из USIDR
; 0000 01FB  return (USIDR);
	IN   R30,0xF
	RET
; 0000 01FC }  //***/
; .FEND
;     //dataRF = rfSend_Byte(0); // регистр чтения FIFO буфера
;     //while (DCLK&&SDI){putchar('=');};  //ждём окончания чтения FIFO
;     //FSK=1; //1-выкл. чтения FIFO приёмного региста
;     //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
;     //FIFOReset();
;     //putchar(dataGPS);//передача данных на UART
;
;//Вариант 2 приём данных RF и передача по SPI 1,05MHz SCK
;/*******
;unsigned char rfRecv()
;{
;SDO=0;
;    //if (nINT && DCLK) {} //если данные действительны и FIFO заполнен
;while (!(nINT && DCLK));   //ждём действительных данных и заполнения FIFO
; FSK=0;    //0-выбор FIFO для чтения
; LO(nSEL); // PORTB.4 SPI nSEL=0 (chip select ENABLE)
;
; //USIDR = 0; //передаваемые данные в сдвиговый регисть
;	USISR |= (1<<USIOIF); //сбрасываем флаг
;	while(!(USISR & (1<<USIOIF))) //пока нет флага окончания передачи
;	{
;	   USICR |= (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC); //формируем тактирующие импульсы
;	}
;	return (USIDR); //возвращаем полученные данные
;}  *****/
;
;//Вариант 3
;/********
;unsigned char rfRecv()  //из примера, _BV(USIOIF)это(1<<USIOIF)
;{
; SDO=0;
;    //if (nINT && DCLK) {} //если данные действительны и FIFO заполнен
;while (!(nINT && DCLK));   //ждём действительных данных и заполнения FIFO
; FSK=0;    //0-выбор FIFO для чтения
; LO(nSEL); // PORTB.4 SPI nSEL=0 (chip select ENABLE)
;    //Load data into data register
;    //USIDR = data;
;    //Clear the USI counter overflow flag and USI counter value.
;    // USISR = _BV(USIOIF); //USISR = (1<<USIOIF)
;    USISR = (1<<USIOIF);  //USIOIF will be set when all 8 bits are transferred
;    do
;    {
;        //Set to three wire mode
;        //Positive edge shift register clock
;        //Strobe the shift register to shift one step and increment counter
;        //Toggle clock port pin
;        //USICR = _BV(USIWM0) | _BV(USICS1) | _BV(USICLK) | _BV(USITC);
;    USICR = (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC);
;    }
;    while((USISR & (1<<USIOIF)) == 0);
;    return USIDR;
;}  *********/
;
;void FIFOReset()
; 0000 0233 {
_FIFOReset:
; .FSTART _FIFOReset
; 0000 0234 writeCmd(0xCA81);//FIFO8,SYNC,!ff,DR Disable FIFO, сброс буфера
	LDI  R26,LOW(51841)
	LDI  R27,HIGH(51841)
	RCALL _writeCmd
; 0000 0235 writeCmd(0xCA83);//FIFO8,SYNC,ff,DR Enable FIFO
	LDI  R26,LOW(51843)
	LDI  R27,HIGH(51843)
_0x2060002:
	RCALL _writeCmd
; 0000 0236 }
	RET
; .FEND
;
;void init_ATtiny(void) //перенос железа из main в init_ATtiny2313
; 0000 0239 {
_init_ATtiny:
; .FSTART _init_ATtiny
; 0000 023A // Crystal Oscillator division factor: 1
; 0000 023B #pragma optsize-
; 0000 023C CLKPR=0x80;
	LDI  R30,LOW(128)
	OUT  0x26,R30
; 0000 023D CLKPR=0x00;
	LDI  R30,LOW(0)
	OUT  0x26,R30
; 0000 023E #ifdef _OPTIMIZE_SIZE_
; 0000 023F #pragma optsize+
; 0000 0240 #endif
; 0000 0241 
; 0000 0242 // Input/Output Ports initialization
; 0000 0243 // Port A initialization
; 0000 0244 // Func2=In Func1=In Func0=In
; 0000 0245 // State2=P State1=T State0=T
; 0000 0246 PORTA=0x04;
	LDI  R30,LOW(4)
	OUT  0x1B,R30
; 0000 0247 DDRA=0x00;
	LDI  R30,LOW(0)
	OUT  0x1A,R30
; 0000 0248 
; 0000 0249 // Port B initialization
; 0000 024A // Func7=Out Func6=Out Func5=In Func4=Out Func3=In Func2=Out Func1=In Func0=In
; 0000 024B // State7=0 State6=0 State5=T State4=1 State3=T State2=0 State1=T State0=T
; 0000 024C //PORTB=0x10;
; 0000 024D //DDRB=0xD0;//PB2=IN
; 0000 024E //DDRB=0xD4; //PB2=Out State2=0
; 0000 024F //========
; 0000 0250 // Func7=Out Func6=Out Func5=In Func4=Out Func3=In Func2=Out Func1=In Func0=In
; 0000 0251 // State7=0 State6=0 State5=T State4=1 State3=T State2=1 State1=T State0=T
; 0000 0252 PORTB=0x14; //PB2=Out State2=1 FSK в режиме приёма
	LDI  R30,LOW(20)
	OUT  0x18,R30
; 0000 0253 DDRB=0xD4;  //PB2=Out State2=1
	LDI  R30,LOW(212)
	OUT  0x17,R30
; 0000 0254 
; 0000 0255 
; 0000 0256 //PB4_SPI - SS линия выбора кристалла - выход
; 0000 0257 //PB5_SPI - DI линия входа данных - вход
; 0000 0258 //PB6_SPI - DO   линия выхода данных - выход
; 0000 0259 //PB7_SPI - UCSK линия тактирующего сигнала - выход
; 0000 025A 
; 0000 025B // Port D initialization
; 0000 025C // Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In
; 0000 025D // State6=0 State5=T State4=T State3=T State2=P State1=0 State0=P
; 0000 025E //PORTD=0x05; //State5=T State3=T
; 0000 025F //PORTD=0x2D; //State5=P State3=P
; 0000 0260 //DDRD=0x52;  //Func4=Out State4=0
; 0000 0261 //DDRD=0x42;
; 0000 0262 // Port D initialization
; 0000 0263 // Function: Bit6=Out Bit5=In Bit4=Out Bit3=In Bit2=In Bit1=Out Bit0=In
; 0000 0264 DDRD=(1<<DDD6) | (0<<DDD5) | (1<<DDD4) | (0<<DDD3) | (0<<DDD2) | (1<<DDD1) | (0<<DDD0);
	LDI  R30,LOW(82)
	OUT  0x11,R30
; 0000 0265 // State: Bit6=0 Bit5=P Bit4=0 Bit3=P Bit2=P Bit1=0 Bit0=P
; 0000 0266 PORTD=(0<<PORTD6) | (1<<PORTD5) | (0<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (0<<PORTD1) | (1<<PORTD0);
	LDI  R30,LOW(45)
	OUT  0x12,R30
; 0000 0267 //Port D4 выход=0
; 0000 0268 //Port D3 кнопка 1, подтяжка
; 0000 0269 //Port D5 кнопка 2 (перемычка), подтяжка
; 0000 026A 
; 0000 026B // Timer/Counter 0 initialization
; 0000 026C // Clock source: System Clock
; 0000 026D // Clock value: Timer 0 Stopped
; 0000 026E // Mode: Normal top=0xFF
; 0000 026F // OC0A output: Disconnected
; 0000 0270 // OC0B output: Disconnected
; 0000 0271 TCCR0A=0x00;
	LDI  R30,LOW(0)
	OUT  0x30,R30
; 0000 0272 TCCR0B=0x00;
	OUT  0x33,R30
; 0000 0273 TCNT0=0x00;
	OUT  0x32,R30
; 0000 0274 OCR0A=0x00;
	OUT  0x36,R30
; 0000 0275 OCR0B=0x00;
	OUT  0x3C,R30
; 0000 0276 
; 0000 0277 //=======================================================================================
; 0000 0278 // Timer/Counter 1 initialization
; 0000 0279 // Clock source: System Clock
; 0000 027A // Clock value: 57,600 kHz
; 0000 027B // Mode: Normal top=0xFFFF
; 0000 027C // OC1A output: Disconnected
; 0000 027D // OC1B output: Disconnected
; 0000 027E // Noise Canceler: Off
; 0000 027F // Input Capture on Falling Edge
; 0000 0280 // Timer Period: 0,5 s
; 0000 0281 // Timer1 Overflow Interrupt: On
; 0000 0282 // Input Capture Interrupt: Off
; 0000 0283 // Compare A Match Interrupt: Off
; 0000 0284 // Compare B Match Interrupt: Off
; 0000 0285 TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
	OUT  0x2F,R30
; 0000 0286 TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10); //1sec, 0.5sec
	LDI  R30,LOW(4)
	OUT  0x2E,R30
; 0000 0287 TCNT1H=0x1F;  //Timer Period: 1 s, 0,25 s
	LDI  R30,LOW(31)
	OUT  0x2D,R30
; 0000 0288 TCNT1L=0x00;  //Timer Period: 1 s, 0,25 s
	LDI  R30,LOW(0)
	OUT  0x2C,R30
; 0000 0289 //=====================
; 0000 028A //TCNT1H=0x8F; // 0.5sec
; 0000 028B //TCNT1L=0x80; //0.5sec
; 0000 028C //=====================
; 0000 028D //TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10); //0.1sec
; 0000 028E //TCNT1H=0xA6; //0.1sec
; 0000 028F //TCNT1L=0x00; //0.1sec
; 0000 0290 //=====================
; 0000 0291 ICR1H=0x00;
	OUT  0x25,R30
; 0000 0292 ICR1L=0x00;
	OUT  0x24,R30
; 0000 0293 OCR1AH=0x00;
	OUT  0x2B,R30
; 0000 0294 OCR1AL=0x00;
	OUT  0x2A,R30
; 0000 0295 OCR1BH=0x00;
	OUT  0x29,R30
; 0000 0296 OCR1BL=0x00;
	OUT  0x28,R30
; 0000 0297 
; 0000 0298 // Timer(s)/Counter(s) Interrupt(s) initialization
; 0000 0299 TIMSK=(1<<TOIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<ICIE1) | (0<<OCIE0B) | (0<<TOIE0) | (0<<OCIE0A);
	LDI  R30,LOW(128)
	OUT  0x39,R30
; 0000 029A 
; 0000 029B 
; 0000 029C // External Interrupt(s) initialization ==============================//
; 0000 029D // INT0: On                                                           //
; 0000 029E // INT0 Mode: Low level                                               //
; 0000 029F // INT1: Off                                                          //
; 0000 02A0 MCUCR=0x00; //MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);//
	LDI  R30,LOW(0)
	OUT  0x35,R30
; 0000 02A1 //GIMSK=0x40; //включает прерывания!!!                                //
; 0000 02A2 //GIFR=0x40;  //включает прерывания!!!                                //
; 0000 02A3 //===== то же самое только из новой версии CVAVR3 ====================//
; 0000 02A4 //GIMSK=(0<<INT1) | (1<<INT0) | (0<<PCIE0) | (0<<PCIE2) | (0<<PCIE1);  //GIMSK=0x40; 0b1000000
; 0000 02A5 //GIFR=(0<<INTF1) | (1<<INTF0) | (0<<PCIF0) | (0<<PCIF2) | (0<<PCIF1); //GIFR=0x40; 0b1000000
; 0000 02A6 //====================================================================
; 0000 02A7 // External Interrupt(s) initialization
; 0000 02A8 // INT0: Off
; 0000 02A9 // INT1: On
; 0000 02AA // INT1 Mode: Low level
; 0000 02AB GIMSK=(1<<INT1) | (0<<INT0) | (0<<PCIE0) | (0<<PCIE2) | (0<<PCIE1);  //GIMSK=0x80; 0b10000000
	LDI  R30,LOW(128)
	OUT  0x3B,R30
; 0000 02AC GIFR=(1<<INTF1) | (0<<INTF0) | (0<<PCIF0) | (0<<PCIF2) | (0<<PCIF1); //GIFR=0x80;  0b10000000
	OUT  0x3A,R30
; 0000 02AD //GIMSK=0x80;
; 0000 02AE //GIFR=0x80;
; 0000 02AF //====================================================================
; 0000 02B0 // External Interrupt(s) initialization
; 0000 02B1 // INT0: On
; 0000 02B2 // INT0 Mode: Low level
; 0000 02B3 // INT1: On
; 0000 02B4 // INT1 Mode: Low level
; 0000 02B5 //GIMSK=(1<<INT1) | (1<<INT0) | (0<<PCIE0) | (0<<PCIE2) | (0<<PCIE1); //GIMSK=0xC0; (0b11000000)
; 0000 02B6 //GIFR=(1<<INTF1) | (1<<INTF0) | (0<<PCIF0) | (0<<PCIF2) | (0<<PCIF1);//GIFR=0xC0; (0b11000000)
; 0000 02B7 //====================================================================
; 0000 02B8 
; 0000 02B9 // Universal Serial Interface initialization=============
; 0000 02BA // Mode: Three Wire (SPI)
; 0000 02BB // Clock source: Register & Counter=USICLK
; 0000 02BC // USI Counter Overflow Interrupt: Off
; 0000 02BD USICR=0x00; //отключен - конфигурация в программе
	LDI  R30,LOW(0)
	OUT  0xD,R30
; 0000 02BE //USICR=0x12; //Three Wire(SPI), Register&Counter=USICLK отключить- конфигурация в программе
; 0000 02BF //USICR=0x2; //0x12 отключить- конфигурация в программе
; 0000 02C0 
; 0000 02C1 // USART initialization==================================
; 0000 02C2 // Communication Parameters: 8 data, 1 Stop, No Parity
; 0000 02C3 // USART Receiver: On
; 0000 02C4 // USART Transmitter: On
; 0000 02C5 // USART Mode: Asynchronous
; 0000 02C6 // USART Baud Rate: 115200
; 0000 02C7 /*
; 0000 02C8   //работа с прерываниями:
; 0000 02C9 UCSRA=0x00; //0x02 удвоение скорости обена
; 0000 02CA UCSRB=0xD8; //разрешение приёма, передачи
; 0000 02CB UCSRC=0x06; //8data, 1stop, Asynchronous, выбор регистра UCSRC
; 0000 02CC UBRRH=0x00;
; 0000 02CD UBRRL=0x0F; //Baud Rate: 15 для 57600(14,745600 MHz)
; 0000 02CE    //работа на передачу с прерываниями:
; 0000 02CF // USART initialization
; 0000 02D0 // Communication Parameters: 8 Data, 1 Stop, No Parity
; 0000 02D1 // USART Receiver: Off
; 0000 02D2 // USART Transmitter: On
; 0000 02D3 // USART Mode: Asynchronous
; 0000 02D4 // USART Baud Rate: 115200
; 0000 02D5 UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
; 0000 02D6 UCSRB=(0<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
; 0000 02D7 UCSRB=0x48;
; 0000 02D8 UCSRC=(0<<UMSEL1) | (0<<UMSEL0) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
; 0000 02D9 UCSRC=0x06;
; 0000 02DA //UBRRH=0x00;
; 0000 02DB //UBRRL=0x07; //Baud Rate: 115200bps и 14,745600 MHz
; 0000 02DC */
; 0000 02DD 
; 0000 02DE 
; 0000 02DF UCSRA=0x00;
	OUT  0xB,R30
; 0000 02E0 UCSRB=0x18; //Без прерываний
	LDI  R30,LOW(24)
	OUT  0xA,R30
; 0000 02E1 //UCSRB=0x48; //с прерываниями на передачу
; 0000 02E2 UCSRC=0x06;
	LDI  R30,LOW(6)
	OUT  0x3,R30
; 0000 02E3 UBRRH=0x00;
	LDI  R30,LOW(0)
	OUT  0x2,R30
; 0000 02E4 //UBRRL=0x0F; // 15 для 57600bps и 14,745600 MHz
; 0000 02E5 //UBRRL=0x07; // 7 Baud Rate: 115200bps и 14,745600 MHz
; 0000 02E6 //BAUDRATE; //#define BAUDRATE UBRRL=0x07; // 7 Baud Rate: 115200bps
; 0000 02E7 
; 0000 02E8 //====== USART Baud Rate: 9600
; 0000 02E9 //UCSRA=0x00;
; 0000 02EA //UCSRB=0x18;
; 0000 02EB //UCSRC=0x06;
; 0000 02EC //UBRRH=0x00;
; 0000 02ED //UBRRL=0x5F; //95 Baud Rate: 9600
; 0000 02EE 
; 0000 02EF //====== USART Baud Rate: 115200
; 0000 02F0 //UCSRA=0x00;
; 0000 02F1 //UCSRB=0x18;
; 0000 02F2 //UCSRC=0x06;
; 0000 02F3 //UBRRH=0x00;
; 0000 02F4 //UBRRL=0x07; // 7 Baud Rate: 115200
; 0000 02F5 
; 0000 02F6 // Analog Comparator initialization=======================
; 0000 02F7 // Analog Comparator: Off
; 0000 02F8 // Analog Comparator Input Capture by Timer/Counter 1: Off
; 0000 02F9 ACSR=0x80;
	LDI  R30,LOW(128)
	OUT  0x8,R30
; 0000 02FA DIDR=0x00;
	LDI  R30,LOW(0)
	OUT  0x1,R30
; 0000 02FB 
; 0000 02FC   //#asm("cli") // глобально запретить прерывания
; 0000 02FD   //#asm("sei")// глобально разрешить прерывания
; 0000 02FE }
	RET
; .FEND
;
;
;void main(void) //============ основной цикл программы Rx =================//
; 0000 0302 {
_main:
; .FSTART _main
; 0000 0303 unsigned char dataGPS;
; 0000 0304 unsigned char b1,b2,b3,b4;
; 0000 0305 //volatile unsigned char tempdataGPS;
; 0000 0306 //unsigned char ChkSum=0;
; 0000 0307 
; 0000 0308 #asm("cli") // глобально запретить прерывания
;	dataGPS -> R17
;	b1 -> R16
;	b2 -> R19
;	b3 -> R18
;	b4 -> R21
	cli
; 0000 0309 
; 0000 030A init_ATtiny();//инициализация железа init_ATtiny2313
	RCALL _init_ATtiny
; 0000 030B BAUDRATE; //из define BAUDRATE UBRRL=0x07; Baud Rate: 115200bps
	LDI  R30,LOW(7)
	OUT  0x9,R30
; 0000 030C 
; 0000 030D //1.Инициализация RF12, установка параметров приёма-передачи
; 0000 030E //Перед инициализацией модуля, вы можете сбросить его. Команда на сброс 0xFE00.
; 0000 030F //2.Сброс буфера
; 0000 0310 //LED_OFF(6); //вкл. Rx светодиод, вкл. УВЧ приёмника
; 0000 0311 //FSK=1; //1-выкл. чтения FIFO приёмного региста, задано в init_ATtiny();
; 0000 0312 rfInit(); //инициал. радиомодуля в Rx
	RCALL _rfInit
; 0000 0313 putsf("rfInit\r\n");//=== тестовое сообщение на терминал ====
	__POINTW2FN _0x0,0
	RCALL _putsf
; 0000 0314 LED_Blink(3, 100);//мигаем для теста 3 раза быстро
	LDI  R30,LOW(3)
	ST   -Y,R30
	LDI  R26,LOW(100)
	LDI  R27,0
	RCALL _LED_Blink
; 0000 0315 #asm("sei")// глобально разрешить прерывания
	sei
; 0000 0316 FIFOReset();
	RCALL _FIFOReset
; 0000 0317 
; 0000 0318  while (1)
_0x22:
; 0000 0319  {
; 0000 031A   line_begin:
_0x25:
; 0000 031B   /////////////////////аналоговый приём/////////////////////////
; 0000 031C   //  if (PIND.5==0) {
; 0000 031D   //  //переключаем фильтр на аналоговый
; 0000 031E   //  flag_R^=1;
; 0000 031F   //    if (flag_R==1) {
; 0000 0320   //        writeCmd(0x8098);//выключить приёмный FIFO, данные выводятся на вывод FSK
; 0000 0321   //        //writeCmd(0x8018);//выключить передающий и приёмный FIFO
; 0000 0322   //        //writeCmd(0xC2BC); //включение аналогового фильтра,
; 0000 0323   //    };
; 0000 0324   //  };
; 0000 0325   //////////////////////////////////////////////////////////////
; 0000 0326 
; 0000 0327   dataGPS=rfRecv();
	RCALL _rfRecv
	MOV  R17,R30
; 0000 0328   putchar(dataGPS); //передача данных на UART
	MOV  R26,R17
	RCALL _putchar
; 0000 0329    if (dataGPS == knb) {  //обработка данных от кнопки
	LDI  R26,LOW(_knb)
	LDI  R27,HIGH(_knb)
	RCALL __EEPROMRDB
	CP   R30,R17
	BRNE _0x26
; 0000 032A       b1=rfRecv(); //1-й байт кнопки
	RCALL _rfRecv
	MOV  R16,R30
; 0000 032B       b2=rfRecv();
	RCALL _rfRecv
	MOV  R19,R30
; 0000 032C       b3=rfRecv();
	RCALL _rfRecv
	MOV  R18,R30
; 0000 032D       b4=rfRecv(); //4-й байт кнопки
	RCALL _rfRecv
	MOV  R21,R30
; 0000 032E       //b5=rfRecv(); //5-й байт
; 0000 032F       /*
; 0000 0330       dataRF=b1;
; 0000 0331       for (i=0; i<2; i++) { //получаем 2 байта
; 0000 0332           dataRF+=rfRecv(); //проверить, дальше работать не будет
; 0000 0333           //потому, что в rfRecv(): while (!(nINT && DCLK)); ждём заполнения FIFO
; 0000 0334           //putchar(dataGPS); //передача данных на UART
; 0000 0335       };
; 0000 0336       b4=rfRecv();          //получаем 4-й байт, сохраняем в b4
; 0000 0337       dataRF+=b4;
; 0000 0338       ChkSum=rfRecv(); //5-й байт - контр. сумма
; 0000 0339       */
; 0000 033A       FSK=1; //1-выкл. чтения FIFO приёмного региста
	SBI  0x18,2
; 0000 033B       HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
	SBI  0x18,4
; 0000 033C       FIFOReset(); //приём окончен
	RCALL _FIFOReset
; 0000 033D         //проверка срабатывания кнопоки1 или кнопки2
; 0000 033E         if (b1==k1b1 && b2==k1b2 && b3==k1b3 && b4==k1b4) { //кнопка1
	LDI  R26,LOW(_k1b1)
	LDI  R27,HIGH(_k1b1)
	RCALL __EEPROMRDB
	CP   R30,R16
	BRNE _0x2A
	LDI  R26,LOW(_k1b2)
	LDI  R27,HIGH(_k1b2)
	RCALL __EEPROMRDB
	CP   R30,R19
	BRNE _0x2A
	LDI  R26,LOW(_k1b3)
	LDI  R27,HIGH(_k1b3)
	RCALL __EEPROMRDB
	CP   R30,R18
	BRNE _0x2A
	LDI  R26,LOW(_k1b4)
	LDI  R27,HIGH(_k1b4)
	RCALL __EEPROMRDB
	CP   R30,R21
	BREQ _0x2B
_0x2A:
	RJMP _0x29
_0x2B:
; 0000 033F            PORTD.4=1; //вкл. выход кн.1 на зв. излучатель
	SBI  0x12,4
; 0000 0340            //delay_ms(1000); //для теста
; 0000 0341            //PORTD.4=0; //выход кн.1 на зв. излучатель
; 0000 0342            //выключаем через 2сек в прерывании таймера
; 0000 0343            //break;
; 0000 0344         };
_0x29:
; 0000 0345 
; 0000 0346        //if (b1==k2b1 && b2==k2b2 && b3==k2b3 && b4==k2b4) { //кнопка2 ""
; 0000 0347        //PORTB.0=1; //выход кнопки2 (изменить на плате)
; 0000 0348        //выключаем через 1сек в прерывании таймера
; 0000 0349        //break;
; 0000 034A        //};
; 0000 034B        //putchar(dataRF); //передача данных на UART, можно отключить
; 0000 034C     goto line_begin;
	RJMP _0x25
; 0000 034D    };
_0x26:
; 0000 034E 
; 0000 034F   FSK=1; //1-выкл. чтения FIFO приёмного региста
	SBI  0x18,2
; 0000 0350   HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
	SBI  0x18,4
; 0000 0351   FIFOReset();
	RCALL _FIFOReset
; 0000 0352 
; 0000 0353   //== приём в аналоговом режиме, пока для теста ================================
; 0000 0354   //аналоговый выход RSSI на модуле отсутствует, поэтому используем FSK/DATA/nFFS 
; 0000 0355   //Transmit FSK data input/ Received data output (FIFO not used)/ FIFO select 
; 0000 0356    /***
; 0000 0357    if (0) {   //сейчас выключено if(0)
; 0000 0358    PORTB=0x10; //PB2=IN
; 0000 0359    DDRB=0xD0; //PB2=IN
; 0000 035A    writeCmd(0x8098);//ДЛЯ аналогового приёма, FSK выход сигнала, перекл. МК pinB2 на ВХОД!
; 0000 035B    //writeCmd(0xC2FC); //включение аналогового фильтра, для приёма на наушники
; 0000 035C      while (1) {
; 0000 035D        dataGPS=rfRecv();
; 0000 035E        putchar(dataGPS); //передача данных на UART
; 0000 035F        HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
; 0000 0360        //FIFOReset();
; 0000 0361      //analogRX=1;
; 0000 0362      };
; 0000 0363    PORTB=0x14; //PB2=Out State2=1 FSK в режиме приёма начальная настройка
; 0000 0364    DDRB=0xD4; //PB2=Out начальная настройка
; 0000 0365    writeCmd(0x80D8);//EL,EF,enable register,433MHz,12.5pF
; 0000 0366    //writeCmd(0xC2EC); //al,ml,DIG,DQD4(авт.режим быстрый->медленный, ручной-быстрый)
; 0000 0367    };
; 0000 0368    ***/
; 0000 0369   //== конец приёма в аналоговом режиме =========================================
; 0000 036A  }
	RJMP _0x22
; 0000 036B 
; 0000 036C }
_0x30:
	RJMP _0x30
; .FEND
;
;
;void rfSend_K(char kb) //передача кода кнопки
; 0000 0370 {
_rfSend_K:
; .FSTART _rfSend_K
	PUSH R15
; 0000 0371 bit flag_rx;
; 0000 0372 //char K1, K2;
; 0000 0373 //#asm("cli") // глобально запретить прерывания
; 0000 0374 //GIMSK=0x00; //запретить прерывания int1
; 0000 0375 
; 0000 0376 //если был включен режим приёма, переключаемся на передачу
; 0000 0377   if (PIND.6==0) {    //переключение в режим TX
	ST   -Y,R26
;	kb -> Y+0
;	flag_rx -> R15.0
	SBIC 0x10,6
	RJMP _0x31
; 0000 0378       flag_rx=1;      //запоминаем, какой был режим до переключения
	SET
	BLD  R15,0
; 0000 0379       LED_ON(6);      //вкл. светодиод и усилитель мощности
	SBI  0x12,6
; 0000 037A       FSK=1; //1-вкл. передающий регистр
	SBI  0x18,2
; 0000 037B       writeCmd(0x8239); //вкл. передатчик TX
	LDI  R26,LOW(33337)
	LDI  R27,HIGH(33337)
	RCALL _writeCmd
; 0000 037C   };
_0x31:
; 0000 037D FSK=1; //1-вкл. перед. регистр
	SBI  0x18,2
; 0000 037E writeCmd(0x0000);//читать регистр состояния перед каждым кадром
	LDI  R26,LOW(0)
	LDI  R27,0
	RCALL _writeCmd
; 0000 037F LO(nSEL);  // PORTB.4 SPI nSEL (chip select ENABLE)
	CBI  0x18,4
; 0000 0380 //FSK=1; //1-вкл. перед. регистр здесь не будет работать
; 0000 0381 rfSend_Byte(0xB8); // вкл. Передающий регистр
	LDI  R26,LOW(184)
	RCALL _rfSend_Byte
; 0000 0382 rfSend_Byte(0xAA); // PREAMBLE SYNC byte, рекомендованная длина 8бит-12бит
	LDI  R26,LOW(170)
	RCALL _rfSend_Byte
; 0000 0383 //rfSend_Byte(0xAA); // SYNC byte, необязателен
; 0000 0384 //========= Шаблон действительных данных
; 0000 0385 rfSend_Byte(0x2D); // SYNC HI byte
	LDI  R26,LOW(45)
	RCALL _rfSend_Byte
; 0000 0386 rfSend_Byte(0xD6); // SYNC LOW byte, (по умолчанию D4) программируется
	LDI  R26,LOW(214)
	RCALL _rfSend_Byte
; 0000 0387 //========= передача данных
; 0000 0388 rfSend_Byte(knb);   // передача символа кнопки
	LDI  R26,LOW(_knb)
	LDI  R27,HIGH(_knb)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 0389     if (kb==1) {
	LD   R26,Y
	CPI  R26,LOW(0x1)
	BRNE _0x38
; 0000 038A     rfSend_Byte(k1b1);   // передача byte1 кнопки1
	LDI  R26,LOW(_k1b1)
	LDI  R27,HIGH(_k1b1)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 038B     rfSend_Byte(k1b2);   // передача byte2
	LDI  R26,LOW(_k1b2)
	LDI  R27,HIGH(_k1b2)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 038C     rfSend_Byte(k1b3);   // передача byte3
	LDI  R26,LOW(_k1b3)
	LDI  R27,HIGH(_k1b3)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 038D     rfSend_Byte(k1b4);   // передача byte4
	LDI  R26,LOW(_k1b4)
	LDI  R27,HIGH(_k1b4)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 038E     //rfSend_Byte(k1b5);   // передача byte5
; 0000 038F     //rfSend_Byte(codeK1); // передача codeK1 кнопки1
; 0000 0390     };
_0x38:
; 0000 0391 
; 0000 0392     if (kb==2) {
	LD   R26,Y
	CPI  R26,LOW(0x2)
	BRNE _0x39
; 0000 0393     rfSend_Byte(k2b1);   // передача byte1 кнопки2
	LDI  R26,LOW(_k2b1)
	LDI  R27,HIGH(_k2b1)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 0394     rfSend_Byte(k2b2);   // передача byte2
	LDI  R26,LOW(_k2b2)
	LDI  R27,HIGH(_k2b2)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 0395     rfSend_Byte(k2b3);   // передача byte3
	LDI  R26,LOW(_k2b3)
	LDI  R27,HIGH(_k2b3)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 0396     rfSend_Byte(k2b4);   // передача byte4
	LDI  R26,LOW(_k2b4)
	LDI  R27,HIGH(_k2b4)
	RCALL __EEPROMRDB
	MOV  R26,R30
	RCALL _rfSend_Byte
; 0000 0397     //rfSend_Byte(k2b5);   // передача byte5
; 0000 0398     //rfSend_Byte(codeK2); // передача codeK2 кнопки2
; 0000 0399     };
_0x39:
; 0000 039A //========= конец данных
; 0000 039B rfSend_Byte(0x00); // DUMMY BYTES
	LDI  R26,LOW(0)
	RCALL _rfSend_Byte
; 0000 039C //rfSend_Byte(0xAA); // DUMMY BYTES
; 0000 039D FSK=0; //0-выкл.перед.регистр, вкл. приёмный регистр
	CBI  0x18,2
; 0000 039E HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
	SBI  0x18,4
; 0000 039F //flag_Kn=1;
; 0000 03A0 delay_ms(25);
	LDI  R26,LOW(25)
	LDI  R27,0
	RCALL _delay_ms
; 0000 03A1 //===== передача окончена ===
; 0000 03A2 //=== переход в режем приёма ============================================
; 0000 03A3   if (flag_rx==1) {  //восстанавливаем режим, который был до переключения
	SBRS R15,0
	RJMP _0x3C
; 0000 03A4   writeCmd(0x82D9);  //вкл. приёмник RX
	LDI  R26,LOW(33497)
	LDI  R27,HIGH(33497)
	RCALL _writeCmd
; 0000 03A5   LED_OFF(6);        //выкл. усилитель мощности и светодиод, вкл ант. усилитель
	CBI  0x12,6
; 0000 03A6   }
; 0000 03A7 //#asm("sei")// глобально разрешить прерывания
; 0000 03A8 //GIMSK=0x80; //разрешить прерывания int1
; 0000 03A9 }
_0x3C:
	ADIW R28,1
	POP  R15
	RET
; .FEND
;
;
;
;
;
;
;//================= МУСОР ===================//========================================//
;/*****************
;
;  //while(!nINT) {}; //ждём, когда на nIRQ появится 0
;       //if(!nIRQ_LOW)   //разрешаем выполнение, когда nIRQ=0 PIND.2=0
;       //for (i=0; i<16; i++) {
;       //dataGPS = rfRecv();
;       //putchar(dataGPS);//передача данных на UART
;       //FIFOReset();
;  //}
;  //while(nIRQ_LOW) {}; //ждём, когда на nIRQ появится 0
;
;   if (nINT && DCLK) {  //если данные действительны и FIFO заполнен
;     while(nIRQ_LOW) {}; //ждём, когда на nIRQ появится 0
;             //while (!DCLK) {};  //если данные действительны и FIFO заполнен
;     //FSK=0; //0-выбор FIFO для чтения
;     //LO(nSEL);  // PORTB.4 SPI nSEL (chip select ENABLE)
;     //dataGPS = rfSend_Byte(0xB0); // регистр чтения FIFO буфера
;
;      dataGPS = (writeCmd(0xB000)&0x00FF);
;      //return (dataRF&0x00FF);//отбрасываем старший байт
;
;     //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
;     //FSK=1; //1-выкл. чтения FIFO приёмного региста
;     FIFOReset();
;     putchar(dataGPS);//передача данных на UART
;   };
;
;  for (i=0; i<33; i++) {
;      dataGPS=rfRecv();
;      putchar(dataGPS);//передача данных на UART
;  }
;
;   do
;   dataGPS=rfRecv(); //получить данные с RFM
;   while(dataGPS!=0x24);//проверяем символ "$"
;   putchar(dataGPS); //передача данных на UART
;
;
;   for (i=0; i<256; i++) {    //74символа
;      dataGPS=rfRecv();
;      putchar(dataGPS); //передача данных на UART
;       if ((tempdataGPS+dataGPS)==0x17) { //если приняли CR(0x0D)+LF(0x0A)-конец пакета
;       //if ((tempdataGPS==0x0D)&&(dataGPS==0x0A)) { //если приняли CR и LF(перевод каретки+конец строки)
;          FSK=1; //1-выкл. чтения FIFO приёмного региста
;          HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE)
;          FIFOReset();
;          //i=74;
;          break;
;       };
;    //putchar('=');
;    tempdataGPS=dataGPS;
;    }
;********/
;
;/********************* МУСОР
;for(;;){} //бесконечный цикл
;
;while (1) {
; putchar('=');
;};
;
;**********************************/
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x20
	.EQU __sm_mask=0x50
	.EQU __sm_powerdown=0x10
	.EQU __sm_standby=0x40
	.SET power_ctrl_reg=mcucr
	#endif

	.CSEG
_putchar:
; .FSTART _putchar
	ST   -Y,R26
putchar0:
     sbis usr,udre
     rjmp putchar0
     ld   r30,y
     out  udr,r30
_0x2060001:
	ADIW R28,1
	RET
; .FEND
_putsf:
; .FSTART _putsf
	ST   -Y,R27
	ST   -Y,R26
	ST   -Y,R17
_0x2000006:
	LDD  R30,Y+1
	LDD  R31,Y+1+1
	ADIW R30,1
	STD  Y+1,R30
	STD  Y+1+1,R31
	SBIW R30,1
	LPM  R30,Z
	MOV  R17,R30
	CPI  R30,0
	BREQ _0x2000008
	MOV  R26,R17
	RCALL _putchar
	RJMP _0x2000006
_0x2000008:
	LDI  R26,LOW(10)
	RCALL _putchar
	LDD  R17,Y+0
	ADIW R28,3
	RET
; .FEND

	.CSEG

	.CSEG

	.ESEG
_knb:
	.BYTE 0x1
_k1b1:
	.BYTE 0x1
_k1b2:
	.BYTE 0x1
_k1b3:
	.BYTE 0x1
_k1b4:
	.BYTE 0x1
_k2b1:
	.BYTE 0x1
_k2b2:
	.BYTE 0x1
_k2b3:
	.BYTE 0x1
_k2b4:
	.BYTE 0x1

	.CSEG

	.CSEG
_delay_ms:
	adiw r26,0
	breq __delay_ms1
__delay_ms0:
	__DELAY_USW 0xE66
	wdr
	sbiw r26,1
	brne __delay_ms0
__delay_ms1:
	ret

__EEPROMRDB:
	SBIC EECR,EEWE
	RJMP __EEPROMRDB
	PUSH R31
	IN   R31,SREG
	CLI
	OUT  EEARL,R26
	SBI  EECR,EERE
	IN   R30,EEDR
	OUT  SREG,R31
	POP  R31
	RET

__SAVELOCR2:
	ST   -Y,R17
	ST   -Y,R16
	RET

__LOADLOCR2:
	LDD  R17,Y+1
	LD   R16,Y
	RET

;END OF CODE MARKER
__END_OF_CODE:
