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

📄 avrsms_com.s90

📁 SMS傳送Sourcode,compiler with C,AT command
💻 S90
📖 第 1 页 / 共 3 页
字号:
        RSEG CODE:CODE:NOROOT(1)
//  203 void COM_put_integer( int i )
COM_put_integer:
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function COM_put_integer
//  204 {
        FUNCALL COM_put_integer, COM_putchar
        LOCFRAME CSTACK, 9, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL COM_put_integer, COM_putchar
        LOCFRAME CSTACK, 9, STACK
        LOCFRAME RSTACK, 2, STACK
        CALL	?PROLOGUE4_L09
        CFI R27 Frame(CFA_Y, -1)
        CFI R26 Frame(CFA_Y, -2)
        CFI R25 Frame(CFA_Y, -3)
        CFI R24 Frame(CFA_Y, -4)
        CFI CFA_Y Y+4
        SBIW	R29:R28, 5
        CFI CFA_Y Y+9
        MOVW	R27:R26, R17:R16
//  205 
//  206     int ii;
//  207     unsigned char int_buf[5];
//  208 
//  209     if (i < 0)                                              //Integer is negative
        TST	R27
        BRPL	??COM_put_integer_0
//  210     {
//  211         i = -i;                                             //Convert to positive Integer
        NEG	R27
        NEG	R26
        SBCI	R27, 0
//  212         COM_putchar('-');                                   //Print - sign
        LDI	R16, 45
        RCALL	COM_putchar
//  213     }
//  214 
//  215     for (ii=0; ii < 5; )                                      //Convert Integer to char array
??COM_put_integer_0:
        LDI	R24, 0
        LDI	R25, 0
        RJMP	??COM_put_integer_1
//  216     {
//  217         int_buf[ii++] = '0'+ i % 10;                          //Find carry using modulo operation
??COM_put_integer_2:
        MOVW	R17:R16, R27:R26
        LDI	R20, 10
        LDI	R21, 0
        CALL	?SS_DIVMOD_L02
        SUBI	R20, 208
        MOVW	R31:R30, R29:R28
        ADD	R30, R24
        ADC	R31, R25
        ST	Z, R20
        ADIW	R25:R24, 1
//  218         i = i / 10;                                           //Move towards MSB
        MOVW	R17:R16, R27:R26
        LDI	R20, 10
        LDI	R21, 0
        CALL	?SS_DIVMOD_L02
        MOVW	R27:R26, R17:R16
//  219     }
??COM_put_integer_1:
        CPI	R24, 5
        LDI	R16, 0
        CPC	R25, R16
        BRLT	??COM_put_integer_2
//  220     do{ ii--; }while( (int_buf[ii] == '0') && (ii != 0) );  //Remove leading 0's
??COM_put_integer_3:
        SBIW	R25:R24, 1
        MOVW	R31:R30, R29:R28
        ADD	R30, R24
        ADC	R31, R25
        LD	R16, Z
        CPI	R16, 48
        BRNE	??COM_put_integer_4
        MOV	R16, R24
        OR	R16, R25
        BRNE	??COM_put_integer_3
//  221     do{ COM_putchar( int_buf[ii--] ); }while (ii >= 0);     //Print int->char array convertion
??COM_put_integer_4:
        MOVW	R31:R30, R29:R28
        ADD	R30, R24
        ADC	R31, R25
        LD	R16, Z
        RCALL	COM_putchar
        SBIW	R25:R24, 1
        TST	R25
        BRPL	??COM_put_integer_4
//  222 
//  223 }
        ADIW	R29:R28, 5
        CFI CFA_Y Y+4
        LDI	R30, 4
        JMP	?EPILOGUE_B4_L09
        CFI EndBlock cfiBlock7
//  224 
//  225 

        RSEG CODE:CODE:NOROOT(1)
//  226 void COM_puts(unsigned char *str)
COM_puts:
        CFI Block cfiBlock8 Using cfiCommon0
        CFI Function COM_puts
//  227 {
        FUNCALL COM_puts, COM_putchar
        LOCFRAME CSTACK, 2, STACK
        LOCFRAME RSTACK, 2, STACK
        ST	-Y, R27
        CFI R27 Frame(CFA_Y, -1)
        CFI CFA_Y Y+1
        ST	-Y, R26
        CFI R26 Frame(CFA_Y, -2)
        CFI CFA_Y Y+2
        MOVW	R27:R26, R17:R16
        RJMP	??COM_puts_0
//  228   for( ;*str != '\0'; )
//  229   {
//  230     COM_putchar( *str++ );
??COM_puts_1:
        LD	R16, X
        RCALL	COM_putchar
        ADIW	R27:R26, 1
//  231   }
??COM_puts_0:
        LD	R16, X
        TST	R16
        BRNE	??COM_puts_1
//  232 }
        LD	R26, Y+
        CFI R26 SameValue
        CFI CFA_Y Y+1
        LD	R27, Y+
        CFI R27 SameValue
        CFI CFA_Y Y+0
        RET
        CFI EndBlock cfiBlock8
//  233 
//  234 

        RSEG CODE:CODE:NOROOT(1)
//  235 void COM_putsf( const unsigned char __flash *fstr )
COM_putsf:
        CFI Block cfiBlock9 Using cfiCommon0
        CFI Function COM_putsf
//  236 {
        FUNCALL COM_putsf, COM_putchar
        LOCFRAME CSTACK, 2, STACK
        LOCFRAME RSTACK, 2, STACK
        ST	-Y, R25
        CFI R25 Frame(CFA_Y, -1)
        CFI CFA_Y Y+1
        ST	-Y, R24
        CFI R24 Frame(CFA_Y, -2)
        CFI CFA_Y Y+2
        MOVW	R25:R24, R17:R16
        RJMP	??COM_putsf_0
//  237   for( ;*fstr != '\0'; )
//  238   {
//  239     COM_putchar( *fstr++ );
??COM_putsf_1:
        MOVW	R31:R30, R25:R24
        LPM	R16, Z
        RCALL	COM_putchar
        ADIW	R25:R24, 1
//  240   }
??COM_putsf_0:
        MOVW	R31:R30, R25:R24
        LPM	R16, Z
        TST	R16
        BRNE	??COM_putsf_1
//  241 }
        LD	R24, Y+
        CFI R24 SameValue
        CFI CFA_Y Y+1
        LD	R25, Y+
        CFI R25 SameValue
        CFI CFA_Y Y+0
        RET
        CFI EndBlock cfiBlock9
//  242 
//  243 
//  244 /*! \brief Remove trailing O, K, \r and \n
//  245  *
//  246  *  Trim
//  247  *
//  248  *  \param    input     void
//  249  *
//  250  *  \retval             void
//  251  *
//  252  */

        RSEG CODE:CODE:NOROOT(1)
//  253 int COM_trim( void )
COM_trim:
        CFI Block cfiBlock10 Using cfiCommon0
        CFI Function COM_trim
//  254 {
        MOVW	R19:R18, R25:R24
//  255   int i;                                                                    //Help variables
//  256   unsigned char temp;                                                       //Help variables
//  257 
//  258   for( i = rx_wr_i - 1; i >= 0; i--)                                    //Run through COM_in[] backwards
        LDI	R30, LOW(??rx_wr_i)
        LDI	R31, (??rx_wr_i) >> 8
        LD	R24, Z
        LDD	R25, Z+1
        SBIW	R25:R24, 1
        RJMP	??COM_trim_0
??COM_trim_1:
        SBIW	R25:R24, 1
??COM_trim_0:
        TST	R25
        BRMI	??COM_trim_2
//  259   {
//  260     temp = rx_buffer[i];    //*s into temp
        MOVW	R31:R30, R25:R24
        SUBI	R30, LOW((-(??rx_buffer) & 0xFFFF))
        SBCI	R31, (-(??rx_buffer) & 0xFFFF) >> 8
        LD	R16, Z
//  261     if( temp != '\r' && temp != '\n' && temp != 'O' && temp != 'K' )
        CPI	R16, 13
        BREQ	??COM_trim_1
        CPI	R16, 10
        BREQ	??COM_trim_1
        CPI	R16, 79
        BREQ	??COM_trim_1
        CPI	R16, 75
        BREQ	??COM_trim_1
//  262     {
//  263       break;  //Check
//  264     }
//  265   }
//  266 
//  267   rx_buffer[i+1] = '\0';                                                       //Terminate trimmed string
??COM_trim_2:
        LDI	R16, 0
        MOVW	R31:R30, R25:R24
        SUBI	R30, LOW((-(??rx_buffer) & 0xFFFF))
        SBCI	R31, (-(??rx_buffer) & 0xFFFF) >> 8
        STD	Z+1, R16
//  268 
//  269   return i;                                                                 //Return new length
        MOVW	R17:R16, R25:R24
        MOVW	R25:R24, R19:R18
        RET
        CFI EndBlock cfiBlock10
//  270 }//end trim
//  271 
//  272 

        RSEG CODE:CODE:NOROOT(1)
//  273 unsigned char* COM_gets( void )
COM_gets:
        CFI Block cfiBlock11 Using cfiCommon0
        CFI Function COM_gets
//  274 {
//  275   return rx_buffer;
        LDI	R16, LOW(??rx_buffer)
        LDI	R17, (??rx_buffer) >> 8
        RET
        CFI EndBlock cfiBlock11
//  276 }

        COMMON INTVEC:CODE:ROOT(1)
        ORG 72
`??INTVEC 72`:
        JMP	USART0_RX_interrupt

        RSEG INITTAB:CODE:NOROOT(0)
`?<Segment init: NEAR_Z>`:
        DW	SFE(NEAR_Z) - SFB(NEAR_Z)
        DW	SFB(NEAR_Z)
        DP	0
        REQUIRE ?need_segment_init

        RSEG NEAR_ID:CODE:NOROOT(0)
`?<Initializer for searchStrings>`:
        DW OK, CMTI, READY, CR_LF

        RSEG INITTAB:CODE:NOROOT(0)
`?<Segment init: NEAR_I>`:
        DW	SFE(NEAR_I) - SFB(NEAR_I)
        DW	SFB(NEAR_I)
        DP	SFB(NEAR_ID)
        REQUIRE ?need_segment_init

        ASEGN ABSOLUTE:DATA:NOROOT,029H
// union <unnamed> volatile __io _A_UBRR0L
_A_UBRR0L:
        DS 1

        ASEGN ABSOLUTE:DATA:NOROOT,02aH
// union <unnamed> volatile __io _A_UCSR0B
_A_UCSR0B:
        DS 1

        ASEGN ABSOLUTE:DATA:NOROOT,02bH
// union <unnamed> volatile __io _A_UCSR0A
_A_UCSR0A:
        DS 1

        ASEGN ABSOLUTE:DATA:NOROOT,02cH
// union <unnamed> volatile __io _A_UDR0
_A_UDR0:
        DS 1

        ASEGN ABSOLUTE:DATA:NOROOT,090H
// union <unnamed> volatile __io _A_UBRR0H
_A_UBRR0H:
        DS 1

        ASEGN ABSOLUTE:DATA:NOROOT,095H
// union <unnamed> volatile __io _A_UCSR0C
_A_UCSR0C:
        DS 1

        ASEGN ABSOLUTE:DATA:NOROOT,01cH
__?EECR:

        ASEGN ABSOLUTE:DATA:NOROOT,01dH
__?EEDR:

        ASEGN ABSOLUTE:DATA:NOROOT,01eH
__?EEARL:

        ASEGN ABSOLUTE:DATA:NOROOT,01fH
__?EEARH:

        END
//  277 
//  278 /*
//  279 void COM_getParams( unsigned char **pParams )
//  280 {
//  281     unsigned char c, nState, i, p;
//  282 
//  283     // nState values:
//  284     //0 - Looking for start of param
//  285     //1 - Looking for end of param
//  286     //2 - Complete
//  287     //
//  288 
//  289     // Init param vector
//  290     for (i=0; i<8; i++)
//  291         pParams[i] = 0;
//  292 
//  293 
//  294     nState = 0; // Looking for first terminator
//  295     p = 0;
//  296     for (i=0; nState != 2; i++)
//  297     {
//  298         c = *( rx_buffer + i );
//  299 
//  300         switch (nState)
//  301         {
//  302         case 0:
//  303             // Looking for start of param
//  304             if ( ( c >= 33 ) && ( c <= 126 ) )
//  305             {
//  306                 pParams[p++] = rx_buffer + i;
//  307                 nState = 1;
//  308             }
//  309             else if (c == '\0')
//  310             {
//  311                 nState = 2;
//  312             }
//  313 
//  314             break;
//  315 
//  316         case 1:
//  317             // Looking for terminator
//  318             if ( c == '\0' || c == ' ' || c == ',' || c == '\r' || c == '\n'  || c == '\n' )
//  319             {
//  320                 *( rx_buffer + i ) = '\0';
//  321                 if (c == '\0')
//  322                     nState = 2;
//  323                 else
//  324                     nState = 0;
//  325             }
//  326             break;
//  327         }
//  328     }
//  329 }
//  330 */
// 
//   6 bytes in segment ABSOLUTE
// 704 bytes in segment CODE
//  14 bytes in segment INITTAB
//   4 bytes in segment INTVEC
//  19 bytes in segment NEAR_F
//   8 bytes in segment NEAR_I
//   8 bytes in segment NEAR_ID
// 269 bytes in segment NEAR_Z
// 
// 731 bytes of CODE memory (+ 18 bytes shared)
// 277 bytes of DATA memory (+  6 bytes shared)
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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