⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avrsms_com.lst

📁 SMS傳送Sourcode,compiler with C,AT command
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \   00000012   930A               ST      -Y, R16
   \   00000014   B74F               IN      R20, 0x3F
   \   00000016   B75B               IN      R21, 0x3B
    133            unsigned char data;             //Local variable
    134          
    135            data = UDR0;                    //Always read something
   \   00000018   B12C               IN      R18, 0x0C
    136          
    137            rx_buffer[ rx_wr_i++ ] = data;  //Store new data
   \   0000001A   ....               LDI     R30, LOW(??rx_wr_i)
   \   0000001C   ....               LDI     R31, (??rx_wr_i) >> 8
   \   0000001E   8100               LD      R16, Z
   \   00000020   8111               LDD     R17, Z+1
   \   00000022   01F8               MOVW    R31:R30, R17:R16
   \   00000024   ....               SUBI    R30, LOW((-(??rx_buffer) & 0xFFFF))
   \   00000026   ....               SBCI    R31, (-(??rx_buffer) & 0xFFFF) >> 8
   \   00000028   8320               ST      Z, R18
   \   0000002A   ....               LDI     R30, LOW(??rx_wr_i)
   \   0000002C   ....               LDI     R31, (??rx_wr_i) >> 8
   \   0000002E   8100               LD      R16, Z
   \   00000030   8111               LDD     R17, Z+1
   \   00000032   5F0F               SUBI    R16, 255
   \   00000034   4F1F               SBCI    R17, 255
   \   00000036   8300               ST      Z, R16
   \   00000038   8311               STD     Z+1, R17
    138            //rx_buffer[ rx_wr_i ] = '\0';    //Always terminate string!
    139          
    140            if( rx_wr_i > RX_BUFFER_MASK )  //Check for overflow
   \   0000003A   ....               LDI     R30, LOW(??rx_wr_i)
   \   0000003C   ....               LDI     R31, (??rx_wr_i) >> 8
   \   0000003E   8100               LD      R16, Z
   \   00000040   8111               LDD     R17, Z+1
   \   00000042   3F0F               CPI     R16, 255
   \   00000044   E030               LDI     R19, 0
   \   00000046   0713               CPC     R17, R19
   \   00000048   F06C               BRLT    ??USART0_RX_interrupt_0
    141            {
    142              rx_wr_i = 0;                  //Reset write index
   \   0000004A   E000               LDI     R16, 0
   \   0000004C   E010               LDI     R17, 0
   \   0000004E   ....               LDI     R30, LOW(??rx_wr_i)
   \   00000050   ....               LDI     R31, (??rx_wr_i) >> 8
   \   00000052   8300               ST      Z, R16
   \   00000054   8311               STD     Z+1, R17
    143              rx_overflow = 1;              //Set flag high
   \   00000056   E001               LDI     R16, 1
   \   00000058   E010               LDI     R17, 0
   \   0000005A   ....               LDI     R30, LOW(rx_overflow)
   \   0000005C   ....               LDI     R31, (rx_overflow) >> 8
   \   0000005E   8300               ST      Z, R16
   \   00000060   8311               STD     Z+1, R17
    144              UCSR0B &= ~( 1 << RXCIE0 );       // Disable RX interrupt
   \   00000062   9857               CBI     0x0A, 0x07
    145            }
    146          
    147            if( searchFor[rx_i] == data )   //Test response match
   \                     ??USART0_RX_interrupt_0:
   \   00000064   ....               LDI     R26, LOW(searchFor)
   \   00000066   ....               LDI     R27, (searchFor) >> 8
   \   00000068   91ED               LD      R30, X+
   \   0000006A   91FC               LD      R31, X
   \   0000006C   ....               LDI     R26, LOW(??rx_i)
   \   0000006E   ....               LDI     R27, (??rx_i) >> 8
   \   00000070   910D               LD      R16, X+
   \   00000072   911C               LD      R17, X
   \   00000074   0FE0               ADD     R30, R16
   \   00000076   1FF1               ADC     R31, R17
   \   00000078   9104               LPM     R16, Z
   \   0000007A   1702               CP      R16, R18
   \   0000007C   F599               BRNE    ??USART0_RX_interrupt_1
    148            {
    149              rx_i++;
   \   0000007E   ....               LDI     R30, LOW(??rx_i)
   \   00000080   ....               LDI     R31, (??rx_i) >> 8
   \   00000082   8100               LD      R16, Z
   \   00000084   8111               LDD     R17, Z+1
   \   00000086   5F0F               SUBI    R16, 255
   \   00000088   4F1F               SBCI    R17, 255
   \   0000008A   8300               ST      Z, R16
   \   0000008C   8311               STD     Z+1, R17
    150          
    151              if( !searchFor[rx_i] )        //End of new_message string...received new message!
   \   0000008E   ....               LDI     R26, LOW(searchFor)
   \   00000090   ....               LDI     R27, (searchFor) >> 8
   \   00000092   91ED               LD      R30, X+
   \   00000094   91FC               LD      R31, X
   \   00000096   ....               LDI     R26, LOW(??rx_i)
   \   00000098   ....               LDI     R27, (??rx_i) >> 8
   \   0000009A   910D               LD      R16, X+
   \   0000009C   911C               LD      R17, X
   \   0000009E   0FE0               ADD     R30, R16
   \   000000A0   1FF1               ADC     R31, R17
   \   000000A2   9104               LPM     R16, Z
   \   000000A4   2300               TST     R16
   \   000000A6   F521               BRNE    ??USART0_RX_interrupt_2
    152              {
    153                rx_i = 0;
   \   000000A8   E000               LDI     R16, 0
   \   000000AA   E010               LDI     R17, 0
   \   000000AC   ....               LDI     R30, LOW(??rx_i)
   \   000000AE   ....               LDI     R31, (??rx_i) >> 8
   \   000000B0   8300               ST      Z, R16
   \   000000B2   8311               STD     Z+1, R17
    154          
    155                if( searchStr == 1 )  //+CMTI:
   \   000000B4   9100....           LDS     R16, ??searchStr
   \   000000B8   3001               CPI     R16, 1
   \   000000BA   F461               BRNE    ??USART0_RX_interrupt_3
    156                {
    157                  searchFor = searchStrings[3]; //Wait for
   \   000000BC   ....               LDI     R30, LOW(searchStrings)
   \   000000BE   ....               LDI     R31, (searchStrings) >> 8
   \   000000C0   8106               LDD     R16, Z+6
   \   000000C2   8117               LDD     R17, Z+7
   \   000000C4   ....               LDI     R30, LOW(searchFor)
   \   000000C6   ....               LDI     R31, (searchFor) >> 8
   \   000000C8   8300               ST      Z, R16
   \   000000CA   8311               STD     Z+1, R17
    158                  searchStr = 3;
   \   000000CC   E003               LDI     R16, 3
   \   000000CE   9300....           STS     ??searchStr, R16
   \   000000D2   C00E               RJMP    ??USART0_RX_interrupt_2
    159                }
    160          
    161                else  //Normal acknowledgement
    162                {
    163                  rx_ack = 1;                  //Set new message flag
   \                     ??USART0_RX_interrupt_3:
   \   000000D4   E001               LDI     R16, 1
   \   000000D6   E010               LDI     R17, 0
   \   000000D8   ....               LDI     R30, LOW(rx_ack)
   \   000000DA   ....               LDI     R31, (rx_ack) >> 8
   \   000000DC   8300               ST      Z, R16
   \   000000DE   8311               STD     Z+1, R17
    164                  UCSR0B &= ~( 1 << RXCIE0 );     // Disable RX interrupt
   \   000000E0   9857               CBI     0x0A, 0x07
   \   000000E2   C006               RJMP    ??USART0_RX_interrupt_2
    165                }
    166              }
    167             }
    168            else
    169            {
    170              rx_i = 0;                //Not valid search pattern...start again.
   \                     ??USART0_RX_interrupt_1:
   \   000000E4   E000               LDI     R16, 0
   \   000000E6   E010               LDI     R17, 0
   \   000000E8   ....               LDI     R30, LOW(??rx_i)
   \   000000EA   ....               LDI     R31, (??rx_i) >> 8
   \   000000EC   8300               ST      Z, R16
   \   000000EE   8311               STD     Z+1, R17
    171            }
    172          }//end rx-isr
   \                     ??USART0_RX_interrupt_2:
   \   000000F0   BF5B               OUT     0x3B, R21
   \   000000F2   BF4F               OUT     0x3F, R20
   \   000000F4   9109               LD      R16, Y+
   \   000000F6   9119               LD      R17, Y+
   \   000000F8   9129               LD      R18, Y+
   \   000000FA   9139               LD      R19, Y+
   \   000000FC   9149               LD      R20, Y+
   \   000000FE   9159               LD      R21, Y+
   \   00000100   91E9               LD      R30, Y+
   \   00000102   91F9               LD      R31, Y+
   \   00000104   91A9               LD      R26, Y+
   \   00000106   91B9               LD      R27, Y+
   \   00000108   9518               RETI
    173          
    174          
    175          /*! \brief Adapted putchar method...we dont need interrup driven tx-isr.
    176           *
    177           *  Adpation of normal ansi c putchar() method
    178           *
    179           *  \param    input     Character data we wish to send
    180           *
    181           *  \retval             void
    182           *
    183           */

   \                                 In segment CODE, align 2, keep-with-next
    184          int COM_putchar( unsigned char data )
   \                     COM_putchar:
    185          {
    186            static unsigned int i;
    187          
    188            for( i = 0; !( UCSR0A & ( 1 << UDRE0 ) ); i++ )    // Wait for empty transmit buffer
   \   00000000   E020               LDI     R18, 0
   \   00000002   E030               LDI     R19, 0
   \   00000004   ....               LDI     R30, LOW(??i)
   \   00000006   ....               LDI     R31, (??i) >> 8
   \   00000008   8320               ST      Z, R18
   \   0000000A   8331               STD     Z+1, R19
   \   0000000C   C008               RJMP    ??COM_putchar_0
   \                     ??COM_putchar_1:
   \   0000000E   ....               LDI     R30, LOW(??i)
   \   00000010   ....               LDI     R31, (??i) >> 8
   \   00000012   8120               LD      R18, Z
   \   00000014   8131               LDD     R19, Z+1
   \   00000016   5F2F               SUBI    R18, 255
   \   00000018   4F3F               SBCI    R19, 255
   \   0000001A   8320               ST      Z, R18
   \   0000001C   8331               STD     Z+1, R19
   \                     ??COM_putchar_0:
   \   0000001E   995D               SBIC    0x0B, 0x05
   \   00000020   C00B               RJMP    ??COM_putchar_2
    189            {
    190              if( i > RX_WAIT )  //How long one should wait
   \   00000022   ....               LDI     R30, LOW(??i)
   \   00000024   ....               LDI     R31, (??i) >> 8
   \   00000026   8120               LD      R18, Z
   \   00000028   8131               LDD     R19, Z+1
   \   0000002A   3E29               CPI     R18, 233
   \   0000002C   EF1D               LDI     R17, 253
   \   0000002E   0731               CPC     R19, R17
   \   00000030   F370               BRCS    ??COM_putchar_1
    191              {
    192                return -1;  //Give feedback to function caller
   \   00000032   EF0F               LDI     R16, 255
   \   00000034   EF1F               LDI     R17, 255
   \   00000036   9508               RET
    193              }
    194            }
    195          
    196              UDR0 = data;                        // Start transmittion 	
   \                     ??COM_putchar_2:
   \   00000038   B90C               OUT     0x0C, R16
    197          
    198            return (int)data;
   \   0000003A   E010               LDI     R17, 0
   \   0000003C   9508               RET
    199          }//end COM_putchar

   \                                 In segment NEAR_Z, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: NEAR_Z>`
   \                     ??i:
   \   00000000                      DS 2
    200          
    201          
    202          

   \                                 In segment CODE, align 2, keep-with-next
    203          void COM_put_integer( int i )
   \                     COM_put_integer:
    204          {
   \   00000000   ........           CALL    ?PROLOGUE4_L09
   \   00000004   9725               SBIW    R29:R28, 5
   \   00000006   01D8               MOVW    R27:R26, R17:R16
    205          
    206              int ii;
    207              unsigned char int_buf[5];
    208          
    209              if (i < 0)                                              //Integer is negative
   \   00000008   23BB               TST     R27
   \   0000000A   F42A               BRPL    ??COM_put_integer_0
    210              {
    211                  i = -i;                                             //Convert to positive Integer
   \   0000000C   95B1               NEG     R27
   \   0000000E   95A1               NEG     R26
   \   00000010   40B0               SBCI    R27, 0
    212                  COM_putchar('-');                                   //Print - sign
   \   00000012   E20D               LDI     R16, 45
   \   00000014   ....               RCALL   COM_putchar
    213              }
    214          
    215              for (ii=0; ii < 5; )                                      //Convert Integer to char array
   \                     ??COM_put_integer_0:
   \   00000016   E080               LDI     R24, 0
   \   00000018   E090               LDI     R25, 0
   \   0000001A   C011               RJMP    ??COM_put_integer_1
    216              {
    217                  int_buf[ii++] = '0'+ i % 10;                          //Find carry using modulo operation
   \                     ??COM_put_integer_2:
   \   0000001C   018D               MOVW    R17:R16, R27:R26
   \   0000001E   E04A               LDI     R20, 10
   \   00000020   E050               LDI     R21, 0
   \   00000022   ........           CALL    ?SS_DIVMOD_L02
   \   00000026   5D40               SUBI    R20, 208
   \   00000028   01FE               MOVW    R31:R30, R29:R28
   \   0000002A   0FE8               ADD     R30, R24
   \   0000002C   1FF9               ADC     R31, R25
   \   0000002E   8340               ST      Z, R20
   \   00000030   9601               ADIW    R25:R24, 1
    218                  i = i / 10;                                           //Move towards MSB
   \   00000032   018D               MOVW    R17:R16, R27:R26
   \   00000034   E04A               LDI     R20, 10
   \   00000036   E050               LDI     R21, 0
   \   00000038   ........           CALL    ?SS_DIVMOD_L02
   \   0000003C   01D8               MOVW    R27:R26, R17:R16
    219              }
   \                     ??COM_put_integer_1:
   \   0000003E   3085               CPI     R24, 5
   \   00000040   E000               LDI     R16, 0
   \   00000042   0790               CPC     R25, R16
   \   00000044   F35C               BRLT    ??COM_put_integer_2
    220              do{ ii--; }while( (int_buf[ii] == '0') && (ii != 0) );  //Remove leading 0's
   \                     ??COM_put_integer_3:
   \   00000046   9701               SBIW    R25:R24, 1
   \   00000048   01FE               MOVW    R31:R30, R29:R28
   \   0000004A   0FE8               ADD     R30, R24
   \   0000004C   1FF9               ADC     R31, R25
   \   0000004E   8100               LD      R16, Z
   \   00000050   3300               CPI     R16, 48
   \   00000052   F419               BRNE    ??COM_put_integer_4
   \   00000054   2F08               MOV     R16, R24
   \   00000056   2B09               OR      R16, R25
   \   00000058   F7B1               BRNE    ??COM_put_integer_3
    221              do{ COM_putchar( int_buf[ii--] ); }while (ii >= 0);     //Print int->char array convertion
   \                     ??COM_put_integer_4:
   \   0000005A   01FE               MOVW    R31:R30, R29:R28
   \   0000005C   0FE8               ADD     R30, R24
   \   0000005E   1FF9               ADC     R31, R25
   \   00000060   8100               LD      R16, Z
   \   00000062   ....               RCALL   COM_putchar
   \   00000064   9701               SBIW    R25:R24, 1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -