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

📄 avrsms_com.lst

📁 SMS傳送Sourcode,compiler with C,AT command
💻 LST
📖 第 1 页 / 共 3 页
字号:
##############################################################################
#                                                                            #
#                                                      24/Sep/2005  02:15:51 #
# IAR Atmel AVR C/C++ Compiler V4.10A/W32, Evaluation Version                #
# Copyright 1996-2005 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Source file  =  C:\Documents and Settings\vemund\Desktop\AVRGSM\Files\A #
#                    VRSMS_com.c                                             #
#    Command line =  --cpu=m128 -ms -o "C:\Documents and                     #
#                    Settings\vemund\Desktop\AVRGSM\Debug\Obj\" -lCN         #
#                    "C:\Documents and Settings\vemund\Desktop\AVRGSM\Debug\ #
#                    List\" -lA "C:\Documents and                            #
#                    Settings\vemund\Desktop\AVRGSM\Debug\List\" -y          #
#                    --initializers_in_flash -z3 --no_cse --no_inline        #
#                    --no_code_motion --no_cross_call --no_clustering        #
#                    --no_tbaa --debug -DENABLE_BIT_DEFINITIONS -e -I        #
#                    D:\Programs\iar\avr\INC\ -I                             #
#                    D:\Programs\iar\avr\INC\CLIB\ --eeprom_size 4096        #
#                    "C:\Documents and Settings\vemund\Desktop\AVRGSM\Files\ #
#                    AVRSMS_com.c"                                           #
#    List file    =  C:\Documents and Settings\vemund\Desktop\AVRGSM\Debug\L #
#                    ist\AVRSMS_com.lst                                      #
#    Object file  =  C:\Documents and Settings\vemund\Desktop\AVRGSM\Debug\O #
#                    bj\AVRSMS_com.r90                                       #
#                                                                            #
#                                                                            #
##############################################################################

C:\Documents and Settings\vemund\Desktop\AVRGSM\Files\AVRSMS_com.c
      1          /*! \file ********************************************************************
      2          *
      3          * Atmel Corporation
      4          *
      5          * - File              : AVRSMS_com.c
      6          * - Compiler          : IAR EWAAVR 3.20C
      7          *
      8          * - Support mail      : avr@atmel.com
      9          *
     10          * - Supported devices : The example is written for ATmega169
     11          *
     12          *
     13          * - AppNote           : AVR323 - Interfacing Cellphones
     14          *
     15          * - Description       : Example of how to use AVR Butterfly as Mobilephone controller
     16          *
     17          * $Revision: 1.1 $
     18          * $Date: Tuesday, November 08, 2005 12:26:18 UTC $
     19          *****************************************************************************/
     20          //Includes
     21          
     22          #ifdef S_SPLINT_S
     23            #include"splint.h"
     24          #endif
     25          
     26          #include<iom128.h>
     27          #include<inavr.h>
     28          #include"AVRSMS_com.h"
     29          

   \                                 In segment NEAR_Z, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: NEAR_Z>`
     30          int rx_overflow, rx_ack;  //Extern readable variables
   \                     rx_overflow:
   \   00000000                      DS 2

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

   \                                 In segment NEAR_Z, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: NEAR_Z>`
     31          static unsigned char searchStr, rx_buffer[RX_BUFFER_SIZE];
   \                     ??searchStr:
   \   00000000                      DS 1

   \                                 In segment NEAR_Z, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: NEAR_Z>`
   \                     ??rx_buffer:
   \   00000000                      DS 256

   \                                 In segment NEAR_Z, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: NEAR_Z>`
     32          static int rx_i, rx_wr_i;
   \                     ??rx_i:
   \   00000000                      DS 2

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

   \                                 In segment NEAR_F, align 1, keep-with-next
     33          const unsigned char __flash OK[]                      = "OK\r\n";
   \                     OK:
   \   00000000   4B4F0A0D00         DB "OK\015\012"

   \                                 In segment NEAR_F, align 1, keep-with-next
     34          const unsigned char __flash CMTI[]                    = "+CMTI: ";
   \                     CMTI:
   \   00000000   432B544D3A49       DB "+CMTI: "
   \              0020        

   \                                 In segment NEAR_F, align 1, keep-with-next
     35          const unsigned char __flash READY[]                   = "> ";
   \                     READY:
   \   00000000   203E00             DB "> "

   \                                 In segment NEAR_F, align 1, keep-with-next
     36          const unsigned char __flash CR_LF[]                   = "\r\n";
   \                     CR_LF:
   \   00000000   0A0D00             DB "\015\012"

   \                                 In segment NEAR_Z, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: NEAR_Z>`
     37          const unsigned char __flash *searchFor;
   \                     searchFor:
   \   00000000                      DS 2

   \                                 In segment NEAR_I, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: NEAR_I>`
     38          const unsigned char __flash *searchStrings[4] = {OK, CMTI, READY, CR_LF};
   \                     searchStrings:
   \   00000000                      DS 8
   \   00000008                      REQUIRE `?<Initializer for searchStrings>`
     39          
     40          
     41          /*! \brief USART initialization
     42           *
     43           *  \param    input     Desired baudrate...see datasheet
     44           *
     45           *  \retval             void
     46           *
     47           */

   \                                 In segment CODE, align 2, keep-with-next
     48          void COM_init( unsigned int baudrate )
   \                     COM_init:
     49          {
     50              UBRR0H = (unsigned char) (baudrate>>8);             //Setting baudrate
   \   00000000   0198               MOVW    R19:R18, R17:R16
   \   00000002   2F23               MOV     R18, R19
   \   00000004   93200090           STS     144, R18
     51              UBRR0L = (unsigned char) baudrate;                  //Setting baudrate
   \   00000008   B909               OUT     0x09, R16
     52          	
     53              UCSR0B = ( 1 << RXEN0 ) | ( 1 << TXEN0 );       //Enable receiver and transmitter
   \   0000000A   E108               LDI     R16, 24
   \   0000000C   B90A               OUT     0x0A, R16
     54              UCSR0C = ( 1 << USBS0 ) | ( 1 << UCSZ01 ) | ( 1 << UCSZ00 );  //8N1...see Datasheet for more information
   \   0000000E   E00E               LDI     R16, 14
   \   00000010   93000095           STS     149, R16
     55          
     56              COM_rx_reset();                                     //Reset buffers etc.
   \   00000014   ....               RCALL   COM_rx_reset
     57          }//end COM_Init
   \   00000016   9508               RET
     58          
     59          

   \                                 In segment CODE, align 2, keep-with-next
     60          void COM_rx_reset( void )
   \                     COM_rx_reset:
     61          {
     62              UCSR0B &= ~(1<<RXCIE0);       // Disable RX interrupt
   \   00000000   9857               CBI     0x0A, 0x07
     63              rx_i = rx_wr_i = 0;           //Init variables
   \   00000002   E000               LDI     R16, 0
   \   00000004   E010               LDI     R17, 0
   \   00000006   ....               LDI     R30, LOW(??rx_wr_i)
   \   00000008   ....               LDI     R31, (??rx_wr_i) >> 8
   \   0000000A   8300               ST      Z, R16
   \   0000000C   8311               STD     Z+1, R17
   \   0000000E   ....               LDI     R30, LOW(??rx_i)
   \   00000010   ....               LDI     R31, (??rx_i) >> 8
   \   00000012   8300               ST      Z, R16
   \   00000014   8311               STD     Z+1, R17
     64              rx_overflow = rx_ack = 0;     //Zero overflow flag
   \   00000016   E000               LDI     R16, 0
   \   00000018   E010               LDI     R17, 0
   \   0000001A   ....               LDI     R30, LOW(rx_ack)
   \   0000001C   ....               LDI     R31, (rx_ack) >> 8
   \   0000001E   8300               ST      Z, R16
   \   00000020   8311               STD     Z+1, R17
   \   00000022   ....               LDI     R30, LOW(rx_overflow)
   \   00000024   ....               LDI     R31, (rx_overflow) >> 8
   \   00000026   8300               ST      Z, R16
   \   00000028   8311               STD     Z+1, R17
     65              rx_buffer[ rx_wr_i ] = '\0';  //Buffer init.
   \   0000002A   E000               LDI     R16, 0
   \   0000002C   ....               LDI     R30, LOW(??rx_wr_i)
   \   0000002E   ....               LDI     R31, (??rx_wr_i) >> 8
   \   00000030   8120               LD      R18, Z
   \   00000032   8131               LDD     R19, Z+1
   \   00000034   01F9               MOVW    R31:R30, R19:R18
   \   00000036   ....               SUBI    R30, LOW((-(??rx_buffer) & 0xFFFF))
   \   00000038   ....               SBCI    R31, (-(??rx_buffer) & 0xFFFF) >> 8
   \   0000003A   8300               ST      Z, R16
     66          }
   \   0000003C   9508               RET
     67          
     68          

   \                                 In segment CODE, align 2, keep-with-next
     69          void COM_rx_on( void )
   \                     COM_rx_on:
     70          {
     71            UCSR0B |= ( 1 << RXCIE0 );                // Enable RX interrupt
   \   00000000   9A57               SBI     0x0A, 0x07
     72          }
   \   00000002   9508               RET
     73          
     74          

   \                                 In segment CODE, align 2, keep-with-next
     75          void COM_rx_off( void )
   \                     COM_rx_off:
     76          {
     77            UCSR0B &= ~( 1 << RXCIE0 );               // Disable RX interrupt
   \   00000000   9857               CBI     0x0A, 0x07
     78          }
   \   00000002   9508               RET
     79          
     80          

   \                                 In segment CODE, align 2, keep-with-next
     81          void COM_setSearchString( unsigned char Response )
   \                     COM_setSearchString:
     82          {
     83            UCSR0B &= ~( 1 << RXCIE0 );               // Disable RX interrupt
   \   00000000   9857               CBI     0x0A, 0x07
     84            searchFor = searchStrings[Response];  //Set desired search dtring
   \   00000002   2F20               MOV     R18, R16
   \   00000004   E030               LDI     R19, 0
   \   00000006   0F22               LSL     R18
   \   00000008   1F33               ROL     R19
   \   0000000A   01F9               MOVW    R31:R30, R19:R18
   \   0000000C   ....               SUBI    R30, LOW((-(searchStrings) & 0xFFFF))
   \   0000000E   ....               SBCI    R31, (-(searchStrings) & 0xFFFF) >> 8
   \   00000010   8120               LD      R18, Z
   \   00000012   8131               LDD     R19, Z+1
   \   00000014   ....               LDI     R30, LOW(searchFor)
   \   00000016   ....               LDI     R31, (searchFor) >> 8
   \   00000018   8320               ST      Z, R18
   \   0000001A   8331               STD     Z+1, R19
     85            searchStr = Response;                 //Used in rx_isr
   \   0000001C   9300....           STS     ??searchStr, R16
     86            rx_i = 0;
   \   00000020   E000               LDI     R16, 0
   \   00000022   E010               LDI     R17, 0
   \   00000024   ....               LDI     R30, LOW(??rx_i)
   \   00000026   ....               LDI     R31, (??rx_i) >> 8
   \   00000028   8300               ST      Z, R16
   \   0000002A   8311               STD     Z+1, R17
     87          }
   \   0000002C   9508               RET
     88          
     89          
     90                                  // Interrupt handler
     91          
     92          /*! \brief USART Receive interrupt service routine
     93           *
     94           */
     95          /*
     96          #pragma vector=USART0_RXC_vect
     97          __interrupt void USART0_RX_interrupt( void )
     98          {
     99            unsigned char data;             //Local variable
    100          
    101            data = UDR0;                    //Always read something
    102          
    103            rx_buffer[ rx_wr_i++ ] = data;  //Store new data
    104            rx_buffer[ rx_wr_i ] = '\0';    //Always terminate string!
    105          
    106            if( rx_wr_i > RX_BUFFER_MASK )  //Check for overflow
    107            {
    108              rx_wr_i = 0;                  //Reset write index
    109              rx_overflow = 1;              //Set flag high
    110              UCSR0B &= ~( 1 << RXCIE0 );       // Disable RX interrupt
    111            }
    112          
    113            if( searchFor[rx_i] == data )   //Test response match
    114            {
    115              rx_i++;
    116          
    117              if( !searchFor[rx_i] )        //End of new_message string...received new message!
    118              {
    119                rx_i = 0;
    120                rx_ack = 1;                  //Set new message flag
    121                UCSR0B &= ~( 1 << RXCIE0 );     // Disable RX interrupt
    122              }
    123             }
    124            else
    125            {
    126              rx_i = 0;                //Not valid search pattern...start again.
    127            }
    128          }//end rx-isr
    129          */
    130          #pragma vector=USART0_RXC_vect

   \                                 In segment CODE, align 2, keep-with-next
    131          __interrupt void USART0_RX_interrupt( void )
   \                     USART0_RX_interrupt:
    132          {
   \   00000000   93BA               ST      -Y, R27
   \   00000002   93AA               ST      -Y, R26
   \   00000004   93FA               ST      -Y, R31
   \   00000006   93EA               ST      -Y, R30
   \   00000008   935A               ST      -Y, R21
   \   0000000A   934A               ST      -Y, R20
   \   0000000C   933A               ST      -Y, R19
   \   0000000E   932A               ST      -Y, R18
   \   00000010   931A               ST      -Y, R17

⌨️ 快捷键说明

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