AVRASM ver. 2.1.30 I:\AVR-1\=My Project\GPS-2313A\GPS-2313A_EEPROM\GPS-2313A-Rx_14400\List\RFM12B-2313A-Rx.asm Wed Feb 04 11:27:50 2015 I:\AVR-1\=My Project\GPS-2313A\GPS-2313A_EEPROM\GPS-2313A-Rx_14400\List\RFM12B-2313A-Rx.asm(991): warning: Register r3 already defined by the .DEF directive ;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 000000 c022 RJMP __RESET 000001 cffe RJMP 0x00 000002 c05b RJMP _ext_int1_isr 000003 cffc RJMP 0x00 000004 cffb RJMP 0x00 000005 c03a RJMP _timer1_ovf_isr 000006 cff9 RJMP 0x00 000007 cff8 RJMP 0x00 000008 cff7 RJMP 0x00 000009 cff6 RJMP 0x00 00000a cff5 RJMP 0x00 00000b cff4 RJMP 0x00 00000c cff3 RJMP 0x00 00000d cff2 RJMP 0x00 00000e cff1 RJMP 0x00 00000f cff0 RJMP 0x00 000010 cfef RJMP 0x00 000011 cfee RJMP 0x00 000012 cfed RJMP 0x00 000013 cfec RJMP 0x00 000014 cfeb RJMP 0x00 _tbl10_G100: 000015 2710 000016 03e8 000017 0064 000018 000a .DB 0x10,0x27,0xE8,0x3,0x64,0x0,0xA,0x0 000019 0001 .DB 0x1,0x0 _tbl16_G100: 00001a 1000 00001b 0100 00001c 0010 00001d 0001 .DB 0x0,0x10,0x0,0x1,0x10,0x0,0x1,0x0 _0x0: 00001e 6672 00001f 6e49 000020 7469 000021 0a0d .DB 0x72,0x66,0x49,0x6E,0x69,0x74,0xD,0xA I:\AVR-1\=My Project\GPS-2313A\GPS-2313A_EEPROM\GPS-2313A-Rx_14400\List\RFM12B-2313A-Rx.asm(1035): warning: .cseg .db misalignment - padding zero byte 000022 0000 .DB 0x0 __RESET: 000023 94f8 CLI 000024 27ee CLR R30 000025 bbec OUT EECR,R30 000026 bfe5 OUT MCUCR,R30 ;DISABLE WATCHDOG 000027 e1f8 LDI R31,0x18 000028 95a8 WDR 000029 b7a4 IN R26,MCUSR 00002a 7fa7 CBR R26,8 00002b bfa4 OUT MCUSR,R26 00002c bdf1 OUT WDTCR,R31 00002d bde1 OUT WDTCR,R30 ;CLEAR R2-R14 00002e e08d LDI R24,(14-2)+1 00002f e0a2 LDI R26,2 __CLEAR_REG: 000030 93ed ST X+,R30 000031 958a DEC R24 000032 f7e9 BRNE __CLEAR_REG ;CLEAR SRAM 000033 e880 LDI R24,__CLEAR_SRAM_SIZE 000034 e6a0 LDI R26,__SRAM_START __CLEAR_SRAM: 000035 93ed ST X+,R30 000036 958a DEC R24 000037 f7e9 BRNE __CLEAR_SRAM ;GPIOR0-GPIOR2 INITIALIZATION 000038 e0e0 LDI R30,__GPIOR0_INIT 000039 bbe3 OUT GPIOR0,R30 ;__GPIOR1_INIT = __GPIOR0_INIT 00003a bbe4 OUT GPIOR1,R30 ;__GPIOR2_INIT = __GPIOR0_INIT 00003b bbe5 OUT GPIOR2,R30 ;HARDWARE STACK POINTER INITIALIZATION 00003c edef LDI R30,LOW(__SRAM_END-__HEAP_SIZE) 00003d bfed OUT SPL,R30 ;DATA STACK POINTER INITIALIZATION 00003e e8c0 LDI R28,LOW(__SRAM_START+__DSTACK_SIZE) 00003f c175 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 #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 ;#include ;#include ;//#include ; ;//==== 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<> 8; // 0.5sec ; 0000 0099 //TCNT1L=0x8F80 & 0xff;// 0.5sec ; 0000 009A //============================== ; 0000 009B TCNT1H=0x1F00 >> 8; //1.0sec, 0.25sec 000044 e1ef LDI R30,LOW(31) 000045 bded OUT 0x2D,R30 ; 0000 009C TCNT1L=0x1F00 & 0xff;//1.0sec, 0.25sec 000046 e0e0 LDI R30,LOW(0) 000047 bdec 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 000048 e0a0 LDI R26,0 000049 9998 SBIC 0x13,0 00004a e0a1 LDI R26,1 00004b e0e1 LDI R30,LOW(1) 00004c 27ea EOR R30,R26 00004d f411 BRNE _0x3 00004e 9898 CBI 0x13,0 00004f c001 RJMP _0x4 _0x3: 000050 9a98 SBI 0x13,0 _0x4: ; 0000 00A4 if (PIND.4==1){ //если включен выход D.4 000051 9b84 SBIS 0x10,4 000052 c006 RJMP _0x5 ; 0000 00A5 TickTimer1s++; 000053 9433 INC R3 ; 0000 00A6 if (TickTimer1s == 2){ 000054 e0e2 LDI R30,LOW(2) 000055 15e3 CP R30,R3 000056 f411 BRNE _0x6 ; 0000 00A7 PORTD.4=0; //выкл.выход D.4 через 2сек 000057 9894 CBI 0x12,4 ; 0000 00A8 TickTimer1s = 0; //обнуляем через 5сек 000058 2433 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 } 000059 91e9 LD R30,Y+ 00005a bfef OUT SREG,R30 00005b 91e9 LD R30,Y+ 00005c 91a9 LD R26,Y+ 00005d 9518 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 00005e 920a ST -Y,R0 00005f 921a ST -Y,R1 000060 92fa ST -Y,R15 000061 936a ST -Y,R22 000062 937a ST -Y,R23 000063 938a ST -Y,R24 000064 939a ST -Y,R25 000065 93aa ST -Y,R26 000066 93ba ST -Y,R27 000067 93ea ST -Y,R30 000068 93fa ST -Y,R31 000069 b7ef IN R30,SREG 00006a 93ea ST -Y,R30 ; 0000 00C6 GIMSK=0x00; //запретить прерывания int1, здесь это лишнее 00006b e0e0 LDI R30,LOW(0) 00006c bfeb OUT 0x3B,R30 ; 0000 00C7 if (PIND.3==0 && PIND.5==1) rfSend_K(1); //посылаем по RF код кнопки 1 00006d 9983 SBIC 0x10,3 00006e c002 RJMP _0xA 00006f 9985 SBIC 0x10,5 000070 c001 RJMP _0xB _0xA: 000071 c002 RJMP _0x9 _0xB: 000072 e0a1 LDI R26,LOW(1) 000073 d180 RCALL _rfSend_K ; 0000 00C8 if (PIND.3==0 && PIND.5==0) rfSend_K(2); //посылаем по RF код кнопки 2, поставить диод между кн1 и кн2 _0x9: 000074 9983 SBIC 0x10,3 000075 c002 RJMP _0xD 000076 9b85 SBIS 0x10,5 000077 c001 RJMP _0xE _0xD: 000078 c002 RJMP _0xC _0xE: 000079 e0a2 LDI R26,LOW(2) 00007a d179 RCALL _rfSend_K ; 0000 00C9 //if (PIND.5==0) rfSend_K(2); //посылаем по RF код кнопки 2, поставить диод между кн1 и кн2 ; 0000 00CA GIMSK=0x80; //разрешить прерывания int1 _0xC: 00007b e8e0 LDI R30,LOW(128) 00007c bfeb OUT 0x3B,R30 ; 0000 00CB //перед тем, как выйти из прерывания, надо сбросить флаг запроса прерывания, ; 0000 00CC // так как из-за дребезга он мог установиться повторно. ; 0000 00CD } 00007d 91e9 LD R30,Y+ 00007e bfef OUT SREG,R30 00007f 91f9 LD R31,Y+ 000080 91e9 LD R30,Y+ 000081 91b9 LD R27,Y+ 000082 91a9 LD R26,Y+ 000083 9199 LD R25,Y+ 000084 9189 LD R24,Y+ 000085 9179 LD R23,Y+ 000086 9169 LD R22,Y+ 000087 90f9 LD R15,Y+ 000088 9019 LD R1,Y+ 000089 9009 LD R0,Y+ 00008a 9518 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< Y+3 ; timeb -> Y+1 ; i -> R17 00008e e010 LDI R17,LOW(0) _0x10: 00008f 81eb LDD R30,Y+3 000090 171e CP R17,R30 000091 f450 BRSH _0x11 ; 0000 010C { ; 0000 010D LED_ON(6); //вкл. светодиод PORTD.6 000092 9a96 SBI 0x12,6 ; 0000 010E delay_ms(timeb); 000093 81a9 LDD R26,Y+1 000094 81ba LDD R27,Y+1+1 000095 d1d5 RCALL _delay_ms ; 0000 010F LED_OFF(6); //выкл. тест светодиод PORTD.6 000096 9896 CBI 0x12,6 ; 0000 0110 delay_ms(timeb); 000097 81a9 LDD R26,Y+1 000098 81ba LDD R27,Y+1+1 000099 d1d1 RCALL _delay_ms ; 0000 0111 }; 00009a 5f1f SUBI R17,-1 00009b cff3 RJMP _0x10 _0x11: ; 0000 0112 } 00009c 8118 LDD R17,Y+0 00009d c056 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) 00009e 93ba ST -Y,R27 00009f 93aa ST -Y,R26 0000a0 d1df RCALL __SAVELOCR2 ; cmd -> Y+2 ; recv_16b -> R16,R17 + 0000a1 e000 +LDI R16 , LOW ( 0 ) 0000a2 e010 +LDI R17 , HIGH ( 0 ) __GETWRN 16,17,0 0000a3 98c4 CBI 0x18,4 ; 0000 011F //USIDR = data_w;//передаваемые данные в сдвиговый регисть ; 0000 0120 USIDR =cmd>>8;//16bit->8bit старший разряд, передаваемые данные в сдвиговый регистр 0000a4 81eb LDD R30,Y+3 0000a5 70f0 ANDI R31,HIGH(0x0) 0000a6 b9ef OUT 0xF,R30 ; 0000 0121 USICR = 0b00010001;//и формируем тактирующие импульсы программно 0000a7 e1e1 LDI R30,LOW(17) 0000a8 b9ed OUT 0xD,R30 ; 0000 0122 USICR = 0b00010011; 0000a9 e1e3 LDI R30,LOW(19) 0000aa b9ed OUT 0xD,R30 ; 0000 0123 USICR = 0b00010001; 0000ab e1e1 LDI R30,LOW(17) 0000ac b9ed OUT 0xD,R30 ; 0000 0124 USICR = 0b00010011; 0000ad e1e3 LDI R30,LOW(19) 0000ae b9ed OUT 0xD,R30 ; 0000 0125 USICR = 0b00010001; 0000af e1e1 LDI R30,LOW(17) 0000b0 b9ed OUT 0xD,R30 ; 0000 0126 USICR = 0b00010011; 0000b1 e1e3 LDI R30,LOW(19) 0000b2 b9ed OUT 0xD,R30 ; 0000 0127 USICR = 0b00010001; 0000b3 e1e1 LDI R30,LOW(17) 0000b4 b9ed OUT 0xD,R30 ; 0000 0128 USICR = 0b00010011; 0000b5 e1e3 LDI R30,LOW(19) 0000b6 b9ed OUT 0xD,R30 ; 0000 0129 USICR = 0b00010001; 0000b7 e1e1 LDI R30,LOW(17) 0000b8 b9ed OUT 0xD,R30 ; 0000 012A USICR = 0b00010011; 0000b9 e1e3 LDI R30,LOW(19) 0000ba b9ed OUT 0xD,R30 ; 0000 012B USICR = 0b00010001; 0000bb e1e1 LDI R30,LOW(17) 0000bc b9ed OUT 0xD,R30 ; 0000 012C USICR = 0b00010011; 0000bd e1e3 LDI R30,LOW(19) 0000be b9ed OUT 0xD,R30 ; 0000 012D USICR = 0b00010001; 0000bf e1e1 LDI R30,LOW(17) 0000c0 b9ed OUT 0xD,R30 ; 0000 012E USICR = 0b00010011; 0000c1 e1e3 LDI R30,LOW(19) 0000c2 b9ed OUT 0xD,R30 ; 0000 012F USICR = 0b00010001; 0000c3 e1e1 LDI R30,LOW(17) 0000c4 b9ed OUT 0xD,R30 ; 0000 0130 USICR = 0b00010011; 0000c5 e1e3 LDI R30,LOW(19) 0000c6 b9ed OUT 0xD,R30 ; 0000 0131 recv_16b = USIDR<<8; //сохраняем старший байт из USIDR 0000c7 b1ef IN R30,0xF 0000c8 2ffe MOV R31,R30 0000c9 e0e0 LDI R30,0 0000ca 018f MOVW R16,R30 ; 0000 0132 ; 0000 0133 USIDR = cmd&0x00FF;//оставляем младший байт (8бит разряд вместо FF) 0000cb 81ea LDD R30,Y+2 0000cc b9ef OUT 0xF,R30 ; 0000 0134 //USIDR =cmd<<8;//16bit->8bit младший разряд, передаваемые данные в сдвиговый регистр ; 0000 0135 USICR = 0b00010001;//и формируем тактирующие импульсы программно 0000cd e1e1 LDI R30,LOW(17) 0000ce b9ed OUT 0xD,R30 ; 0000 0136 USICR = 0b00010011; 0000cf e1e3 LDI R30,LOW(19) 0000d0 b9ed OUT 0xD,R30 ; 0000 0137 USICR = 0b00010001; 0000d1 e1e1 LDI R30,LOW(17) 0000d2 b9ed OUT 0xD,R30 ; 0000 0138 USICR = 0b00010011; 0000d3 e1e3 LDI R30,LOW(19) 0000d4 b9ed OUT 0xD,R30 ; 0000 0139 USICR = 0b00010001; 0000d5 e1e1 LDI R30,LOW(17) 0000d6 b9ed OUT 0xD,R30 ; 0000 013A USICR = 0b00010011; 0000d7 e1e3 LDI R30,LOW(19) 0000d8 b9ed OUT 0xD,R30 ; 0000 013B USICR = 0b00010001; 0000d9 e1e1 LDI R30,LOW(17) 0000da b9ed OUT 0xD,R30 ; 0000 013C USICR = 0b00010011; 0000db e1e3 LDI R30,LOW(19) 0000dc b9ed OUT 0xD,R30 ; 0000 013D USICR = 0b00010001; 0000dd e1e1 LDI R30,LOW(17) 0000de b9ed OUT 0xD,R30 ; 0000 013E USICR = 0b00010011; 0000df e1e3 LDI R30,LOW(19) 0000e0 b9ed OUT 0xD,R30 ; 0000 013F USICR = 0b00010001; 0000e1 e1e1 LDI R30,LOW(17) 0000e2 b9ed OUT 0xD,R30 ; 0000 0140 USICR = 0b00010011; 0000e3 e1e3 LDI R30,LOW(19) 0000e4 b9ed OUT 0xD,R30 ; 0000 0141 USICR = 0b00010001; 0000e5 e1e1 LDI R30,LOW(17) 0000e6 b9ed OUT 0xD,R30 ; 0000 0142 USICR = 0b00010011; 0000e7 e1e3 LDI R30,LOW(19) 0000e8 b9ed OUT 0xD,R30 ; 0000 0143 USICR = 0b00010001; 0000e9 e1e1 LDI R30,LOW(17) 0000ea b9ed OUT 0xD,R30 ; 0000 0144 USICR = 0b00010011; 0000eb e1e3 LDI R30,LOW(19) 0000ec b9ed OUT 0xD,R30 ; 0000 0145 recv_16b |=USIDR; //(побитовая операция ИЛИ) добовляем младший байт из USIDR 0000ed b1ef IN R30,0xF 0000ee e0f0 LDI R31,0 + 0000ef 2b0e +OR R16 , R30 0000f0 2b1f +OR R17 , R31 __ORWRR 16,17,30,31 ; 0000 0146 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) 0000f1 9ac4 SBI 0x18,4 ; 0000 0147 return recv_16b; //возврашаем 16bit полученные данные из USIDR 0000f2 01f8 MOVW R30,R16 0000f3 d18f RCALL __LOADLOCR2 _0x2060003: 0000f4 9624 ADIW R28,4 0000f5 9508 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< Y+0 _0x16: 0000f7 9982 SBIC 0x10,2 0000f8 cffe RJMP _0x16 ; 0000 0173 USIDR = rf_byte;//8bit отправляем байт в сдвиговый регистр 0000f9 81e8 LD R30,Y 0000fa b9ef OUT 0xF,R30 ; 0000 0174 USICR = 0b00010001;//и формируем тактирующие импульсы программно 0000fb e1e1 LDI R30,LOW(17) 0000fc b9ed OUT 0xD,R30 ; 0000 0175 USICR = 0b00010011; 0000fd e1e3 LDI R30,LOW(19) 0000fe b9ed OUT 0xD,R30 ; 0000 0176 USICR = 0b00010001; 0000ff e1e1 LDI R30,LOW(17) 000100 b9ed OUT 0xD,R30 ; 0000 0177 USICR = 0b00010011; 000101 e1e3 LDI R30,LOW(19) 000102 b9ed OUT 0xD,R30 ; 0000 0178 USICR = 0b00010001; 000103 e1e1 LDI R30,LOW(17) 000104 b9ed OUT 0xD,R30 ; 0000 0179 USICR = 0b00010011; 000105 e1e3 LDI R30,LOW(19) 000106 b9ed OUT 0xD,R30 ; 0000 017A USICR = 0b00010001; 000107 e1e1 LDI R30,LOW(17) 000108 b9ed OUT 0xD,R30 ; 0000 017B USICR = 0b00010011; 000109 e1e3 LDI R30,LOW(19) 00010a b9ed OUT 0xD,R30 ; 0000 017C USICR = 0b00010001; 00010b e1e1 LDI R30,LOW(17) 00010c b9ed OUT 0xD,R30 ; 0000 017D USICR = 0b00010011; 00010d e1e3 LDI R30,LOW(19) 00010e b9ed OUT 0xD,R30 ; 0000 017E USICR = 0b00010001; 00010f e1e1 LDI R30,LOW(17) 000110 b9ed OUT 0xD,R30 ; 0000 017F USICR = 0b00010011; 000111 e1e3 LDI R30,LOW(19) 000112 b9ed OUT 0xD,R30 ; 0000 0180 USICR = 0b00010001; 000113 e1e1 LDI R30,LOW(17) 000114 b9ed OUT 0xD,R30 ; 0000 0181 USICR = 0b00010011; 000115 e1e3 LDI R30,LOW(19) 000116 b9ed OUT 0xD,R30 ; 0000 0182 USICR = 0b00010001; 000117 e1e1 LDI R30,LOW(17) 000118 b9ed OUT 0xD,R30 ; 0000 0183 USICR = 0b00010011; 000119 e1e3 LDI R30,LOW(19) 00011a b9ed OUT 0xD,R30 ; 0000 0184 //HI(2); //выкл. тест светодиод PORTB.2 ; 0000 0185 //USISR |= (1<медленный, ручной-быстрый) 000131 eeac LDI R26,LOW(49900) 000132 ecb2 LDI R27,HIGH(49900) 000133 df6a 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-буфера по шаблону синхронизации 000134 e8a3 LDI R26,LOW(51843) 000135 ecba LDI R27,HIGH(51843) 000136 df67 RCALL _writeCmd ; 0000 01AF //writeCmd(0xCAC3); ; 0000 01B0 //writeCmd(0xCAE3); ; 0000 01B1 writeCmd(0xCED6); //синхробайт (SYNC=D4 по умолчанию) 000137 eda6 LDI R26,LOW(52950) 000138 ecbe LDI R27,HIGH(52950) 000139 df64 RCALL _writeCmd ; 0000 01B2 //writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN ; 0000 01B3 writeCmd(0xC49B); //@PWR,YES RSTRIC,st,!fi,OE,EN 00013a e9ab LDI R26,LOW(50331) 00013b ecb4 LDI R27,HIGH(50331) 00013c df61 RCALL _writeCmd ; 0000 01B4 //=== настройка модуляции и выходной мощности === ; 0000 01B5 writeCmd(0x9850); //!mp,90kHz(57.6kbps),MAX OUT 00013d e5a0 LDI R26,LOW(38992) 00013e e9b8 LDI R27,HIGH(38992) 00013f df5e 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 000140 e7a7 LDI R26,LOW(52343) 000141 ecbc LDI R27,HIGH(52343) 000142 df5b RCALL _writeCmd ; 0000 01B9 writeCmd(0xE000); //NOT USED 000143 e0a0 LDI R26,LOW(57344) 000144 eeb0 LDI R27,HIGH(57344) 000145 df58 RCALL _writeCmd ; 0000 01BA writeCmd(0xC800); //NOT USED 000146 e0a0 LDI R26,LOW(51200) 000147 ecb8 LDI R27,HIGH(51200) 000148 df55 RCALL _writeCmd ; 0000 01BB writeCmd(0xC000); //1.0MHz,2.2V NOT USED 000149 e0a0 LDI R26,LOW(49152) 00014a ecb0 LDI R27,HIGH(49152) 00014b c02f 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) 00014c 98c6 CBI 0x18,6 ; 0000 01E4 //if (nINT && DCLK) {} //если данные действительны и FIFO заполнен ; 0000 01E5 while (!(nINT && DCLK)); //ждём действительных данных и заполнения FIFO _0x1B: 00014d 9bb3 SBIS 0x16,3 00014e c002 RJMP _0x1E 00014f 99b1 SBIC 0x16,1 000150 c001 RJMP _0x1D _0x1E: 000151 cffb RJMP _0x1B _0x1D: ; 0000 01E6 FSK=0; //0-выбор FIFO для чтения 000152 98c2 CBI 0x18,2 ; 0000 01E7 LO(nSEL); // PORTB.4 SPI nSEL=0 (chip select ENABLE) 000153 98c4 CBI 0x18,4 ; 0000 01E8 ; 0000 01E9 //USIDR = 0;//передаваемые данные в сдвиговый регисть ; 0000 01EA USICR = 0b00010001;//и формируем тактирующие импульсы программно 3,70MHz SCK!!!(foc/4) 000154 e1e1 LDI R30,LOW(17) 000155 b9ed OUT 0xD,R30 ; 0000 01EB USICR = 0b00010011; //0x13 000156 e1e3 LDI R30,LOW(19) 000157 b9ed OUT 0xD,R30 ; 0000 01EC USICR = 0b00010001; //0x11 000158 e1e1 LDI R30,LOW(17) 000159 b9ed OUT 0xD,R30 ; 0000 01ED USICR = 0b00010011; 00015a e1e3 LDI R30,LOW(19) 00015b b9ed OUT 0xD,R30 ; 0000 01EE USICR = 0b00010001; 00015c e1e1 LDI R30,LOW(17) 00015d b9ed OUT 0xD,R30 ; 0000 01EF USICR = 0b00010011; 00015e e1e3 LDI R30,LOW(19) 00015f b9ed OUT 0xD,R30 ; 0000 01F0 USICR = 0b00010001; 000160 e1e1 LDI R30,LOW(17) 000161 b9ed OUT 0xD,R30 ; 0000 01F1 USICR = 0b00010011; 000162 e1e3 LDI R30,LOW(19) 000163 b9ed OUT 0xD,R30 ; 0000 01F2 USICR = 0b00010001; 000164 e1e1 LDI R30,LOW(17) 000165 b9ed OUT 0xD,R30 ; 0000 01F3 USICR = 0b00010011; 000166 e1e3 LDI R30,LOW(19) 000167 b9ed OUT 0xD,R30 ; 0000 01F4 USICR = 0b00010001; 000168 e1e1 LDI R30,LOW(17) 000169 b9ed OUT 0xD,R30 ; 0000 01F5 USICR = 0b00010011; 00016a e1e3 LDI R30,LOW(19) 00016b b9ed OUT 0xD,R30 ; 0000 01F6 USICR = 0b00010001; 00016c e1e1 LDI R30,LOW(17) 00016d b9ed OUT 0xD,R30 ; 0000 01F7 USICR = 0b00010011; 00016e e1e3 LDI R30,LOW(19) 00016f b9ed OUT 0xD,R30 ; 0000 01F8 USICR = 0b00010001; 000170 e1e1 LDI R30,LOW(17) 000171 b9ed OUT 0xD,R30 ; 0000 01F9 USICR = 0b00010011; 000172 e1e3 LDI R30,LOW(19) 000173 b9ed OUT 0xD,R30 ; 0000 01FA //dataRF = USIDR; //сохраняем байт из USIDR ; 0000 01FB return (USIDR); 000174 b1ef IN R30,0xF 000175 9508 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< R17 ; b1 -> R16 ; b2 -> R19 ; b3 -> R18 ; b4 -> R21 0001b5 94f8 cli ; 0000 0309 ; 0000 030A init_ATtiny();//инициализация железа init_ATtiny2313 0001b6 dfc6 RCALL _init_ATtiny ; 0000 030B BAUDRATE; //из define BAUDRATE UBRRL=0x07; Baud Rate: 115200bps 0001b7 e0e7 LDI R30,LOW(7) 0001b8 b9e9 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 0001b9 df62 RCALL _rfInit ; 0000 0313 putsf("rfInit\r\n");//=== тестовое сообщение на терминал ==== + 0001ba e3ac +LDI R26 , LOW ( 2 * _0x0 + ( 0 ) ) 0001bb e0b0 +LDI R27 , HIGH ( 2 * _0x0 + ( 0 ) ) __POINTW2FN _0x0,0 0001bc d099 RCALL _putsf ; 0000 0314 LED_Blink(3, 100);//мигаем для теста 3 раза быстро 0001bd e0e3 LDI R30,LOW(3) 0001be 93ea ST -Y,R30 0001bf e6a4 LDI R26,LOW(100) 0001c0 e0b0 LDI R27,0 0001c1 dec9 RCALL _LED_Blink ; 0000 0315 #asm("sei")// глобально разрешить прерывания 0001c2 9478 sei ; 0000 0316 FIFOReset(); 0001c3 dfb2 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(); 0001c4 df87 RCALL _rfRecv 0001c5 2f1e MOV R17,R30 ; 0000 0328 putchar(dataGPS); //передача данных на UART 0001c6 2fa1 MOV R26,R17 0001c7 d087 RCALL _putchar ; 0000 0329 if (dataGPS == knb) { //обработка данных от кнопки 0001c8 e0a0 LDI R26,LOW(_knb) 0001c9 e0b0 LDI R27,HIGH(_knb) 0001ca d0aa RCALL __EEPROMRDB 0001cb 17e1 CP R30,R17 0001cc f511 BRNE _0x26 ; 0000 032A b1=rfRecv(); //1-й байт кнопки 0001cd df7e RCALL _rfRecv 0001ce 2f0e MOV R16,R30 ; 0000 032B b2=rfRecv(); 0001cf df7c RCALL _rfRecv 0001d0 2f3e MOV R19,R30 ; 0000 032C b3=rfRecv(); 0001d1 df7a RCALL _rfRecv 0001d2 2f2e MOV R18,R30 ; 0000 032D b4=rfRecv(); //4-й байт кнопки 0001d3 df78 RCALL _rfRecv 0001d4 2f5e 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 приёмного региста 0001d5 9ac2 SBI 0x18,2 ; 0000 033B HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) 0001d6 9ac4 SBI 0x18,4 ; 0000 033C FIFOReset(); //приём окончен 0001d7 df9e RCALL _FIFOReset ; 0000 033D //проверка срабатывания кнопоки1 или кнопки2 ; 0000 033E if (b1==k1b1 && b2==k1b2 && b3==k1b3 && b4==k1b4) { //кнопка1 0001d8 e0a1 LDI R26,LOW(_k1b1) 0001d9 e0b0 LDI R27,HIGH(_k1b1) 0001da d09a RCALL __EEPROMRDB 0001db 17e0 CP R30,R16 0001dc f479 BRNE _0x2A 0001dd e0a2 LDI R26,LOW(_k1b2) 0001de e0b0 LDI R27,HIGH(_k1b2) 0001df d095 RCALL __EEPROMRDB 0001e0 17e3 CP R30,R19 0001e1 f451 BRNE _0x2A 0001e2 e0a3 LDI R26,LOW(_k1b3) 0001e3 e0b0 LDI R27,HIGH(_k1b3) 0001e4 d090 RCALL __EEPROMRDB 0001e5 17e2 CP R30,R18 0001e6 f429 BRNE _0x2A 0001e7 e0a4 LDI R26,LOW(_k1b4) 0001e8 e0b0 LDI R27,HIGH(_k1b4) 0001e9 d08b RCALL __EEPROMRDB 0001ea 17e5 CP R30,R21 0001eb f009 BREQ _0x2B _0x2A: 0001ec c001 RJMP _0x29 _0x2B: ; 0000 033F PORTD.4=1; //вкл. выход кн.1 на зв. излучатель 0001ed 9a94 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; 0001ee cfd5 RJMP _0x25 ; 0000 034D }; _0x26: ; 0000 034E ; 0000 034F FSK=1; //1-выкл. чтения FIFO приёмного региста 0001ef 9ac2 SBI 0x18,2 ; 0000 0350 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) 0001f0 9ac4 SBI 0x18,4 ; 0000 0351 FIFOReset(); 0001f1 df84 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 } 0001f2 cfd1 RJMP _0x22 ; 0000 036B ; 0000 036C } _0x30: 0001f3 cfff RJMP _0x30 ; .FEND ; ; ;void rfSend_K(char kb) //передача кода кнопки ; 0000 0370 { _rfSend_K: ; .FSTART _rfSend_K 0001f4 92ff 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 0001f5 93aa ST -Y,R26 ; kb -> Y+0 ; flag_rx -> R15.0 0001f6 9986 SBIC 0x10,6 0001f7 c007 RJMP _0x31 ; 0000 0378 flag_rx=1; //запоминаем, какой был режим до переключения 0001f8 9468 SET 0001f9 f8f0 BLD R15,0 ; 0000 0379 LED_ON(6); //вкл. светодиод и усилитель мощности 0001fa 9a96 SBI 0x12,6 ; 0000 037A FSK=1; //1-вкл. передающий регистр 0001fb 9ac2 SBI 0x18,2 ; 0000 037B writeCmd(0x8239); //вкл. передатчик TX 0001fc e3a9 LDI R26,LOW(33337) 0001fd e8b2 LDI R27,HIGH(33337) 0001fe de9f RCALL _writeCmd ; 0000 037C }; _0x31: ; 0000 037D FSK=1; //1-вкл. перед. регистр 0001ff 9ac2 SBI 0x18,2 ; 0000 037E writeCmd(0x0000);//читать регистр состояния перед каждым кадром 000200 e0a0 LDI R26,LOW(0) 000201 e0b0 LDI R27,0 000202 de9b RCALL _writeCmd ; 0000 037F LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) 000203 98c4 CBI 0x18,4 ; 0000 0380 //FSK=1; //1-вкл. перед. регистр здесь не будет работать ; 0000 0381 rfSend_Byte(0xB8); // вкл. Передающий регистр 000204 eba8 LDI R26,LOW(184) 000205 def0 RCALL _rfSend_Byte ; 0000 0382 rfSend_Byte(0xAA); // PREAMBLE SYNC byte, рекомендованная длина 8бит-12бит 000206 eaaa LDI R26,LOW(170) 000207 deee RCALL _rfSend_Byte ; 0000 0383 //rfSend_Byte(0xAA); // SYNC byte, необязателен ; 0000 0384 //========= Шаблон действительных данных ; 0000 0385 rfSend_Byte(0x2D); // SYNC HI byte 000208 e2ad LDI R26,LOW(45) 000209 deec RCALL _rfSend_Byte ; 0000 0386 rfSend_Byte(0xD6); // SYNC LOW byte, (по умолчанию D4) программируется 00020a eda6 LDI R26,LOW(214) 00020b deea RCALL _rfSend_Byte ; 0000 0387 //========= передача данных ; 0000 0388 rfSend_Byte(knb); // передача символа кнопки 00020c e0a0 LDI R26,LOW(_knb) 00020d e0b0 LDI R27,HIGH(_knb) 00020e d066 RCALL __EEPROMRDB 00020f 2fae MOV R26,R30 000210 dee5 RCALL _rfSend_Byte ; 0000 0389 if (kb==1) { 000211 81a8 LD R26,Y 000212 30a1 CPI R26,LOW(0x1) 000213 f4a1 BRNE _0x38 ; 0000 038A rfSend_Byte(k1b1); // передача byte1 кнопки1 000214 e0a1 LDI R26,LOW(_k1b1) 000215 e0b0 LDI R27,HIGH(_k1b1) 000216 d05e RCALL __EEPROMRDB 000217 2fae MOV R26,R30 000218 dedd RCALL _rfSend_Byte ; 0000 038B rfSend_Byte(k1b2); // передача byte2 000219 e0a2 LDI R26,LOW(_k1b2) 00021a e0b0 LDI R27,HIGH(_k1b2) 00021b d059 RCALL __EEPROMRDB 00021c 2fae MOV R26,R30 00021d ded8 RCALL _rfSend_Byte ; 0000 038C rfSend_Byte(k1b3); // передача byte3 00021e e0a3 LDI R26,LOW(_k1b3) 00021f e0b0 LDI R27,HIGH(_k1b3) 000220 d054 RCALL __EEPROMRDB 000221 2fae MOV R26,R30 000222 ded3 RCALL _rfSend_Byte ; 0000 038D rfSend_Byte(k1b4); // передача byte4 000223 e0a4 LDI R26,LOW(_k1b4) 000224 e0b0 LDI R27,HIGH(_k1b4) 000225 d04f RCALL __EEPROMRDB 000226 2fae MOV R26,R30 000227 dece 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) { 000228 81a8 LD R26,Y 000229 30a2 CPI R26,LOW(0x2) 00022a f4a1 BRNE _0x39 ; 0000 0393 rfSend_Byte(k2b1); // передача byte1 кнопки2 00022b e0a5 LDI R26,LOW(_k2b1) 00022c e0b0 LDI R27,HIGH(_k2b1) 00022d d047 RCALL __EEPROMRDB 00022e 2fae MOV R26,R30 00022f dec6 RCALL _rfSend_Byte ; 0000 0394 rfSend_Byte(k2b2); // передача byte2 000230 e0a6 LDI R26,LOW(_k2b2) 000231 e0b0 LDI R27,HIGH(_k2b2) 000232 d042 RCALL __EEPROMRDB 000233 2fae MOV R26,R30 000234 dec1 RCALL _rfSend_Byte ; 0000 0395 rfSend_Byte(k2b3); // передача byte3 000235 e0a7 LDI R26,LOW(_k2b3) 000236 e0b0 LDI R27,HIGH(_k2b3) 000237 d03d RCALL __EEPROMRDB 000238 2fae MOV R26,R30 000239 debc RCALL _rfSend_Byte ; 0000 0396 rfSend_Byte(k2b4); // передача byte4 00023a e0a8 LDI R26,LOW(_k2b4) 00023b e0b0 LDI R27,HIGH(_k2b4) 00023c d038 RCALL __EEPROMRDB 00023d 2fae MOV R26,R30 00023e deb7 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 00023f e0a0 LDI R26,LOW(0) 000240 deb5 RCALL _rfSend_Byte ; 0000 039C //rfSend_Byte(0xAA); // DUMMY BYTES ; 0000 039D FSK=0; //0-выкл.перед.регистр, вкл. приёмный регистр 000241 98c2 CBI 0x18,2 ; 0000 039E HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) 000242 9ac4 SBI 0x18,4 ; 0000 039F //flag_Kn=1; ; 0000 03A0 delay_ms(25); 000243 e1a9 LDI R26,LOW(25) 000244 e0b0 LDI R27,0 000245 d025 RCALL _delay_ms ; 0000 03A1 //===== передача окончена === ; 0000 03A2 //=== переход в режем приёма ============================================ ; 0000 03A3 if (flag_rx==1) { //восстанавливаем режим, который был до переключения 000246 fef0 SBRS R15,0 000247 c004 RJMP _0x3C ; 0000 03A4 writeCmd(0x82D9); //вкл. приёмник RX 000248 eda9 LDI R26,LOW(33497) 000249 e8b2 LDI R27,HIGH(33497) 00024a de53 RCALL _writeCmd ; 0000 03A5 LED_OFF(6); //выкл. усилитель мощности и светодиод, вкл ант. усилитель 00024b 9896 CBI 0x12,6 ; 0000 03A6 } ; 0000 03A7 //#asm("sei")// глобально разрешить прерывания ; 0000 03A8 //GIMSK=0x80; //разрешить прерывания int1 ; 0000 03A9 } _0x3C: 00024c 9621 ADIW R28,1 00024d 90ff POP R15 00024e 9508 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__ #endif .CSEG _putchar: ; .FSTART _putchar 00024f 93aa ST -Y,R26 putchar0: 000250 9b5d sbis usr,udre 000251 cffe rjmp putchar0 000252 81e8 ld r30,y 000253 b9ec out udr,r30 _0x2060001: 000254 9621 ADIW R28,1 000255 9508 RET ; .FEND _putsf: ; .FSTART _putsf 000256 93ba ST -Y,R27 000257 93aa ST -Y,R26 000258 931a ST -Y,R17 _0x2000006: 000259 81e9 LDD R30,Y+1 00025a 81fa LDD R31,Y+1+1 00025b 9631 ADIW R30,1 00025c 83e9 STD Y+1,R30 00025d 83fa STD Y+1+1,R31 00025e 9731 SBIW R30,1 00025f 91e4 LPM R30,Z 000260 2f1e MOV R17,R30 000261 30e0 CPI R30,0 000262 f019 BREQ _0x2000008 000263 2fa1 MOV R26,R17 000264 dfea RCALL _putchar 000265 cff3 RJMP _0x2000006 _0x2000008: 000266 e0aa LDI R26,LOW(10) 000267 dfe7 RCALL _putchar 000268 8118 LDD R17,Y+0 000269 9623 ADIW R28,3 00026a 9508 RET ; .FEND .CSEG .CSEG .ESEG _knb: 000000 .BYTE 0x1 _k1b1: 000001 .BYTE 0x1 _k1b2: 000002 .BYTE 0x1 _k1b3: 000003 .BYTE 0x1 _k1b4: 000004 .BYTE 0x1 _k2b1: 000005 .BYTE 0x1 _k2b2: 000006 .BYTE 0x1 _k2b3: 000007 .BYTE 0x1 _k2b4: 000008 .BYTE 0x1 .CSEG .CSEG _delay_ms: 00026b 9610 adiw r26,0 00026c f039 breq __delay_ms1 __delay_ms0: + 00026d e686 +LDI R24 , LOW ( 0xE66 ) 00026e e09e +LDI R25 , HIGH ( 0xE66 ) +__DELAY_USW_LOOP : 00026f 9701 +SBIW R24 , 1 000270 f7f1 +BRNE __DELAY_USW_LOOP __DELAY_USW 0xE66 000271 95a8 wdr 000272 9711 sbiw r26,1 000273 f7c9 brne __delay_ms0 __delay_ms1: 000274 9508 ret __EEPROMRDB: 000275 99e1 SBIC EECR,EEWE 000276 cffe RJMP __EEPROMRDB 000277 93ff PUSH R31 000278 b7ff IN R31,SREG 000279 94f8 CLI 00027a bbae OUT EEARL,R26 00027b 9ae0 SBI EECR,EERE 00027c b3ed IN R30,EEDR 00027d bfff OUT SREG,R31 00027e 91ff POP R31 00027f 9508 RET __SAVELOCR2: 000280 931a ST -Y,R17 000281 930a ST -Y,R16 000282 9508 RET __LOADLOCR2: 000283 8119 LDD R17,Y+1 000284 8108 LD R16,Y 000285 9508 RET ;END OF CODE MARKER __END_OF_CODE: RESOURCE USE INFORMATION ------------------------ Notice: The register and instruction counts are symbol table hit counts, and hence implicitly used resources are not counted, eg, the 'lpm' instruction without operands implicitly uses r0 and z, none of which are counted. x,y,z are separate entities in the symbol table and are counted separately from r26..r31 here. .dseg memory usage only counts static data declared with .byte ATtiny2313A register use summary: r0 : 2 r1 : 2 r2 : 0 r3 : 3 r4 : 0 r5 : 0 r6 : 0 r7 : 0 r8 : 0 r9 : 0 r10: 0 r11: 0 r12: 0 r13: 0 r14: 0 r15: 6 r16: 8 r17: 16 r18: 2 r19: 2 r20: 0 r21: 2 r22: 2 r23: 2 r24: 8 r25: 3 r26: 84 r27: 45 r28: 5 r29: 0 r30: 268 r31: 14 x : 2 y : 63 z : 1 Registers used: 21 out of 35 (60.0%) ATtiny2313A instruction use summary: .lds : 0 .lds.l: 0 .sts : 0 .sts.l: 0 adc : 0 add : 0 adiw : 6 and : 0 andi : 1 asr : 0 bclr : 0 bld : 1 brbc : 0 brbs : 0 brcc : 0 brcs : 0 break : 0 breq : 3 brge : 0 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 brne : 12 brpl : 0 brsh : 1 brtc : 0 brts : 0 brvc : 0 brvs : 0 bset : 0 bst : 0 cbi : 10 cbr : 1 clc : 0 clh : 0 cli : 3 cln : 0 clr : 2 cls : 0 clt : 0 clv : 0 clz : 0 com : 0 cp : 7 cpc : 0 cpi : 3 cpse : 0 dec : 2 des : 0 eor : 1 fmul : 0 fmuls : 0 fmulsu: 0 icall : 0 ijmp : 0 in : 8 inc : 1 ld : 20 ldd : 12 ldi : 194 lds : 0 lpm : 2 lsl : 0 lsr : 0 mov : 18 movw : 2 mul : 0 muls : 0 mulsu : 0 neg : 0 nop : 0 or : 2 ori : 0 out : 120 pop : 2 push : 2 rcall : 70 ret : 11 reti : 2 rjmp : 47 rol : 0 ror : 0 sbc : 0 sbci : 0 sbi : 13 sbic : 8 sbis : 4 sbiw : 3 sbr : 0 sbrc : 0 sbrs : 1 sec : 0 seh : 0 sei : 1 sen : 0 ser : 0 ses : 0 set : 1 sev : 0 sez : 0 sleep : 0 spm : 0 st : 31 std : 2 sts : 0 sub : 0 subi : 1 swap : 0 tst : 0 wdr : 2 Instructions used: 41 out of 114 (36.0%) ATtiny2313A memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- [.cseg] 0x000000 0x00050c 1264 28 1292 2048 63.1% [.dseg] 0x000060 0x000080 0 0 0 128 0.0% [.eseg] 0x000000 0x000009 0 9 9 128 7.0% Assembly complete, 0 errors, 2 warnings