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

📄 main.lis

📁 一个AVR单片机BOOTLOADER的例子
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00FC                   .dbline 101
 00FC           ;                  else
 00FC           ;                    {           
 00FC                   .dbline 102
 00FC           ;               intval=read_program_memory(address,0x00);
 00FC 2227              clr R18
 00FE 8B01              movw R16,R22
 0100 00D0              rcall _read_program_memory
 0102 5801              movw R10,R16
 0104                   .dbline 103
 0104           ;               sendchar((char)(intval>>8));      //send MSB  
 0104 012F              mov R16,R17
 0106 1127              clr R17
 0108 7BDF              rcall _sendchar
 010A                   .dbline 104
 010A           ;               sendchar((char)intval);           //send LSB
 010A 0A2D              mov R16,R10
 010C 79DF              rcall _sendchar
 010E                   .dbline 105
 010E           ;               address+=2;
 010E 6E5F              subi R22,254  ; offset = 2
 0110 7F4F              sbci R23,255
 0112                   .dbline 106
 0112           ;                    }  
 0112                   .dbline 107
 0112           ;           }        
 0112 8CCF              rjmp L11
 0114           L38:
 0114                   .dbline 108
 0114           ;          else if (val == 'D')
 0114 4434              cpi R20,68
 0116 81F4              brne L42
 0118                   .dbline 109
 0118           ;           {
 0118                   .dbline 110
 0118           ;            EEARL = address;
 0118 6EBB              out 0x1e,R22
 011A                   .dbline 111
 011A           ;            EEARH = (address >> 8);
 011A 1B01              movw R2,R22
 011C 232C              mov R2,R3
 011E 3324              clr R3
 0120 2FBA              out 0x1f,R2
 0122                   .dbline 112
 0122           ;            address++;
 0122 6F5F              subi R22,255  ; offset = 1
 0124 7F4F              sbci R23,255
 0126                   .dbline 113
 0126           ;            EEDR = recchar();
 0126 70DF              rcall _recchar
 0128 0DBB              out 0x1d,R16
 012A                   .dbline 114
 012A           ;            EECR |= (1<<EEMWE);
 012A E29A              sbi 0x1c,2
 012C                   .dbline 115
 012C           ;            EECR |= (1<<EEWE);
 012C E19A              sbi 0x1c,1
 012E           L44:
 012E                   .dbline 117
 012E           L45:
 012E                   .dbline 116
 012E           ;            while (EECR & (1<<EEWE))
 012E E199              sbic 0x1c,1
 0130 FECF              rjmp L44
 0132                   .dbline 118
 0132           ;               ;
 0132           ;            sendchar('\r');
 0132 0DE0              ldi R16,13
 0134 65DF              rcall _sendchar
 0136                   .dbline 119
 0136           ;            }
 0136 7ACF              rjmp L11
 0138           L42:
 0138                   .dbline 120
 0138           ;           else if (val == 'd')
 0138 4436              cpi R20,100
 013A 59F4              brne L47
 013C                   .dbline 121
 013C           ;            {
 013C                   .dbline 122
 013C           ;             EEARL = address;
 013C 6EBB              out 0x1e,R22
 013E                   .dbline 123
 013E           ;             EEARH = (address >> 8);
 013E 1B01              movw R2,R22
 0140 232C              mov R2,R3
 0142 3324              clr R3
 0144 2FBA              out 0x1f,R2
 0146                   .dbline 124
 0146           ;             address++;
 0146 6F5F              subi R22,255  ; offset = 1
 0148 7F4F              sbci R23,255
 014A                   .dbline 125
 014A           ;             EECR |= (1<<EERE);
 014A E09A              sbi 0x1c,0
 014C                   .dbline 126
 014C           ;             sendchar(EEDR);
 014C 0DB3              in R16,0x1d
 014E 58DF              rcall _sendchar
 0150                   .dbline 127
 0150           ;            }       
 0150 6DCF              rjmp L11
 0152           L47:
 0152                   .dbline 128
 0152           ;           else if(val=='F')                   // read fuse bits
 0152 4634              cpi R20,70
 0154 31F4              brne L49
 0156                   .dbline 129
 0156           ;            {
 0156                   .dbline 130
 0156           ;             sendchar(read_program_memory(0x0000,0x09));
 0156 29E0              ldi R18,9
 0158 0027              clr R16
 015A 1127              clr R17
 015C 00D0              rcall _read_program_memory
 015E 50DF              rcall _sendchar
 0160                   .dbline 131
 0160           ;            }        
 0160 65CF              rjmp L11
 0162           L49:
 0162                   .dbline 132
 0162           ;           else if(val=='r')                   // read lock bits
 0162 4237              cpi R20,114
 0164 31F4              brne L51
 0166                   .dbline 133
 0166           ;            {
 0166                   .dbline 134
 0166           ;             sendchar(read_program_memory(0x0001,0x09));
 0166 29E0              ldi R18,9
 0168 01E0              ldi R16,1
 016A 10E0              ldi R17,0
 016C 00D0              rcall _read_program_memory
 016E 48DF              rcall _sendchar
 0170                   .dbline 135
 0170           ;            }        
 0170 5DCF              rjmp L11
 0172           L51:
 0172                   .dbline 136
 0172           ;           else if(val=='N')                   // read high fuse bits
 0172 4E34              cpi R20,78
 0174 31F4              brne L53
 0176                   .dbline 137
 0176           ;            {
 0176                   .dbline 138
 0176           ;             sendchar(read_program_memory(0x0003,0x09));
 0176 29E0              ldi R18,9
 0178 03E0              ldi R16,3
 017A 10E0              ldi R17,0
 017C 00D0              rcall _read_program_memory
 017E 40DF              rcall _sendchar
 0180                   .dbline 139
 0180           ;             }        
 0180 55CF              rjmp L11
 0182           L53:
 0182                   .dbline 140
 0182           ;           else if(val=='t')                   // Return programmer type 
 0182 4437              cpi R20,116
 0184 29F4              brne L55
 0186                   .dbline 141
 0186           ;            {
 0186                   .dbline 142
 0186           ;             sendchar(device);
 0186 07E7              ldi R16,119
 0188 3BDF              rcall _sendchar
 018A                   .dbline 143
 018A           ;             sendchar(0);
 018A 0027              clr R16
 018C 39DF              rcall _sendchar
 018E                   .dbline 144
 018E           ;             }
 018E 4ECF              rjmp L11
 0190           L55:
 0190                   .dbline 145
 0190           ;           else if ((val=='x')||(val=='y')||(val=='T'))
 0190 4837              cpi R20,120
 0192 21F0              breq L60
 0194 4937              cpi R20,121
 0196 11F0              breq L60
 0198 4435              cpi R20,84
 019A 21F4              brne L57
 019C           L60:
 019C                   .dbline 146
 019C           ;             {
 019C                   .dbline 147
 019C           ;              recchar();
 019C 35DF              rcall _recchar
 019E                   .dbline 148
 019E           ;              sendchar('\r');
 019E 0DE0              ldi R16,13
 01A0 2FDF              rcall _sendchar
 01A2                   .dbline 149
 01A2           ;             }       
 01A2 44CF              rjmp L11
 01A4           L57:
 01A4                   .dbline 150
 01A4           ;           else if (val=='S')                  // Return software identifier 
 01A4 4335              cpi R20,83
 01A6 79F4              brne L61
 01A8                   .dbline 151
 01A8           ;             {
 01A8                   .dbline 152
 01A8           ;              sendchar('A');
 01A8 01E4              ldi R16,65
 01AA 2ADF              rcall _sendchar
 01AC                   .dbline 153
 01AC           ;              sendchar('V');
 01AC 06E5              ldi R16,86
 01AE 28DF              rcall _sendchar
 01B0                   .dbline 154
 01B0           ;              sendchar('R');
 01B0 02E5              ldi R16,82
 01B2 26DF              rcall _sendchar
 01B4                   .dbline 155
 01B4           ;              sendchar('B');
 01B4 02E4              ldi R16,66
 01B6 24DF              rcall _sendchar
 01B8                   .dbline 156
 01B8           ;              sendchar('O');
 01B8 0FE4              ldi R16,79
 01BA 22DF              rcall _sendchar
 01BC                   .dbline 157
 01BC           ;              sendchar('O');
 01BC 0FE4              ldi R16,79
 01BE 20DF              rcall _sendchar
 01C0                   .dbline 158
 01C0           ;              sendchar('T');
 01C0 04E5              ldi R16,84
 01C2 1EDF              rcall _sendchar
 01C4                   .dbline 159
 01C4           ;             }                                        
 01C4 33CF              rjmp L11
 01C6           L61:
 01C6                   .dbline 160
 01C6           ;           else if (val=='V')                  // Return Software Version
 01C6 4635              cpi R20,86
 01C8 29F4              brne L63
 01CA                   .dbline 161
 01CA           ;             {
 01CA                   .dbline 162
 01CA           ;              sendchar('1');
 01CA 01E3              ldi R16,49
 01CC 19DF              rcall _sendchar
 01CE                   .dbline 163
 01CE           ;              sendchar('0');
 01CE 00E3              ldi R16,48
 01D0 17DF              rcall _sendchar
 01D2                   .dbline 164
 01D2           ;              }        
 01D2 2CCF              rjmp L11
 01D4           L63:
 01D4                   .dbline 165
 01D4           ;           else if (val=='s')                  // Return Signature Byte
 01D4 4337              cpi R20,115
 01D6 39F4              brne L65
 01D8                   .dbline 166
 01D8           ;             {                                                 
 01D8                   .dbline 167
 01D8           ;              sendchar(sig_byte3);
 01D8 07E0              ldi R16,7
 01DA 12DF              rcall _sendchar
 01DC                   .dbline 168
 01DC           ;              sendchar(sig_byte2);
 01DC 03E9              ldi R16,147
 01DE 10DF              rcall _sendchar
 01E0                   .dbline 169
 01E0           ;              sendchar(sig_byte1);
 01E0 0EE1              ldi R16,30
 01E2 0EDF              rcall _sendchar
 01E4                   .dbline 170
 01E4           ;             }       
 01E4 23CF              rjmp L11
 01E6           L65:
 01E6                   .dbline 171
 01E6 4B31              cpi R20,27
 01E8 09F4              brne X1
 01EA 20CF              rjmp L11
 01EC           X1:
 01EC                   .dbline 172
 01EC                   .dbline 173
 01EC 0FE3              ldi R16,63
 01EE 08DF              rcall _sendchar
 01F0                   .dbline 174
 01F0                   .dbline 175
 01F0                   .dbline 40
 01F0                   .dbline 40
 01F0 1DCF              rjmp L11
 01F2           X0:
 01F2                   .dbline -2
 01F2           L10:
 01F2 00D0              rcall pop_gset5
 01F4                   .dbline 0 ; func end
 01F4 0895              ret
 01F6                   .dbsym r intval 10 i
 01F6                   .dbsym r data 14 i
 01F6                   .dbsym r ldata 12 c
 01F6                   .dbsym r address 22 i
 01F6                   .dbsym r val 20 c
 01F6                   .dbend
 01F6                   .dbfunc e main _main fV
 01F6           ;        funcptr -> R20,R21
                        .even
 01F6           _main::
 01F6                   .dbline -1
 01F6                   .dbline 178
 01F6           ;           else if(val!=0x1b)                  // if not esc
 01F6           ;             {
 01F6           ;              sendchar('?');
 01F6           ;              }
 01F6           ;          }    
 01F6           ; }
 01F6           ; void main(void)
 01F6           ; {
 01F6                   .dbline 179
 01F6           ;     void (*funcptr)( void ) = 0x0000;       // Set up function pointer
 01F6 4427              clr R20
 01F8 5527              clr R21
 01FA                   .dbline 180
 01FA           ;       DDRD=0;
 01FA 2224              clr R2
 01FC 21BA              out 0x11,R2
 01FE                   .dbline 181
 01FE           ;       PORTD=0xff;     
 01FE 8FEF              ldi R24,255
 0200 82BB              out 0x12,R24
 0202                   .dbline 182
 0202           ;     uart_init();
 0202 06DF              rcall _uart_init
 0204                   .dbline 183
 0204           ;       if ((PIND&0x04)==0)   
 0204 8299              sbic 0x10,2
 0206 04C0              rjmp L70
 0208                   .dbline 184
 0208           ;        {
 0208                   .dbline 185
 0208           ;           PORTD=0;
 0208 2224              clr R2
 020A 22BA              out 0x12,R2
 020C                   .dbline 186
 020C           ;           iap();
 020C 0EDF              rcall _iap
 020E                   .dbline 187
 020E           ;          }
 020E 03C0              rjmp L71
 0210           L70:
 0210                   .dbline 189
 0210 E42F              mov R30,R20
 0212 F52F              mov R31,R21
 0214 00D0              rcall xicall
 0216           L71:
 0216                   .dbline -2
 0216                   .dbline 190
 0216           ;       else
 0216           ;          funcptr();   
 0216           ; }
 0216           L69:
 0216                   .dbline 0 ; func end
 0216 0895              ret
 0218                   .dbsym r funcptr 20 pfV
 0218                   .dbend

⌨️ 快捷键说明

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