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

📄 atmega103.lst

📁 里面给出了ATmega103单片机编程的C语言实例程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
                         .even
 0D06                  _InitADC::
 0D06                    .dbline 47{
                       ; 
                       ; void InitADC( void )
                       ; {
 0D06                    .dbline 48
                       ;   ACSR = BIT(ACD);                  /* comparator and input capture disabled */           
 0D06  E880              ldi R24,128
 0D07  B988              out 0x8,R24
 0D08                    .dbline 49
                       ;   ADMUX = 0;    
 0D08  2422              clr R2
 0D09  B827              out 0x7,R2
 0D0A                    .dbline 50
                       ;   ADCSR = BIT(ADEN) | BIT(ADPS2); 
 0D0A  E884              ldi R24,132
 0D0B  B986              out 0x6,R24
 0D0C                    .dbline 51
                       ;   ADCSR |= BIT(ADSC);       
 0D0C  9A36              sbi 0x6,6
 0D0D                  L6:
 0D0D                    .dbline 52
 0D0D                  L7:
 0D0D                    .dbline 52
                       ;   while ( ADCSR & BIT(ADSC) );  
 0D0D  9936              sbic 0x6,6
 0D0E  CFFE              rjmp L6
 0D0F                    .dbline 53}
                       ; }
 0D0F                  L5:
 0D0F  9508              ret
 0D10                    .dbfunc s InitWatchdog _InitWatchdog fI
                         .even
 0D10                  _InitWatchdog::
 0D10                    .dbline 56{
                       ; 
                       ; void InitWatchdog( void )
                       ; {
 0D10                    .dbline 57
                       ;   WDTCR = BIT(WDP1) | BIT(WDP0);  
 0D10  E083              ldi R24,3
 0D11  BD81              out 0x21,R24
 0D12                    .dbline 58
                       ;   WDTCR |= BIT(WDE);     
 0D12  B581              in R24,0x21
 0D13  6088              ori R24,8
 0D14  BD81              out 0x21,R24
 0D15                    .dbline 59}
                       ; }
 0D15                  L9:
 0D15  9508              ret
 0D16                    .dbfunc s InitPort _InitPort fI
                         .even
 0D16                  _InitPort::
 0D16                    .dbline 62{
                       ; 
                       ; void InitPort( void )
                       ; {
 0D16                    .dbline 63
                       ;   MCUCR = 0x00;
 0D16  2422              clr R2
 0D17  BE25              out 0x35,R2
 0D18                    .dbline 65
                       ;   
                       ;   PORTD = INITIALISE_PORTD;
 0D18  EE80              ldi R24,224
 0D19  BB82              out 0x12,R24
 0D1A                    .dbline 66
                       ;   DDRD = CONFIGURE_PORTD; 
 0D1A  BA21              out 0x11,R2
 0D1B                    .dbline 68
                       ;   
                       ;   PORTE = INITIALISE_PORTE;
 0D1B  B823              out 0x3,R2
 0D1C                    .dbline 69
                       ;   DDRE = CONFIGURE_PORTE; 
 0D1C  B822              out 0x2,R2
 0D1D                    .dbline 70}
                       ; }
 0D1D                  L10:
 0D1D  9508              ret
                         .module lcd.c
                         .text
--- 0000                   .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
                         .area text
--- 0000                   .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
--- 0000                   .dbfunc s LCDInitialise _LCDInitialise fI
                         .even
 0D1E                  _LCDInitialise::
 0D1E                    .dbline 20{
                       ; /* ATmega103 lcd.c file 
                       ; 
                       ;    Author : Robert Stuart 
                       ;    Company : PDL Industries Ltd 
                       ;    Date of Creation : 22 July 1999
                       ;    Tested : 13 March 2000
                       ;  
                       ;    Function : 
                       ;       This module controls the operation of a 16x2 lcd for the ATmega603/103.
                       ;       
                       ;       Auto detection of lcd added. Reads the last character of each line to 
                       ;       determine whether write was successful.    
                       ; */
                       ; 
                       ; /* include */ 
                       ; #include "lcd.h"
                       ; 
                       ; /* Initialises the lcd */
                       ; void LCDInitialise( void )
                       ; {
 0D1E                    .dbline 21
                       ;   MCUCR |= BIT(SRE) | BIT(SRW);         
 0D1E  B785              in R24,0x35
 0D1F  6C80              ori R24,192
 0D20  BF85              out 0x35,R24
 0D21                    .dbline 22
                       ;   LCDCounter = _50MS;           /* delay counter for lcd initialisation */
 0D21  E382              ldi R24,50
 0D22  938001A2          sts _LCDCounter,R24
 0D24                    .dbline 23
                       ;   LCDStatus = 0;            /* lcd status flags are reset */
 0D24  2422              clr R2
 0D25  92200157          sts _LCDStatus,R2
 0D27                    .dbline 24}
                       ; }
 0D27                  L1:
 0D27  9508              ret
 0D28                    .dbfunc s LCDPrintf _LCDPrintf fI
                       ;           Ptr2 -> R20,R21
                       ;           Ptr1 -> R22,R23
                         .even
 0D28                  _LCDPrintf::
 0D28  940E0728          call push_gset2
 0D2A  2F42              mov R20,R18
 0D2B  2F53              mov R21,R19
 0D2C  2F60              mov R22,R16
 0D2D  2F71              mov R23,R17
 0D2E                    .dbline 28{
                       ; 
                       ; /* global function called when writing to the lcd */
                       ; void LCDPrintf( char *Ptr1, char *Ptr2 )
                       ; {
 0D2E                    .dbline 29
                       ;   if ( !CHECKBIT( LCDStatus, LCD_UPDATE ) )
 0D2E  90200157          lds R2,_LCDStatus
 0D30  FC21              sbrc R2,1
 0D31  C031              rjmp L3
 0D32                    .dbline 30
                       ;   {                                 /* check that lcd is not currently updating */
 0D32                    .dbline 31
                       ;     strcpy( LCDStr1, Ptr1 );        /* copy strings into local variables */ 
 0D32  2F26              mov R18,R22
 0D33  2F37              mov R19,R23
 0D34  E900              ldi R16,<_LCDStr1
 0D35  E011              ldi R17,>_LCDStr1
 0D36  940E0A79          call _strcpy
 0D38                    .dbline 32
                       ;     strcpy( LCDStr2, Ptr2 );
 0D38  2F24              mov R18,R20
 0D39  2F35              mov R19,R21
 0D3A  E70F              ldi R16,<_LCDStr2
 0D3B  E011              ldi R17,>_LCDStr2
 0D3C  940E0A79          call _strcpy
 0D3E                    .dbline 34
                       ;     
                       ;     if ( LCDStr1[0] == CHARACTER_NULL ) /* line 1 not updated */
 0D3E  90200190          lds R2,_LCDStr1
 0D40  2022              tst R2
 0D41  F459              brne L5
 0D42                    .dbline 35
                       ;     {
 0D42                    .dbline 36
                       ;       strcpy( LCDStr1, LCDStr2 );
 0D42  E72F              ldi R18,<_LCDStr2
 0D43  E031              ldi R19,>_LCDStr2
 0D44  E900              ldi R16,<_LCDStr1
 0D45  E011              ldi R17,>_LCDStr1
 0D46  940E0A79          call _strcpy
 0D48                    .dbline 37
                       ;       LCDLine = LINE2;
 0D48  E082              ldi R24,2
 0D49  938001A1          sts _LCDLine,R24
 0D4B                    .dbline 38
                       ;     }
 0D4B  940C0D59          jmp L6
 0D4D                  L5:
 0D4D                    .dbline 39
                       ;     else if ( LCDStr2[0] == CHARACTER_NULL )
 0D4D  9020017F          lds R2,_LCDStr2
 0D4F  2022              tst R2
 0D50  F429              brne L7
 0D51                    .dbline 40
                       ;       LCDLine = LINE1;                  /* line 2 not updated */
 0D51  E081              ldi R24,1
 0D52  938001A1          sts _LCDLine,R24
 0D54  940C0D59          jmp L8
 0D56                  L7:
 0D56                    .dbline 42
                       ;     else
                       ;       LCDLine = LINE1_AND_LINE2;
 0D56  E083              ldi R24,3
 0D57  938001A1          sts _LCDLine,R24
 0D59                  L8:
 0D59                  L6:
 0D59                    .dbline 44
                       ;       
                       ;     SETBIT( LCDStatus, LCD_UPDATE );    /* set flags */
 0D59  91800157          lds R24,_LCDStatus
 0D5B  6082              ori R24,2
 0D5C  93800157          sts _LCDStatus,R24
 0D5E                    .dbline 45
                       ;     CLEARBIT( LCDStatus, LCD_QUEUE ); 
 0D5E  7E8F              andi R24,239
 0D5F  93800157          sts _LCDStatus,R24
 0D61                    .dbline 46
                       ;   }
 0D61  940C0D78          jmp L4
 0D63                  L3:
 0D63                    .dbline 47
                       ;   else if ( !CHECKBIT( LCDStatus, LCD_QUEUE ) )
 0D63  90200157          lds R2,_LCDStatus
 0D65  FC24              sbrc R2,4
 0D66  C011              rjmp L9
 0D67                    .dbline 48
                       ;   {                       /* update after existing update has been completed */
 0D67                    .dbline 49
                       ;     strcpy( LCDQueueStr1, Ptr1);
 0D67  2F26              mov R18,R22
 0D68  2F37              mov R19,R23
 0D69  E60E              ldi R16,<_LCDQueueStr1
 0D6A  E011              ldi R17,>_LCDQueueStr1
 0D6B  940E0A79          call _strcpy
 0D6D                    .dbline 50
                       ;     strcpy( LCDQueueStr2, Ptr2);
 0D6D  2F24              mov R18,R20
 0D6E  2F35              mov R19,R21
 0D6F  E50D              ldi R16,<_LCDQueueStr2
 0D70  E011              ldi R17,>_LCDQueueStr2
 0D71  940E0A79          call _strcpy
 0D73                    .dbline 52
                       ;     
                       ;     SETBIT( LCDStatus, LCD_QUEUE );
 0D73  91800157          lds R24,_LCDStatus
 0D75  6180              ori R24,16
 0D76  93800157          sts _LCDStatus,R24
 0D78                    .dbline 53
                       ;   }
 0D78                  L9:
 0D78                  L4:
 0D78                    .dbline 54}
                       ; }
 0D78                  L2:
 0D78  940E0734          call pop_gset2
 0D7A  9508              ret
 0D7B                    .dbsym r Ptr2 20 pc
 0D7B                    .dbsym r Ptr1 22 pc
 0D7B                    .dbfunc s DelayLCDStartup _DelayLCDStartup fI
                         .even
 0D7B                  _DelayLCDStartup::
 0D7B                    .dbline 58{
                       ; 
                       ; /* called from the main 1ms interrupt, must allow at least 40ms before lcd can be initialised */
                       ; void DelayLCDStartup( void )
                       ; {
 0D7B                    .dbline 59
                       ;   if ( LCDCounter && !CHECKBIT( LCDStatus, LCD_BUSY ) ) 
 0D7B  902001A2          lds R2,_LCDCounter
 0D7D  2022              tst R2
 0D7E  F049              breq L12
 0D7F  90200157          lds R2,_LCDStatus
 0D81  FC22              sbrc R2,2
 0D82  C005              rjmp L12
 0D83                    .dbline 60
                       ;     LCDCounter--;           /* count down delay timer */
 0D83  918001A2          lds R24,_LCDCounter
 0D85  5081              subi R24,1
 0D86  938001A2          sts _LCDCounter,R24
 0D88                  L12:
 0D88                    .dbline 62
                       ;     
                       ;   if ( CHECKBIT( LCDStatus, LCD_INITIALISE ) && LCDCounter == 1 )
 0D88  90200157          lds R2,_LCDStatus
 0D8A  FE23              sbrs R2,3
 0D8B  C006              rjmp L14
 0D8C  918001A2          lds R24,_LCDCounter
 0D8E  3081              cpi R24,1
 0D8F  F411              brne L14
 0D90                    .dbline 63
                       ;     InitScreen();                   /* initialise lcd */
 0D90  940E0D93          call _InitScreen
 0D92                  L14:
 0D92                    .dbline 64}
                       ; }
 0D92                  L11:
 0D92  9508              ret
 0D93                    .dbfunc s InitScreen _InitScreen fI
                         .even
 0D93                  _InitScreen::
 0D93  9722              sbiw R28,2
 0D94                    .dbline 67{
                       ; 
                       ; void InitScreen( void )
                       ; {
 0D94                    .dbline 68

⌨️ 快捷键说明

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