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

📄 atmega103.lst

📁 里面给出了ATmega103单片机编程的C语言实例程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
                         .area bss
--- 0000                   .dbfile C:\Documents\Software\AVR\ATmega103\code\buttons.c
--- 0000                 _LastButton:
--- 0000                   .blkb 2
--- 0001                   .dbfile c:/documents/software/avr/atmega103/include/button.h
--- 0001                   .dbsym s LastButton _LastButton I
--- 0001                 _PushedButton:
--- 0001                   .blkb 2
--- 0002                   .dbsym s PushedButton _PushedButton I
--- 0002                 _Buffer:
--- 0002                   .blkb 2
--- 0003                   .dbsym s Buffer _Buffer i
                         .module crc.c
                         .text
--- 0000                   .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
                         .area text
--- 0000                   .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
--- 0000                   .dbfunc s CRCInitialise _CRCInitialise fI
                         .even
 0C11                  _CRCInitialise::
 0C11                    .dbline 20{
                       ; /* ATmega103 crc.c file 
                       ; 
                       ;    Author : Robert Stuart 
                       ;    Company : PDL Industries Ltd
                       ;    Date of Creation : 2 November 1999
                       ;    Tested : not yet
                       ;  
                       ;    Function : 
                       ;     Performs a 16-bit CRC check on the program memory. Memory locations from 
                       ;     START_PROGRAM_MEMORY_ADDRESS (0x0000) to END_PROGRAM_MEMORY_ADDRESS - 1 (0xE777) 
                       ;     are applied to the CRC calculation. At addresses END_PROGRAM_MEMORY_ADDRESS and
                       ;     END_PROGRAM_MEMORY_ADDRESS + 1 are 16-bit CRC value, therefore once subtracked 
                       ;     should give zero. Any non-zero answer applies a memory program fault.
                       ; */
                       ; 
                       ; /* include */
                       ; #include "crc.h"
                       ; 
                       ; void CRCInitialise( void )
                       ; {
 0C11                    .dbline 21
                       ;   CRC16 = 0;
 0C11  2422              clr R2
 0C12  2433              clr R3
 0C13  92300155          sts _CRC16+1,R3
 0C15  92200154          sts _CRC16,R2
 0C17                    .dbline 22
                       ;   ProgramMemory = START_PROGRAM_MEMORY_ADDRESS;     
 0C17  2422              clr R2
 0C18  2433              clr R3
 0C19  9230014C          sts _ProgramMemory+1,R3
 0C1B  9220014B          sts _ProgramMemory,R2
 0C1D                    .dbline 24}
                       ;                 /* starting address */
                       ; }
 0C1D                  L1:
 0C1D  9508              ret
                         .area bss
--- 0000                   .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
--- 0000                 L3:
--- 0000                   .blkb 1
--- 0000                 L4:
--- 0000                   .blkb 2
                         .area text
--- 000D                   .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
--- 000D                   .dbfunc s CheckCRC _CheckCRC fI
--- 000D                   .dbsym s c L4 i
--- 000D                   .dbsym s i L3 c
                       ;            ptr -> R16,R17
                         .even
 0C1E                  _CheckCRC::
 0C1E                    .dbline 27{
                       ; 
                       ; void CheckCRC( void )
                       ; {
 0C1E                    .dbline 32
                       ;   static unsigned char i;
                       ;   const unsigned char *ptr;
                       ;   static unsigned int c;
                       ;   
                       ;   if ( ProgramMemory < END_PROGRAM_MEMORY_ADDRESS )
 0C1E  9190014C          lds R25,_ProgramMemory+1
 0C20  9180014B          lds R24,_ProgramMemory
 0C22  3F8D              cpi R24,253
 0C23  EF8F              ldi R24,255
 0C24  0798              cpc R25,R24
 0C25  F010              brlo X0
 0C26  940C0C97          jmp L5
 0C28                  X0:
 0C28                    .dbline 33
                       ;   {
 0C28                    .dbline 34
                       ;     if ( !CRC16 )           /* reset counter at the start */
 0C28  90300155          lds R3,_CRC16+1
 0C2A  90200154          lds R2,_CRC16
 0C2C  2022              tst R2
 0C2D  F429              brne L7
 0C2E  2033              tst R3
 0C2F  F419              brne L7
 0C30                    .dbline 35
                       ;       i = 0;
 0C30  2422              clr R2
 0C31  92200148          sts L3,R2
 0C33                  L7:
 0C33                    .dbline 37
                       ;       
                       ;     if ( !i )
 0C33  90200148          lds R2,L3
 0C35  2022              tst R2
 0C36  F4E1              brne L9
 0C37                    .dbline 38
                       ;     {
 0C37                    .dbline 39
                       ;       ptr = ( unsigned char * ) ProgramMemory++;
 0C37  9030014C          lds R3,_ProgramMemory+1
 0C39  9020014B          lds R2,_ProgramMemory
 0C3B  2D82              mov R24,R2
 0C3C  2D93              mov R25,R3
 0C3D  9601              adiw R24,1
 0C3E  9390014C          sts _ProgramMemory+1,R25
 0C40  9380014B          sts _ProgramMemory,R24
 0C42  2D02              mov R16,R2
 0C43  2D13              mov R17,R3
 0C44                    .dbline 41
                       ;                     /* read 8-bits from the program memory */
                       ;       c = *ptr;
 0C44  2FE0              mov R30,R16
 0C45  2FF1              mov R31,R17
 0C46  95C8              lpm
 0C47  2C20              mov R2,R0
 0C48  2433              clr R3
 0C49  9230014A          sts L4+1,R3
 0C4B  92200149          sts L4,R2
 0C4D                    .dbline 42
                       ;       c <<= 8;          /* convert to 16-bit */
 0C4D  2C32              mov R3,R2
 0C4E  2422              clr R2
 0C4F  9230014A          sts L4+1,R3
 0C51  92200149          sts L4,R2
 0C53                    .dbline 43
                       ;     }
 0C53                  L9:
 0C53                    .dbline 45
                       ;     
                       ;     if ( ( CRC16 ^ c ) & CRC_DIVISOR )  /* adjust crc */
 0C53  9030014A          lds R3,L4+1
 0C55  90200149          lds R2,L4
 0C57  91900155          lds R25,_CRC16+1
 0C59  91800154          lds R24,_CRC16
 0C5B  2582              eor R24,R2
 0C5C  2593              eor R25,R3
 0C5D  7080              andi R24,0
 0C5E  7890              andi R25,128
 0C5F  2388              tst R24
 0C60  F411              brne X1
 0C61  2399              tst R25
 0C62  F081              breq L11
 0C63                  X1:
 0C63                    .dbline 46
                       ;       CRC16 = (CRC16 << 1) ^ CRC_16_MASK; 
 0C63  E081              ldi R24,1
 0C64  EA90              ldi R25,160
 0C65  90300155          lds R3,_CRC16+1
 0C67  90200154          lds R2,_CRC16
 0C69  0C22              lsl R2
 0C6A  1C33              rol R3
 0C6B  2628              eor R2,R24
 0C6C  2639              eor R3,R25
 0C6D  92300155          sts _CRC16+1,R3
 0C6F  92200154          sts _CRC16,R2
 0C71  940C0C7D          jmp L12
 0C73                  L11:
 0C73                    .dbline 48
                       ;     else
                       ;       CRC16 <<= 1;
 0C73  90300155          lds R3,_CRC16+1
 0C75  90200154          lds R2,_CRC16
 0C77  0C22              lsl R2
 0C78  1C33              rol R3
 0C79  92300155          sts _CRC16+1,R3
 0C7B  92200154          sts _CRC16,R2
 0C7D                  L12:
 0C7D                    .dbline 49
                       ;       c <<= 1;
 0C7D  9030014A          lds R3,L4+1
 0C7F  90200149          lds R2,L4
 0C81  0C22              lsl R2
 0C82  1C33              rol R3
 0C83  9230014A          sts L4+1,R3
 0C85  92200149          sts L4,R2
 0C87                    .dbline 51
                       ;       
                       ;     if ( ++i > 7 )
 0C87  91800148          lds R24,L3
 0C89  5F8F              subi R24,255    ; addi 1
 0C8A  2E28              mov R2,R24
 0C8B  92200148          sts L3,R2
 0C8D  E087              ldi R24,7
 0C8E  1582              cp R24,R2
 0C8F  F010              brlo X2
 0C90  940C0CE1          jmp L6
 0C92                  X2:
 0C92                    .dbline 52
                       ;       i = 0;
 0C92  2422              clr R2
 0C93  92200148          sts L3,R2
 0C95                    .dbline 53
                       ;   }
 0C95  940C0CE1          jmp L6
 0C97                  L5:
 0C97                    .dbline 54
                       ;   else if ( ProgramMemory == END_PROGRAM_MEMORY_ADDRESS )
 0C97  9190014C          lds R25,_ProgramMemory+1
 0C99  9180014B          lds R24,_ProgramMemory
 0C9B  3F8D              cpi R24,253
 0C9C  EFAF              ldi R26,255
 0C9D  079A              cpc R25,R26
 0C9E  F011              breq X3
 0C9F  940C0CE1          jmp L15
 0CA1                  X3:
 0CA1                    .dbline 55
                       ;   {
 0CA1                    .dbline 59
                       ;     /* read the last two memory locations are subtack in 16-bit from CRC value, if zero 
                       ;        then CRC is correct
                       ;     */
                       ;     ptr = ( unsigned char * ) ProgramMemory++;
 0CA1  2E28              mov R2,R24
 0CA2  2E39              mov R3,R25
 0CA3  9601              adiw R24,1
 0CA4  9390014C          sts _ProgramMemory+1,R25
 0CA6  9380014B          sts _ProgramMemory,R24
 0CA8  2D02              mov R16,R2
 0CA9  2D13              mov R17,R3
 0CAA                    .dbline 60
                       ;     CRC16 -= *ptr;
 0CAA  2FE0              mov R30,R16
 0CAB  2FF1              mov R31,R17
 0CAC  95C8              lpm
 0CAD  2C20              mov R2,R0
 0CAE  2433              clr R3
 0CAF  90500155          lds R5,_CRC16+1
 0CB1  90400154          lds R4,_CRC16
 0CB3  1842              sub R4,R2
 0CB4  0853              sbc R5,R3
 0CB5  92500155          sts _CRC16+1,R5
 0CB7  92400154          sts _CRC16,R4
 0CB9                    .dbline 61
                       ;     ptr = ( unsigned char * ) ProgramMemory++;
 0CB9  2E28              mov R2,R24
 0CBA  2E39              mov R3,R25
 0CBB  9601              adiw R24,1
 0CBC  9390014C          sts _ProgramMemory+1,R25
 0CBE  9380014B          sts _ProgramMemory,R24
 0CC0  2D02              mov R16,R2
 0CC1  2D13              mov R17,R3
 0CC2                    .dbline 62
                       ;     CRC16 -= (*ptr) << 8;
 0CC2  2FE0              mov R30,R16
 0CC3  2FF1              mov R31,R17
 0CC4  95C8              lpm
 0CC5  2C20              mov R2,R0
 0CC6  2433              clr R3
 0CC7  2C32              mov R3,R2
 0CC8  2422              clr R2
 0CC9  1842              sub R4,R2
 0CCA  0853              sbc R5,R3
 0CCB  92500155          sts _CRC16+1,R5
 0CCD  92400154          sts _CRC16,R4
 0CCF                    .dbline 64
                       ;     
                       ;     if ( CRC16 )
 0CCF  2C24              mov R2,R4
 0CD0  2C35              mov R3,R5
 0CD1  2022              tst R2
 0CD2  F411              brne X4
 0CD3  2033              tst R3
 0CD4  F039              breq L17
 0CD5                  X4:
 0CD5                    .dbline 65
                       ;       SETBIT( SystemStatus, BIT(FAULT_CRC_CHECK) );/* flag crc fault therefore program could have been corrupted */       
 0CD5  91800159          lds R24,_SystemStatus
 0CD7  6082              ori R24,2
 0CD8  93800159          sts _SystemStatus,R24
 0CDA  940C0CE1          jmp L18
 0CDC                  L17:
 0CDC                    .dbline 67
                       ;     else
                       ;       CLEARBIT( SystemStatus, BIT(FAULT_CRC_CHECK) );
 0CDC  91800159          lds R24,_SystemStatus
 0CDE  7F8D              andi R24,253
 0CDF  93800159          sts _SystemStatus,R24
 0CE1                  L18:
 0CE1                    .dbline 68
                       ;   }
 0CE1                  L15:
 0CE1                  L6:
 0CE1                    .dbline 69}
                       ; }
 0CE1                  L2:
 0CE1  9508              ret
 0CE2                    .dbsym r ptr 16 pc
                         .area bss
--- 0001                   .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c

⌨️ 快捷键说明

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