AVRASM ver. 2.1.30 I:\AVR-1\=My Project\GPS-2313A\GPS-2313A-Rx_14400\List\RFM12B-2313A-Rx.asm Mon Feb 02 03:56:23 2015 I:\AVR-1\=My Project\GPS-2313A\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-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 c15b 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 008E //TCNT1L=0x8F80 & 0xff;// 0.5sec ; 0000 008F //============================== ; 0000 0090 TCNT1H=0x1F00 >> 8; //1.0sec, 0.25sec 000044 e1ef LDI R30,LOW(31) 000045 bded OUT 0x2D,R30 ; 0000 0091 TCNT1L=0x1F00 & 0xff;//1.0sec, 0.25sec 000046 e0e0 LDI R30,LOW(0) 000047 bdec OUT 0x2C,R30 ; 0000 0092 //============================== ; 0000 0093 //TCNT1H=0xA600 >> 8; //0.1sec ; 0000 0094 //TCNT1L=0xA600 & 0xff;//0.1sec ; 0000 0095 //============================== ; 0000 0096 //можно проверять перемычку здесь if(PIND.5==1) {код таймера}; ; 0000 0097 ; 0000 0098 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 0099 if (PIND.4==1){ //если включен выход D.4 000051 9b84 SBIS 0x10,4 000052 c006 RJMP _0x5 ; 0000 009A TickTimer1s++; 000053 9433 INC R3 ; 0000 009B if (TickTimer1s == 2){ 000054 e0e2 LDI R30,LOW(2) 000055 15e3 CP R30,R3 000056 f411 BRNE _0x6 ; 0000 009C PORTD.4=0; //выкл.выход D.4 через 2сек 000057 9894 CBI 0x12,4 ; 0000 009D TickTimer1s = 0; //обнуляем через 5сек 000058 2433 CLR R3 ; 0000 009E }; _0x6: ; 0000 009F }; _0x5: ; 0000 00A0 ; 0000 00A1 //PORTB.0=0; //выкл.выход B.0 через 1сек ; 0000 00A2 //PORTD.4=0; //выкл.выход D.4 пикаем с периодом 1сек ; 0000 00A3 /* ; 0000 00A4 if (flag_1s==1 && flag_Kn==1) { ; 0000 00A5 GIMSK=0x80; //разрешить прерывания int1 ; 0000 00A6 GIFR=0x80; ; 0000 00A7 flag_Kn=0; ; 0000 00A8 }; ; 0000 00A9 */ ; 0000 00AA } 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 00BA { _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 00BB GIMSK=0x00; //запретить прерывания int1, здесь это лишнее 00006b e0e0 LDI R30,LOW(0) 00006c bfeb OUT 0x3B,R30 ; 0000 00BC 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 d157 RCALL _rfSend_K ; 0000 00BD 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 d150 RCALL _rfSend_K ; 0000 00BE //if (PIND.5==0) rfSend_K(2); //посылаем по RF код кнопки 2, поставить диод между кн1 и кн2 ; 0000 00BF GIMSK=0x80; //разрешить прерывания int1 _0xC: 00007b e8e0 LDI R30,LOW(128) 00007c bfeb OUT 0x3B,R30 ; 0000 00C0 //перед тем, как выйти из прерывания, надо сбросить флаг запроса прерывания, ; 0000 00C1 // так как из-за дребезга он мог установиться повторно. ; 0000 00C2 } 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 0101 { ; 0000 0102 LED_ON(6); //вкл. светодиод PORTD.6 000092 9a96 SBI 0x12,6 ; 0000 0103 delay_ms(timeb); 000093 81a9 LDD R26,Y+1 000094 81ba LDD R27,Y+1+1 000095 d191 RCALL _delay_ms ; 0000 0104 LED_OFF(6); //выкл. тест светодиод PORTD.6 000096 9896 CBI 0x12,6 ; 0000 0105 delay_ms(timeb); 000097 81a9 LDD R26,Y+1 000098 81ba LDD R27,Y+1+1 000099 d18d RCALL _delay_ms ; 0000 0106 }; 00009a 5f1f SUBI R17,-1 00009b cff3 RJMP _0x10 _0x11: ; 0000 0107 } 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 0111 { _writeCmd: ; .FSTART _writeCmd ; 0000 0112 unsigned int recv_16b=0; //16bit полученные из USIDR ; 0000 0113 LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) 00009e 93ba ST -Y,R27 00009f 93aa ST -Y,R26 0000a0 d190 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 0114 //USIDR = data_w;//передаваемые данные в сдвиговый регисть ; 0000 0115 USIDR =cmd>>8;//16bit->8bit старший разряд, передаваемые данные в сдвиговый регистр 0000a4 81eb LDD R30,Y+3 0000a5 70f0 ANDI R31,HIGH(0x0) 0000a6 b9ef OUT 0xF,R30 ; 0000 0116 USICR = 0b00010001;//и формируем тактирующие импульсы программно 0000a7 e1e1 LDI R30,LOW(17) 0000a8 b9ed OUT 0xD,R30 ; 0000 0117 USICR = 0b00010011; 0000a9 e1e3 LDI R30,LOW(19) 0000aa b9ed OUT 0xD,R30 ; 0000 0118 USICR = 0b00010001; 0000ab e1e1 LDI R30,LOW(17) 0000ac b9ed OUT 0xD,R30 ; 0000 0119 USICR = 0b00010011; 0000ad e1e3 LDI R30,LOW(19) 0000ae b9ed OUT 0xD,R30 ; 0000 011A USICR = 0b00010001; 0000af e1e1 LDI R30,LOW(17) 0000b0 b9ed OUT 0xD,R30 ; 0000 011B USICR = 0b00010011; 0000b1 e1e3 LDI R30,LOW(19) 0000b2 b9ed OUT 0xD,R30 ; 0000 011C USICR = 0b00010001; 0000b3 e1e1 LDI R30,LOW(17) 0000b4 b9ed OUT 0xD,R30 ; 0000 011D USICR = 0b00010011; 0000b5 e1e3 LDI R30,LOW(19) 0000b6 b9ed OUT 0xD,R30 ; 0000 011E USICR = 0b00010001; 0000b7 e1e1 LDI R30,LOW(17) 0000b8 b9ed OUT 0xD,R30 ; 0000 011F USICR = 0b00010011; 0000b9 e1e3 LDI R30,LOW(19) 0000ba b9ed OUT 0xD,R30 ; 0000 0120 USICR = 0b00010001; 0000bb e1e1 LDI R30,LOW(17) 0000bc b9ed OUT 0xD,R30 ; 0000 0121 USICR = 0b00010011; 0000bd e1e3 LDI R30,LOW(19) 0000be b9ed OUT 0xD,R30 ; 0000 0122 USICR = 0b00010001; 0000bf e1e1 LDI R30,LOW(17) 0000c0 b9ed OUT 0xD,R30 ; 0000 0123 USICR = 0b00010011; 0000c1 e1e3 LDI R30,LOW(19) 0000c2 b9ed OUT 0xD,R30 ; 0000 0124 USICR = 0b00010001; 0000c3 e1e1 LDI R30,LOW(17) 0000c4 b9ed OUT 0xD,R30 ; 0000 0125 USICR = 0b00010011; 0000c5 e1e3 LDI R30,LOW(19) 0000c6 b9ed OUT 0xD,R30 ; 0000 0126 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 0127 ; 0000 0128 USIDR = cmd&0x00FF;//оставляем младший байт (8бит разряд вместо FF) 0000cb 81ea LDD R30,Y+2 0000cc b9ef OUT 0xF,R30 ; 0000 0129 //USIDR =cmd<<8;//16bit->8bit младший разряд, передаваемые данные в сдвиговый регистр ; 0000 012A USICR = 0b00010001;//и формируем тактирующие импульсы программно 0000cd e1e1 LDI R30,LOW(17) 0000ce b9ed OUT 0xD,R30 ; 0000 012B USICR = 0b00010011; 0000cf e1e3 LDI R30,LOW(19) 0000d0 b9ed OUT 0xD,R30 ; 0000 012C USICR = 0b00010001; 0000d1 e1e1 LDI R30,LOW(17) 0000d2 b9ed OUT 0xD,R30 ; 0000 012D USICR = 0b00010011; 0000d3 e1e3 LDI R30,LOW(19) 0000d4 b9ed OUT 0xD,R30 ; 0000 012E USICR = 0b00010001; 0000d5 e1e1 LDI R30,LOW(17) 0000d6 b9ed OUT 0xD,R30 ; 0000 012F USICR = 0b00010011; 0000d7 e1e3 LDI R30,LOW(19) 0000d8 b9ed OUT 0xD,R30 ; 0000 0130 USICR = 0b00010001; 0000d9 e1e1 LDI R30,LOW(17) 0000da b9ed OUT 0xD,R30 ; 0000 0131 USICR = 0b00010011; 0000db e1e3 LDI R30,LOW(19) 0000dc b9ed OUT 0xD,R30 ; 0000 0132 USICR = 0b00010001; 0000dd e1e1 LDI R30,LOW(17) 0000de b9ed OUT 0xD,R30 ; 0000 0133 USICR = 0b00010011; 0000df e1e3 LDI R30,LOW(19) 0000e0 b9ed OUT 0xD,R30 ; 0000 0134 USICR = 0b00010001; 0000e1 e1e1 LDI R30,LOW(17) 0000e2 b9ed OUT 0xD,R30 ; 0000 0135 USICR = 0b00010011; 0000e3 e1e3 LDI R30,LOW(19) 0000e4 b9ed OUT 0xD,R30 ; 0000 0136 USICR = 0b00010001; 0000e5 e1e1 LDI R30,LOW(17) 0000e6 b9ed OUT 0xD,R30 ; 0000 0137 USICR = 0b00010011; 0000e7 e1e3 LDI R30,LOW(19) 0000e8 b9ed OUT 0xD,R30 ; 0000 0138 USICR = 0b00010001; 0000e9 e1e1 LDI R30,LOW(17) 0000ea b9ed OUT 0xD,R30 ; 0000 0139 USICR = 0b00010011; 0000eb e1e3 LDI R30,LOW(19) 0000ec b9ed OUT 0xD,R30 ; 0000 013A 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 013B HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) 0000f1 9ac4 SBI 0x18,4 ; 0000 013C return recv_16b; //возврашаем 16bit полученные данные из USIDR 0000f2 01f8 MOVW R30,R16 0000f3 d140 RCALL __LOADLOCR2 _0x2060003: 0000f4 9624 ADIW R28,4 0000f5 9508 RET ; 0000 013D } ; .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 0168 USIDR = rf_byte;//8bit отправляем байт в сдвиговый регистр 0000f9 81e8 LD R30,Y 0000fa b9ef OUT 0xF,R30 ; 0000 0169 USICR = 0b00010001;//и формируем тактирующие импульсы программно 0000fb e1e1 LDI R30,LOW(17) 0000fc b9ed OUT 0xD,R30 ; 0000 016A USICR = 0b00010011; 0000fd e1e3 LDI R30,LOW(19) 0000fe b9ed OUT 0xD,R30 ; 0000 016B USICR = 0b00010001; 0000ff e1e1 LDI R30,LOW(17) 000100 b9ed OUT 0xD,R30 ; 0000 016C USICR = 0b00010011; 000101 e1e3 LDI R30,LOW(19) 000102 b9ed OUT 0xD,R30 ; 0000 016D USICR = 0b00010001; 000103 e1e1 LDI R30,LOW(17) 000104 b9ed OUT 0xD,R30 ; 0000 016E USICR = 0b00010011; 000105 e1e3 LDI R30,LOW(19) 000106 b9ed OUT 0xD,R30 ; 0000 016F USICR = 0b00010001; 000107 e1e1 LDI R30,LOW(17) 000108 b9ed OUT 0xD,R30 ; 0000 0170 USICR = 0b00010011; 000109 e1e3 LDI R30,LOW(19) 00010a b9ed OUT 0xD,R30 ; 0000 0171 USICR = 0b00010001; 00010b e1e1 LDI R30,LOW(17) 00010c b9ed OUT 0xD,R30 ; 0000 0172 USICR = 0b00010011; 00010d e1e3 LDI R30,LOW(19) 00010e b9ed OUT 0xD,R30 ; 0000 0173 USICR = 0b00010001; 00010f e1e1 LDI R30,LOW(17) 000110 b9ed OUT 0xD,R30 ; 0000 0174 USICR = 0b00010011; 000111 e1e3 LDI R30,LOW(19) 000112 b9ed OUT 0xD,R30 ; 0000 0175 USICR = 0b00010001; 000113 e1e1 LDI R30,LOW(17) 000114 b9ed OUT 0xD,R30 ; 0000 0176 USICR = 0b00010011; 000115 e1e3 LDI R30,LOW(19) 000116 b9ed OUT 0xD,R30 ; 0000 0177 USICR = 0b00010001; 000117 e1e1 LDI R30,LOW(17) 000118 b9ed OUT 0xD,R30 ; 0000 0178 USICR = 0b00010011; 000119 e1e3 LDI R30,LOW(19) 00011a b9ed OUT 0xD,R30 ; 0000 0179 //HI(2); //выкл. тест светодиод PORTB.2 ; 0000 017A //USISR |= (1<медленный, ручной-быстрый) 000131 eeac LDI R26,LOW(49900) 000132 ecb2 LDI R27,HIGH(49900) 000133 df6a RCALL _writeCmd ; 0000 019E //writeCmd(0xC2FC); //включение аналогового фильтра, для приёма на наушники ; 0000 019F //writeCmd(0xC2AC); //AL,!ml,DIG,DQD4(авт.режим быстрый->медленный) ; 0000 01A0 //writeCmd(0xC2BC); //включение аналогового фильтра, для приёма на наушники ; 0000 01A1 //writeCmd(0xC26C); //!AL,ml,DIG,DQD4(ручной, быстрый) ; 0000 01A2 //writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR 81-заполнение FIFO-буфера не по шаблону синхронизации ; 0000 01A3 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 01A4 //writeCmd(0xCAC3); ; 0000 01A5 //writeCmd(0xCAE3); ; 0000 01A6 writeCmd(0xCED6); //синхробайт (SYNC=D4 по умолчанию) 000137 eda6 LDI R26,LOW(52950) 000138 ecbe LDI R27,HIGH(52950) 000139 df64 RCALL _writeCmd ; 0000 01A7 //writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN ; 0000 01A8 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 01A9 //=== настройка модуляции и выходной мощности === ; 0000 01AA 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 01AB //writeCmd(0x9870); //!mp,120kHz(115,2kbps),MAX OUT (120kHz зависит от скорости передачи) ; 0000 01AC //=============================================== ; 0000 01AD 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 01AE writeCmd(0xE000); //NOT USED 000143 e0a0 LDI R26,LOW(57344) 000144 eeb0 LDI R27,HIGH(57344) 000145 df58 RCALL _writeCmd ; 0000 01AF writeCmd(0xC800); //NOT USED 000146 e0a0 LDI R26,LOW(51200) 000147 ecb8 LDI R27,HIGH(51200) 000148 df55 RCALL _writeCmd ; 0000 01B0 writeCmd(0xC000); //1.0MHz,2.2V NOT USED 000149 e0a0 LDI R26,LOW(49152) 00014a ecb0 LDI R27,HIGH(49152) 00014b c015 RJMP _0x2060002 ; 0000 01B1 //printf("test-0\n\r"); ; 0000 01B2 //====================================================== ; 0000 01B3 //LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) ; 0000 01B4 //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ; 0000 01B5 //writeCmd(0x8219); //включен только кварцевый генератор ; 0000 01B6 //writeCmd(0x8218); //включен синтезатор, кварцевый генератор ; 0000 01B7 //writeCmd(0x8259); //вкл демодулятора ; 0000 01B8 //writeCmd(0x8221); // et-вкл. всего тракта передатчика,dc ; 0000 01B9 //writeCmd(0x8281); // et-вкл. всего тракта приёмника,dc ; 0000 01BA } ; .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!!! ;//unsigned char dataRF; ;SDO=0; //SPI DO otput (SPI RFM12B data input) ; //if (nINT && DCLK) {} //если данные действительны и FIFO заполнен ;while (!(nINT && DCLK)); //ждём действительных данных и заполнения FIFO ; FSK=0; //0-выбор FIFO для чтения ; LO(nSEL); // PORTB.4 SPI nSEL=0 (chip select ENABLE) ; ; //USIDR = 0;//передаваемые данные в сдвиговый регисть ; USICR = 0b00010001;//и формируем тактирующие импульсы программно 3,70MHz SCK!!!(foc/4) ; USICR = 0b00010011; //0x13 ; USICR = 0b00010001; //0x11 ; 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; ; //dataRF = USIDR; //сохраняем байт из USIDR ; return (USIDR); ;} ***/ ; //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 00019b 94f8 cli ; 0000 02FE ; 0000 02FF init_ATtiny();//инициализация железа init_ATtiny2313 00019c dfc6 RCALL _init_ATtiny ; 0000 0300 BAUDRATE; //из define BAUDRATE UBRRL=0x07; Baud Rate: 115200bps 00019d e0e7 LDI R30,LOW(7) 00019e b9e9 OUT 0x9,R30 ; 0000 0301 ; 0000 0302 //1.Инициализация RF12, установка параметров приёма-передачи ; 0000 0303 //Перед инициализацией модуля, вы можете сбросить его. Команда на сброс 0xFE00. ; 0000 0304 //2.Сброс буфера ; 0000 0305 //LED_OFF(6); //вкл. Rx светодиод, вкл. УВЧ приёмника ; 0000 0306 //FSK=1; //1-выкл. чтения FIFO приёмного региста, задано в init_ATtiny(); ; 0000 0307 rfInit(); //инициал. радиомодуля в Rx 00019f df7c RCALL _rfInit ; 0000 0308 putsf("rfInit\r\n");//=== тестовое сообщение на терминал ==== + 0001a0 e3ac +LDI R26 , LOW ( 2 * _0x0 + ( 0 ) ) 0001a1 e0b0 +LDI R27 , HIGH ( 2 * _0x0 + ( 0 ) ) __POINTW2FN _0x0,0 0001a2 d06f RCALL _putsf ; 0000 0309 LED_Blink(3, 100);//мигаем для теста 3 раза быстро 0001a3 e0e3 LDI R30,LOW(3) 0001a4 93ea ST -Y,R30 0001a5 e6a4 LDI R26,LOW(100) 0001a6 e0b0 LDI R27,0 0001a7 dee3 RCALL _LED_Blink ; 0000 030A #asm("sei")// глобально разрешить прерывания 0001a8 9478 sei ; 0000 030B FIFOReset(); 0001a9 dfb2 RCALL _FIFOReset ; 0000 030C ; 0000 030D while (1) _0x25: ; 0000 030E { ; 0000 030F line_begin: _0x28: ; 0000 0310 /////////////////////аналоговый приём///////////////////////// ; 0000 0311 // if (PIND.5==0) { ; 0000 0312 // //переключаем фильтр на аналоговый ; 0000 0313 // flag_R^=1; ; 0000 0314 // if (flag_R==1) { ; 0000 0315 // writeCmd(0x8098);//выключить приёмный FIFO, данные выводятся на вывод FSK ; 0000 0316 // //writeCmd(0x8018);//выключить передающий и приёмный FIFO ; 0000 0317 // //writeCmd(0xC2BC); //включение аналогового фильтра, ; 0000 0318 // }; ; 0000 0319 // }; ; 0000 031A ////////////////////////////////////////////////////////////// ; 0000 031B ; 0000 031C dataGPS=rfRecv(); 0001aa dfa1 RCALL _rfRecv 0001ab 2f1e MOV R17,R30 ; 0000 031D putchar(dataGPS); //передача данных на UART 0001ac 2fa1 MOV R26,R17 0001ad d05d RCALL _putchar ; 0000 031E if (dataGPS == knb) { //обработка данных от кнопки 0001ae 361b CPI R17,107 0001af f4b1 BRNE _0x29 ; 0000 031F b1=rfRecv(); //1-й байт кнопки 0001b0 df9b RCALL _rfRecv 0001b1 2f0e MOV R16,R30 ; 0000 0320 b2=rfRecv(); 0001b2 df99 RCALL _rfRecv 0001b3 2f3e MOV R19,R30 ; 0000 0321 b3=rfRecv(); 0001b4 df97 RCALL _rfRecv 0001b5 2f2e MOV R18,R30 ; 0000 0322 b4=rfRecv(); //4-й байт кнопки 0001b6 df95 RCALL _rfRecv 0001b7 2f5e MOV R21,R30 ; 0000 0323 //b5=rfRecv(); //5-й байт ; 0000 0324 /* ; 0000 0325 dataRF=b1; ; 0000 0326 for (i=0; i<2; i++) { //получаем 2 байта ; 0000 0327 dataRF+=rfRecv(); //проверить, дальше работать не будет ; 0000 0328 //потому, что в rfRecv(): while (!(nINT && DCLK)); ждём заполнения FIFO ; 0000 0329 //putchar(dataGPS); //передача данных на UART ; 0000 032A }; ; 0000 032B b4=rfRecv(); //получаем 4-й байт, сохраняем в b4 ; 0000 032C dataRF+=b4; ; 0000 032D ChkSum=rfRecv(); //5-й байт - контр. сумма ; 0000 032E */ ; 0000 032F FSK=1; //1-выкл. чтения FIFO приёмного региста 0001b8 9ac2 SBI 0x18,2 ; 0000 0330 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) 0001b9 9ac4 SBI 0x18,4 ; 0000 0331 FIFOReset(); //приём окончен 0001ba dfa1 RCALL _FIFOReset ; 0000 0332 //проверка срабатывания кнопоки1 или кнопки2 ; 0000 0333 if (b1==k1b1 && b2==k1b2 && b3==k1b3 && b4==k1b4) { //кнопка1 0001bb 3301 CPI R16,49 0001bc f431 BRNE _0x2D 0001bd 3332 CPI R19,50 0001be f421 BRNE _0x2D 0001bf 3323 CPI R18,51 0001c0 f411 BRNE _0x2D 0001c1 3354 CPI R21,52 0001c2 f009 BREQ _0x2E _0x2D: 0001c3 c001 RJMP _0x2C _0x2E: ; 0000 0334 PORTD.4=1; //вкл. выход кн.1 на зв. излучатель 0001c4 9a94 SBI 0x12,4 ; 0000 0335 //delay_ms(1000); //пока для теста ; 0000 0336 //PORTD.4=0; //выход кн.1 на зв. излучатель ; 0000 0337 //выключаем через 2сек в прерывании таймера ; 0000 0338 //break; ; 0000 0339 }; _0x2C: ; 0000 033A ; 0000 033B //if (b1==k2b1 && b2==k2b2 && b3==k2b3 && b4==k2b4) { //кнопка2 "" ; 0000 033C //PORTB.0=1; //выход кнопки2 (изменить на плате) ; 0000 033D //выключаем через 1сек в прерывании таймера ; 0000 033E //break; ; 0000 033F //}; ; 0000 0340 //putchar(dataRF); //передача данных на UART, можно отключить ; 0000 0341 goto line_begin; 0001c5 cfe4 RJMP _0x28 ; 0000 0342 }; _0x29: ; 0000 0343 ; 0000 0344 FSK=1; //1-выкл. чтения FIFO приёмного региста 0001c6 9ac2 SBI 0x18,2 ; 0000 0345 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) 0001c7 9ac4 SBI 0x18,4 ; 0000 0346 FIFOReset(); 0001c8 df93 RCALL _FIFOReset ; 0000 0347 ; 0000 0348 //== приём в аналоговом режиме, пока для теста ================================ ; 0000 0349 //аналоговый выход RSSI на модуле отсутствует, поэтому используем FSK/DATA/nFFS  ; 0000 034A //Transmit FSK data input/ Received data output (FIFO not used)/ FIFO select  ; 0000 034B /*** ; 0000 034C if (0) { //сейчас выключено if(0) ; 0000 034D PORTB=0x10; //PB2=IN ; 0000 034E DDRB=0xD0; //PB2=IN ; 0000 034F writeCmd(0x8098);//ДЛЯ аналогового приёма, FSK выход сигнала, перекл. МК pinB2 на ВХОД! ; 0000 0350 //writeCmd(0xC2FC); //включение аналогового фильтра, для приёма на наушники ; 0000 0351 while (1) { ; 0000 0352 dataGPS=rfRecv(); ; 0000 0353 putchar(dataGPS); //передача данных на UART ; 0000 0354 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ; 0000 0355 //FIFOReset(); ; 0000 0356 //analogRX=1; ; 0000 0357 }; ; 0000 0358 PORTB=0x14; //PB2=Out State2=1 FSK в режиме приёма начальная настройка ; 0000 0359 DDRB=0xD4; //PB2=Out начальная настройка ; 0000 035A writeCmd(0x80D8);//EL,EF,enable register,433MHz,12.5pF ; 0000 035B //writeCmd(0xC2EC); //al,ml,DIG,DQD4(авт.режим быстрый->медленный, ручной-быстрый) ; 0000 035C }; ; 0000 035D ***/ ; 0000 035E //== конец приёма в аналоговом режиме ========================================= ; 0000 035F } 0001c9 cfe0 RJMP _0x25 ; 0000 0360 ; 0000 0361 } _0x33: 0001ca cfff RJMP _0x33 ; .FEND ; ; ;void rfSend_K(char kb) //передача кода кнопки ; 0000 0365 { _rfSend_K: ; .FSTART _rfSend_K 0001cb 92ff PUSH R15 ; 0000 0366 bit flag_rx; ; 0000 0367 //char K1, K2; ; 0000 0368 //#asm("cli") // глобально запретить прерывания ; 0000 0369 //GIMSK=0x00; //запретить прерывания int1 ; 0000 036A ; 0000 036B //если был включен режим приёма, переключаемся на передачу ; 0000 036C if (PIND.6==0) { //переключение в режим TX 0001cc 93aa ST -Y,R26 ; kb -> Y+0 ; flag_rx -> R15.0 0001cd 9986 SBIC 0x10,6 0001ce c007 RJMP _0x34 ; 0000 036D flag_rx=1; //запоминаем, какой был режим до переключения 0001cf 9468 SET 0001d0 f8f0 BLD R15,0 ; 0000 036E LED_ON(6); //вкл. светодиод и усилитель мощности 0001d1 9a96 SBI 0x12,6 ; 0000 036F FSK=1; //1-вкл. передающий регистр 0001d2 9ac2 SBI 0x18,2 ; 0000 0370 writeCmd(0x8239); //вкл. передатчик TX 0001d3 e3a9 LDI R26,LOW(33337) 0001d4 e8b2 LDI R27,HIGH(33337) 0001d5 dec8 RCALL _writeCmd ; 0000 0371 }; _0x34: ; 0000 0372 FSK=1; //1-вкл. перед. регистр 0001d6 9ac2 SBI 0x18,2 ; 0000 0373 writeCmd(0x0000);//читать регистр состояния перед каждым кадром 0001d7 e0a0 LDI R26,LOW(0) 0001d8 e0b0 LDI R27,0 0001d9 dec4 RCALL _writeCmd ; 0000 0374 LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) 0001da 98c4 CBI 0x18,4 ; 0000 0375 //FSK=1; //1-вкл. перед. регистр здесь не будет работать ; 0000 0376 rfSend_Byte(0xB8); // вкл. Передающий регистр 0001db eba8 LDI R26,LOW(184) 0001dc df19 RCALL _rfSend_Byte ; 0000 0377 rfSend_Byte(0xAA); // PREAMBLE SYNC byte, рекомендованная длина 8бит-12бит 0001dd eaaa LDI R26,LOW(170) 0001de df17 RCALL _rfSend_Byte ; 0000 0378 //rfSend_Byte(0xAA); // SYNC byte, необязателен ; 0000 0379 //========= Шаблон действительных данных ; 0000 037A rfSend_Byte(0x2D); // SYNC HI byte 0001df e2ad LDI R26,LOW(45) 0001e0 df15 RCALL _rfSend_Byte ; 0000 037B rfSend_Byte(0xD6); // SYNC LOW byte, (по умолчанию D4) программируется 0001e1 eda6 LDI R26,LOW(214) 0001e2 df13 RCALL _rfSend_Byte ; 0000 037C //========= передача данных ; 0000 037D rfSend_Byte(knb); // передача символа кнопки 0001e3 e6ab LDI R26,LOW(107) 0001e4 df11 RCALL _rfSend_Byte ; 0000 037E if (kb==1) { 0001e5 81a8 LD R26,Y 0001e6 30a1 CPI R26,LOW(0x1) 0001e7 f441 BRNE _0x3B ; 0000 037F rfSend_Byte(k1b1); // передача byte1 кнопки1 0001e8 e3a1 LDI R26,LOW(49) 0001e9 df0c RCALL _rfSend_Byte ; 0000 0380 rfSend_Byte(k1b2); // передача byte2 0001ea e3a2 LDI R26,LOW(50) 0001eb df0a RCALL _rfSend_Byte ; 0000 0381 rfSend_Byte(k1b3); // передача byte3 0001ec e3a3 LDI R26,LOW(51) 0001ed df08 RCALL _rfSend_Byte ; 0000 0382 rfSend_Byte(k1b4); // передача byte4 0001ee e3a4 LDI R26,LOW(52) 0001ef df06 RCALL _rfSend_Byte ; 0000 0383 //rfSend_Byte(k1b5); // передача byte5 ; 0000 0384 //rfSend_Byte(codeK1); // передача codeK1 кнопки1 ; 0000 0385 }; _0x3B: ; 0000 0386 ; 0000 0387 if (kb==2) { 0001f0 81a8 LD R26,Y 0001f1 30a2 CPI R26,LOW(0x2) 0001f2 f441 BRNE _0x3C ; 0000 0388 rfSend_Byte(k2b1); // передача byte1 кнопки2 0001f3 e3a2 LDI R26,LOW(50) 0001f4 df01 RCALL _rfSend_Byte ; 0000 0389 rfSend_Byte(k2b2); // передача byte2 0001f5 e3a5 LDI R26,LOW(53) 0001f6 deff RCALL _rfSend_Byte ; 0000 038A rfSend_Byte(k2b3); // передача byte3 0001f7 e3a7 LDI R26,LOW(55) 0001f8 defd RCALL _rfSend_Byte ; 0000 038B rfSend_Byte(k2b4); // передача byte4 0001f9 e3a2 LDI R26,LOW(50) 0001fa defb RCALL _rfSend_Byte ; 0000 038C //rfSend_Byte(k2b5); // передача byte5 ; 0000 038D //rfSend_Byte(codeK2); // передача codeK2 кнопки2 ; 0000 038E }; _0x3C: ; 0000 038F //========= конец данных ; 0000 0390 rfSend_Byte(0x00); // DUMMY BYTES 0001fb e0a0 LDI R26,LOW(0) 0001fc def9 RCALL _rfSend_Byte ; 0000 0391 //rfSend_Byte(0xAA); // DUMMY BYTES ; 0000 0392 FSK=0; //0-выкл.перед.регистр, вкл. приёмный регистр 0001fd 98c2 CBI 0x18,2 ; 0000 0393 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) 0001fe 9ac4 SBI 0x18,4 ; 0000 0394 //flag_Kn=1; ; 0000 0395 delay_ms(25); 0001ff e1a9 LDI R26,LOW(25) 000200 e0b0 LDI R27,0 000201 d025 RCALL _delay_ms ; 0000 0396 //===== передача окончена === ; 0000 0397 //=== переход в режем приёма ============================================ ; 0000 0398 if (flag_rx==1) { //восстанавливаем режим, который был до переключения 000202 fef0 SBRS R15,0 000203 c004 RJMP _0x3F ; 0000 0399 writeCmd(0x82D9); //вкл. приёмник RX 000204 eda9 LDI R26,LOW(33497) 000205 e8b2 LDI R27,HIGH(33497) 000206 de97 RCALL _writeCmd ; 0000 039A LED_OFF(6); //выкл. усилитель мощности и светодиод, вкл ант. усилитель 000207 9896 CBI 0x12,6 ; 0000 039B } ; 0000 039C //#asm("sei")// глобально разрешить прерывания ; 0000 039D //GIMSK=0x80; //разрешить прерывания int1 ; 0000 039E } _0x3F: 000208 9621 ADIW R28,1 000209 90ff POP R15 00020a 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 00020b 93aa ST -Y,R26 putchar0: 00020c 9b5d sbis usr,udre 00020d cffe rjmp putchar0 00020e 81e8 ld r30,y 00020f b9ec out udr,r30 _0x2060001: 000210 9621 ADIW R28,1 000211 9508 RET ; .FEND _putsf: ; .FSTART _putsf 000212 93ba ST -Y,R27 000213 93aa ST -Y,R26 000214 931a ST -Y,R17 _0x2000006: 000215 81e9 LDD R30,Y+1 000216 81fa LDD R31,Y+1+1 000217 9631 ADIW R30,1 000218 83e9 STD Y+1,R30 000219 83fa STD Y+1+1,R31 00021a 9731 SBIW R30,1 00021b 91e4 LPM R30,Z 00021c 2f1e MOV R17,R30 00021d 30e0 CPI R30,0 00021e f019 BREQ _0x2000008 00021f 2fa1 MOV R26,R17 000220 dfea RCALL _putchar 000221 cff3 RJMP _0x2000006 _0x2000008: 000222 e0aa LDI R26,LOW(10) 000223 dfe7 RCALL _putchar 000224 8118 LDD R17,Y+0 000225 9623 ADIW R28,3 000226 9508 RET ; .FEND .CSEG .CSEG .CSEG .CSEG _delay_ms: 000227 9610 adiw r26,0 000228 f039 breq __delay_ms1 __delay_ms0: + 000229 e686 +LDI R24 , LOW ( 0xE66 ) 00022a e09e +LDI R25 , HIGH ( 0xE66 ) +__DELAY_USW_LOOP : 00022b 9701 +SBIW R24 , 1 00022c f7f1 +BRNE __DELAY_USW_LOOP __DELAY_USW 0xE66 00022d 95a8 wdr 00022e 9711 sbiw r26,1 00022f f7c9 brne __delay_ms0 __delay_ms1: 000230 9508 ret __SAVELOCR2: 000231 931a ST -Y,R17 000232 930a ST -Y,R16 000233 9508 RET __LOADLOCR2: 000234 8119 LDD R17,Y+1 000235 8108 LD R16,Y 000236 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: 69 r27: 31 r28: 5 r29: 0 r30: 225 r31: 10 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 : 2 cln : 0 clr : 2 cls : 0 clt : 0 clv : 0 clz : 0 com : 0 cp : 2 cpc : 0 cpi : 8 cpse : 0 dec : 2 des : 0 eor : 1 fmul : 0 fmuls : 0 fmulsu: 0 icall : 0 ijmp : 0 in : 6 inc : 1 ld : 20 ldd : 12 ldi : 161 lds : 0 lpm : 2 lsl : 0 lsr : 0 mov : 9 movw : 2 mul : 0 muls : 0 mulsu : 0 neg : 0 nop : 0 or : 2 ori : 0 out : 104 pop : 1 push : 1 rcall : 56 ret : 10 reti : 2 rjmp : 47 rol : 0 ror : 0 sbc : 0 sbci : 0 sbi : 12 sbic : 7 sbis : 5 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 0x00046e 1106 28 1134 2048 55.4% [.dseg] 0x000060 0x000080 0 0 0 128 0.0% [.eseg] 0x000000 0x000000 0 0 0 128 0.0% Assembly complete, 0 errors, 2 warnings