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

📄 atmega103.lst

📁 里面给出了ATmega103单片机编程的C语言实例程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
                       ;   sprintf( LCDStr1, "%s", LCDHeader1 ); /* initialise lcd lines */
 0D94  903000B0          lds R3,_LCDHeader1+1
 0D96  902000AF          lds R2,_LCDHeader1
 0D98  8228              std y+0,R2
 0D99  8239              std y+1,R3
 0D9A  E121              ldi R18,<L17
 0D9B  E031              ldi R19,>L17
 0D9C  E900              ldi R16,<_LCDStr1
 0D9D  E011              ldi R17,>_LCDStr1
 0D9E  940E0769          call _sprintf
 0DA0                    .dbline 69
                       ;   sprintf( LCDStr2, "%s", LCDHeader2 );
 0DA0  903000B2          lds R3,_LCDHeader2+1
 0DA2  902000B1          lds R2,_LCDHeader2
 0DA4  8228              std y+0,R2
 0DA5  8239              std y+1,R3
 0DA6  E121              ldi R18,<L17
 0DA7  E031              ldi R19,>L17
 0DA8  E70F              ldi R16,<_LCDStr2
 0DA9  E011              ldi R17,>_LCDStr2
 0DAA  940E0769          call _sprintf
 0DAC                    .dbline 70
                       ;   LCDLine = LINE1_AND_LINE2;                /* both lines to be updated */                       
 0DAC  E083              ldi R24,3
 0DAD  938001A1          sts _LCDLine,R24
 0DAF                    .dbline 71
                       ;   LCDCounter--;
 0DAF  918001A2          lds R24,_LCDCounter
 0DB1  5081              subi R24,1
 0DB2  938001A2          sts _LCDCounter,R24
 0DB4                    .dbline 72
                       ;   SETBIT( LCDStatus, LCD_UPDATE );
 0DB4  91800157          lds R24,_LCDStatus
 0DB6  6082              ori R24,2
 0DB7  93800157          sts _LCDStatus,R24
 0DB9                    .dbline 73}
                       ; }
 0DB9                  L16:
 0DB9  9622              adiw R28,2
 0DBA  9508              ret
 0DBB                    .dbfunc s RefreshLCD _RefreshLCD fI
                         .even
 0DBB                  _RefreshLCD::
 0DBB                    .dbline 77{
                       ; 
                       ; /* continously called when not serving interrupts and the micro is doing nothing */
                       ; void RefreshLCD( void )
                       ; {
 0DBB                    .dbline 78
                       ;   if ( CHECKBIT( LCDStatus, LCD_OK ) )  
 0DBB  90200157          lds R2,_LCDStatus
 0DBD  FE20              sbrs R2,0
 0DBE  C006              rjmp L19
 0DBF                    .dbline 79
                       ;   { 
 0DBF                    .dbline 80
                       ;     if ( CHECKBIT( LCDStatus, LCD_UPDATE ) )
 0DBF  FE21              sbrs R2,1
 0DC0  C00A              rjmp L20
 0DC1                    .dbline 81
                       ;       WriteToScreen();
 0DC1  940E0DF5          call _WriteToScreen
 0DC3                    .dbline 82
                       ;   }
 0DC3  940C0DCB          jmp L20
 0DC5                  L19:
 0DC5                    .dbline 83
                       ;   else if ( LCDCounter == _20MS )
 0DC5  918001A2          lds R24,_LCDCounter
 0DC7  3184              cpi R24,20
 0DC8  F411              brne L23
 0DC9                    .dbline 84
                       ;     ConfigureLCD();                 /* configure lcd to 2 lines, 8bit interface */
 0DC9  940E0DCC          call _ConfigureLCD
 0DCB                  L23:
 0DCB                  L20:
 0DCB                    .dbline 85}
                       ; }
 0DCB                  L18:
 0DCB  9508              ret
                         .area lit
--- 0000                 L26:
--- 0000 380C              .byte 56,12
--- 0001 01                .byte 1
                         .area text
--- 00AE                   .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
--- 00AE                   .dbfunc s ConfigureLCD _ConfigureLCD fI
--- 00AE                   .dbsym s InitialiseTable L26 Ac[3:3]
                       ;          Index -> R20
                         .even
 0DCC                  _ConfigureLCD::
 0DCC  940E0711          call push_gset1
 0DCE                    .dbline 89{
                       ; 
                       ; /* sets the lcd to 2-line 16-character mode with 8-bit interface and auto incrementation */
                       ; void ConfigureLCD( void )
                       ; {
 0DCE                    .dbline 93
                       ;   static const unsigned char InitialiseTable[] = {FUNCTION_SET, DISPLAY_ON, DISPLAY_CLEAR};
                       ;   unsigned char Index;
                       ;   
                       ;   for ( Index=0; Index<3; Index++ )
 0DCE  2744              clr R20
 0DCF  940C0DE3          jmp L30
 0DD1                  L27:
 0DD1                    .dbline 94
 0DD1                    .dbline 95
 0DD1  940E0EB0          call _CheckIfBusy
 0DD3                    .dbline 96
 0DD3  2722              clr R18
 0DD4  2733              clr R19
 0DD5  E785              ldi R24,<L26
 0DD6  E091              ldi R25,>L26
 0DD7  2E24              mov R2,R20
 0DD8  2433              clr R3
 0DD9  0E28              add R2,R24
 0DDA  1E39              adc R3,R25
 0DDB  2DE2              mov R30,R2
 0DDC  2DF3              mov R31,R3
 0DDD  95C8              lpm
 0DDE  2D00              mov R16,R0
 0DDF  2711              clr R17
 0DE0  940E0EA0          call _WriteToDevice
 0DE2                    .dbline 97
 0DE2                  L28:
 0DE2                    .dbline 93
 0DE2  5F4F              subi R20,255    ; addi 1
 0DE3                  L30:
 0DE3                    .dbline 93
 0DE3  3043              cpi R20,3
 0DE4  F360              brlo L27
 0DE5                    .dbline 99
                       ;   {
                       ;     CheckIfBusy();
                       ;     WriteToDevice( InitialiseTable[Index], INSTRUCTION );   
                       ;   }
                       ;   
                       ;   LCDCounter--;
 0DE5  918001A2          lds R24,_LCDCounter
 0DE7  5081              subi R24,1
 0DE8  938001A2          sts _LCDCounter,R24
 0DEA                    .dbline 100
                       ;   SETBIT( LCDStatus, LCD_OK );
 0DEA  91800157          lds R24,_LCDStatus
 0DEC  6081              ori R24,1
 0DED  93800157          sts _LCDStatus,R24
 0DEF                    .dbline 101
                       ;   SETBIT( LCDStatus, LCD_INITIALISE );
 0DEF  6088              ori R24,8
 0DF0  93800157          sts _LCDStatus,R24
 0DF2                    .dbline 102}
                       ; }
 0DF2                  L25:
 0DF2  940E0714          call pop_gset1
 0DF4  9508              ret
 0DF5                    .dbsym r Index 20 c
                         .area bss
--- 0000                   .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
--- 0000                 L32:
--- 0000                   .blkb 1
                         .area text
--- 00D7                   .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
--- 00D7                   .dbfunc s WriteToScreen _WriteToScreen fI
--- 00D7                   .dbsym s Index L32 c
                         .even
 0DF5                  _WriteToScreen::
 0DF5                    .dbline 105{
                       ; 
                       ; void WriteToScreen( void )
                       ; {
 0DF5                    .dbline 108
                       ;   static unsigned char Index;
                       ;   
                       ;   if ( !CHECKBIT( LCDStatus, LCD_BUSY ) )           
 0DF5  90200157          lds R2,_LCDStatus
 0DF7  FC22              sbrc R2,2
 0DF8  C046              rjmp L33
 0DF9                    .dbline 109
                       ;   {
 0DF9                    .dbline 110
                       ;     if ( LCDLine == LINE2 )             /* set which line is to be updated */
 0DF9  918001A1          lds R24,_LCDLine
 0DFB  3082              cpi R24,2
 0DFC  F441              brne L35
 0DFD                    .dbline 111
                       ;       WriteToDevice( SECOND_LINE, INSTRUCTION );
 0DFD  2722              clr R18
 0DFE  2733              clr R19
 0DFF  EC00              ldi R16,192
 0E00  E010              ldi R17,0
 0E01  940E0EA0          call _WriteToDevice
 0E03  940C0E0B          jmp L36
 0E05                  L35:
 0E05                    .dbline 113
                       ;     else
                       ;       WriteToDevice( FIRST_LINE, INSTRUCTION );
 0E05  2722              clr R18
 0E06  2733              clr R19
 0E07  E800              ldi R16,128
 0E08  E010              ldi R17,0
 0E09  940E0EA0          call _WriteToDevice
 0E0B                  L36:
 0E0B                    .dbline 115
                       ;     
                       ;     for ( Index=0; Index<16; Index++ )              /* replace all characters after the null which space characters */
 0E0B  2422              clr R2
 0E0C  9220015C          sts L32,R2
 0E0E  940C0E33          jmp L40
 0E10                  L37:
 0E10                    .dbline 116
                       ;       if ( LCDStr1[Index] == CHARACTER_NULL )
 0E10  E980              ldi R24,<_LCDStr1
 0E11  E091              ldi R25,>_LCDStr1
 0E12  91E0015C          lds R30,L32
 0E14  27FF              clr R31
 0E15  0FE8              add R30,R24
 0E16  1FF9              adc R31,R25
 0E17  8020              ldd R2,z+0
 0E18  2022              tst R2
 0E19  F4A1              brne L41
 0E1A                    .dbline 117
                       ;         for ( ; Index<16; Index++ )
 0E1A  940C0E2A          jmp L46
 0E1C                  L43:
 0E1C                    .dbline 118
 0E1C  E980              ldi R24,<_LCDStr1
 0E1D  E091              ldi R25,>_LCDStr1
 0E1E  91E0015C          lds R30,L32
 0E20  27FF              clr R31
 0E21  0FE8              add R30,R24
 0E22  1FF9              adc R31,R25
 0E23  E280              ldi R24,32
 0E24  8380              std z+0,R24
 0E25                  L44:
 0E25                    .dbline 117
 0E25  9180015C          lds R24,L32
 0E27  5F8F              subi R24,255    ; addi 1
 0E28  9380015C          sts L32,R24
 0E2A                  L46:
 0E2A                    .dbline 117
 0E2A  9180015C          lds R24,L32
 0E2C  3180              cpi R24,16
 0E2D  F370              brlo L43
 0E2E                  L41:
 0E2E                  L38:
 0E2E                    .dbline 115
 0E2E  9180015C          lds R24,L32
 0E30  5F8F              subi R24,255    ; addi 1
 0E31  9380015C          sts L32,R24
 0E33                  L40:
 0E33                    .dbline 115
 0E33  9180015C          lds R24,L32
 0E35  3180              cpi R24,16
 0E36  F2C8              brlo L37
 0E37                    .dbline 119
                       ;           LCDStr1[Index] = CHARACTER_SPACE;
                       ;     Index = 0;
 0E37  2422              clr R2
 0E38  9220015C          sts L32,R2
 0E3A                    .dbline 120
                       ;     SETBIT( LCDStatus, LCD_BUSY );
 0E3A  91800157          lds R24,_LCDStatus
 0E3C  6084              ori R24,4
 0E3D  93800157          sts _LCDStatus,R24
 0E3F                    .dbline 121
                       ;   } 
 0E3F                  L33:
 0E3F                    .dbline 123
                       ; 
                       ;   CheckIfBusy();
 0E3F  940E0EB0          call _CheckIfBusy
 0E41                    .dbline 124
                       ;   WriteToDevice( LCDStr1[Index++], DATA );  /* write character to screen */
 0E41  E021              ldi R18,1
 0E42  E030              ldi R19,0
 0E43  9020015C          lds R2,L32
 0E45  2433              clr R3
 0E46  2D82              mov R24,R2
 0E47  2D93              mov R25,R3
 0E48  9601              adiw R24,1
 0E49  9380015C          sts L32,R24
 0E4B  E980              ldi R24,<_LCDStr1
 0E4C  E091              ldi R25,>_LCDStr1
 0E4D  2DE2              mov R30,R2
 0E4E  2DF3              mov R31,R3
 0E4F  0FE8              add R30,R24
 0E50  1FF9              adc R31,R25
 0E51  8100              ldd R16,z+0
 0E52  2711              clr R17
 0E53  940E0EA0          call _WriteToDevice
 0E55                    .dbline 126
                       ;   
                       ;   if ( Index>15 )                 /* finished line */               
 0E55  E08F              ldi R24,15
 0E56  9020015C          lds R2,L32
 0E58  1582              cp R24,R2
 0E59  F010              brlo X0
 0E5A  940C0E9F          jmp L47
 0E5C                  X0:
 0E5C                    .dbline 127
                  

⌨️ 快捷键说明

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