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

📄 newmain.lis

📁 单片机MEGA128的BOOTLOADER程序。
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00EE 81BB              out 0x11,R24
 00F0                   .dbline 101
 00F0           ;  PORTE = 0x02;
 00F0 82E0              ldi R24,2
 00F2 83B9              out 0x3,R24
 00F4                   .dbline 102
 00F4           ;  DDRE  = 0x02;
 00F4 82B9              out 0x2,R24
 00F6                   .dbline 103
 00F6           ;  PORTF = 0x00;
 00F6 20926200          sts 98,R2
 00FA                   .dbline 104
 00FA           ;  DDRF  = 0x00;
 00FA 20926100          sts 97,R2
 00FE                   .dbline 105
 00FE           ;  PORTG = 0x0;
 00FE 20926500          sts 101,R2
 0102                   .dbline 106
 0102           ;  DDRG  = 0x0;
 0102 20926400          sts 100,R2
 0106                   .dbline -2
 0106           L21:
 0106                   .dbline 0 ; func end
 0106 0895              ret
 0108                   .dbend
 0108                   .dbfunc e Init_SPI _Init_SPI fV
                        .even
 0108           _Init_SPI::
 0108                   .dbline -1
 0108                   .dbline 110
 0108           ; }
 0108           ; //初始化 SPI
 0108           ; void Init_SPI(void)
 0108           ; {
 0108                   .dbline 111
 0108           ;  SPCR = 0x5e; //setup SPI
 0108 8EE5              ldi R24,94
 010A 8DB9              out 0xd,R24
 010C                   .dbline 112
 010C           ;  SPSR = 0x00; //setup SPI
 010C 2224              clr R2
 010E 2EB8              out 0xe,R2
 0110                   .dbline -2
 0110           L22:
 0110                   .dbline 0 ; func end
 0110 0895              ret
 0112                   .dbend
 0112                   .dbfunc e delay_ms _delay_ms fV
 0112           ;           time -> R20,R21
                        .even
 0112           _delay_ms::
 0112 0E940000          xcall push_gset1
 0116 A801              movw R20,R16
 0118                   .dbline -1
 0118                   .dbline 117
 0118           ; }
 0118           ; 
 0118           ; /*                        毫秒级延时程序                      */       
 0118           ; void delay_ms(unsigned int time)
 0118           ;        {
 0118 0CC0              xjmp L25
 011A           L24:
 011A                   .dbline 119
 011A           ;         while(time!=0)
 011A           ;                 {             
 011A                   .dbline 120
 011A           ;                  delay_us(1850);
 011A 0AE3              ldi R16,1850
 011C 17E0              ldi R17,7
 011E 70DF              xcall _delay_us
 0120                   .dbline 121
 0120           ;                  time--;
 0120 4150              subi R20,1
 0122 5040              sbci R21,0
 0124                   .dbline 122
 0124           ;                   if(PORTD&0x01==1)PORTD=PORTD&0xfe;
 0124 909B              sbis 0x12,0
 0126 04C0              rjmp L27
 0128                   .dbline 122
 0128 82B3              in R24,0x12
 012A 8E7F              andi R24,254
 012C 82BB              out 0x12,R24
 012E 01C0              xjmp L28
 0130           L27:
 0130                   .dbline 123
 0130           ;                       else PORTD=PORTD|0x1;
 0130 909A              sbi 0x12,0
 0132           L28:
 0132                   .dbline 124
 0132           L25:
 0132                   .dbline 118
 0132 4030              cpi R20,0
 0134 4507              cpc R20,R21
 0136 89F7              brne L24
 0138           X2:
 0138                   .dbline -2
 0138           L23:
 0138 0E940000          xcall pop_gset1
 013C                   .dbline 0 ; func end
 013C 0895              ret
 013E                   .dbsym r time 20 i
 013E                   .dbend
 013E                   .dbfunc e clr_dog _clr_dog fV
                        .even
 013E           _clr_dog::
 013E                   .dbline -1
 013E                   .dbline 127
 013E           ;                 }
 013E           ;        }      
 013E           ; void clr_dog(void)
 013E           ; {
 013E                   .dbline 128
 013E           ; if(PORTD&0x01==1)PORTD=PORTD&0xfe;
 013E 909B              sbis 0x12,0
 0140 04C0              rjmp L30
 0142                   .dbline 128
 0142 82B3              in R24,0x12
 0144 8E7F              andi R24,254
 0146 82BB              out 0x12,R24
 0148 01C0              xjmp L31
 014A           L30:
 014A                   .dbline 129
 014A 909A              sbi 0x12,0
 014C           L31:
 014C                   .dbline -2
 014C           L29:
 014C                   .dbline 0 ; func end
 014C 0895              ret
 014E                   .dbend
 014E                   .dbfunc e df_reset _df_reset fV
                        .even
 014E           _df_reset::
 014E                   .dbline -1
 014E                   .dbline 134
 014E           ; else PORTD=PORTD|0x1;
 014E           ; }
 014E           ; //spi模式3
 014E           ; //flash复位
 014E           ; void df_reset(void)
 014E           ; {
 014E                   .dbline 135
 014E           ; PORTB&=~(1<<RESET);  
 014E C798              cbi 0x18,7
 0150                   .dbline 136
 0150           ; delay_us(500);
 0150 04EF              ldi R16,500
 0152 11E0              ldi R17,1
 0154 55DF              xcall _delay_us
 0156                   .dbline 137
 0156           ; PORTB|=1<<RESET;
 0156 C79A              sbi 0x18,7
 0158                   .dbline -2
 0158           L32:
 0158                   .dbline 0 ; func end
 0158 0895              ret
 015A                   .dbend
 015A                   .dbfunc e SPI_TranByte _SPI_TranByte fc
 015A           ;          cData -> R16
                        .even
 015A           _SPI_TranByte::
 015A                   .dbline -1
 015A                   .dbline 141
 015A           ; }
 015A           ; //主模式下发送一个字节或接收一个字节
 015A           ; unsigned char SPI_TranByte(unsigned char cData)
 015A           ; {
 015A                   .dbline 142
 015A           ; SPDR=cData;
 015A 0FB9              out 0xf,R16
 015C           L34:
 015C                   .dbline 143
 015C           L35:
 015C                   .dbline 143
 015C           ; while(!(SPSR&0x80));
 015C 779B              sbis 0xe,7
 015E FECF              rjmp L34
 0160                   .dbline 144
 0160           ; return SPDR;
 0160 0FB1              in R16,0xf
 0162                   .dbline -2
 0162           L33:
 0162                   .dbline 0 ; func end
 0162 0895              ret
 0164                   .dbsym r cData 16 c
 0164                   .dbend
 0164                   .dbfunc e Read_Testfile _Read_Testfile fV
 0164           ;              j -> <dead>
 0164           ;              i -> <dead>
 0164           ;            len -> R22,R23
 0164           ;           File -> R20,R21
                        .even
 0164           _Read_Testfile::
 0164 0E940000          xcall push_gset2
 0168 B901              movw R22,R18
 016A A801              movw R20,R16
 016C                   .dbline -1
 016C                   .dbline 148
 016C           ; }
 016C           ; 
 016C           ; void Read_Testfile(char *File ,int len )
 016C           ; {
 016C           L38:
 016C                   .dbline 150
 016C           L39:
 016C                   .dbline 150
 016C           ; unsigned char i,j;
 016C           ; while(!(PINB&0x20));
 016C B59B              sbis 0x16,5
 016E FECF              rjmp L38
 0170                   .dbline 151
 0170           ; PORTB&=~(1<<CS);//使能 at45
 0170 C498              cbi 0x18,4
 0172                   .dbline 152
 0172           ; SPI_TranByte(0x3);
 0172 03E0              ldi R16,3
 0174 F2DF              xcall _SPI_TranByte
 0176                   .dbline 153
 0176           ; SPI_TranByte((char)(page_counter_rd>>6));//页地址PA11-PA6
 0176 26E0              ldi R18,6
 0178 30E0              ldi R19,0
 017A 00910C00          lds R16,_page_counter_rd
 017E 10910D00          lds R17,_page_counter_rd+1
 0182 0E940000          xcall lsr16
 0186 E9DF              xcall _SPI_TranByte
 0188                   .dbline 154
 0188           ; SPI_TranByte((char)((page_counter_rd<<2)|(page_offset_rd>>8)));////页地址PA5-PA0
 0188 20900A00          lds R2,_page_offset_rd
 018C 30900B00          lds R3,_page_offset_rd+1
 0190 232C              mov R2,R3
 0192 3324              clr R3
 0194 00910C00          lds R16,_page_counter_rd
 0198 000F              lsl R16
 019A 111F              rol R17
 019C 000F              lsl R16
 019E 111F              rol R17
 01A0 0229              or R16,R2
 01A2 1329              or R17,R3
 01A4 DADF              xcall _SPI_TranByte
 01A6                   .dbline 155
 01A6           ; SPI_TranByte((char)page_offset_rd);
 01A6 00910A00          lds R16,_page_offset_rd
 01AA D7DF              xcall _SPI_TranByte
 01AC 32C0              xjmp L42
 01AE           L41:
 01AE                   .dbline 157
 01AE           ;  while(len)
 01AE           ;   {
 01AE                   .dbline 158
 01AE           ;   SPDR=0;
 01AE 2224              clr R2
 01B0 2FB8              out 0xf,R2
 01B2           L44:
 01B2                   .dbline 159
 01B2           L45:
 01B2                   .dbline 159
 01B2           ;   while(!(SPSR&0x80));
 01B2 779B              sbis 0xe,7
 01B4 FECF              rjmp L44
 01B6                   .dbline 160
 01B6           ;   *File=SPDR;
 01B6 2FB0              in R2,0xf
 01B8 FA01              movw R30,R20
 01BA 2082              std z+0,R2
 01BC                   .dbline 161
 01BC           ;   File++; 
 01BC 4F5F              subi R20,255  ; offset = 1
 01BE 5F4F              sbci R21,255
 01C0                   .dbline 162
 01C0           ;   len--;
 01C0 6150              subi R22,1
 01C2 7040              sbci R23,0
 01C4                   .dbline 163
 01C4           ;   page_offset_rd++;
 01C4 80910A00          lds R24,_page_offset_rd
 01C8 90910B00          lds R25,_page_offset_rd+1
 01CC 0196              adiw R24,1
 01CE 90930B00          sts _page_offset_rd+1,R25
 01D2 80930A00          sts _page_offset_rd,R24
 01D6                   .dbline 164
 01D6           ;   if(page_offset_rd>=528)
 01D6 8031              cpi R24,16
 01D8 E2E0              ldi R30,2
 01DA 9E07              cpc R25,R30
 01DC D0F0              brlo L47
 01DE                   .dbline 165
 01DE           ;        {
 01DE                   .dbline 166
 01DE           ;          page_offset_rd=0;
 01DE 2224              clr R2
 01E0 3324              clr R3
 01E2 30920B00          sts _page_offset_rd+1,R3
 01E6 20920A00          sts _page_offset_rd,R2
 01EA                   .dbline 167
 01EA           ;          page_counter_rd++;
 01EA 80910C00          lds R24,_page_counter_rd
 01EE 90910D00          lds R25,_page_counter_rd+1
 01F2 0196              adiw R24,1
 01F4 90930D00          sts _page_counter_rd+1,R25
 01F8 80930C00          sts _page_counter_rd,R24
 01FC                   .dbline 168
 01FC           ;          if(page_counter_rd>=4096){quit();page_counter_rd=3849;}
 01FC 8030              cpi R24,0
 01FE E0E1              ldi R30,16
 0200 9E07              cpc R25,R30
 0202 38F0              brlo L49
 0204                   .dbline 168
 0204                   .dbline 168
 0204 60DF              xcall _quit
 0206                   .dbline 168
 0206 89E0              ldi R24,3849
 0208 9FE0              ldi R25,15
 020A 90930D00          sts _page_counter_rd+1,R25
 020E 80930C00          sts _page_counter_rd,R24
 0212                   .dbline 168
 0212           L49:
 0212                   .dbline 169
 0212           ;          }
 0212           L47:
 0212                   .dbline 171
 0212           L42:
 0212                   .dbline 156
 0212 6030              cpi R22,0
 0214 6707              cpc R22,R23
 0216 59F6              brne L41
 0218           X3:
 0218                   .dbline 172
 0218           ;          
 0218           ;   }
 0218           ; PORTB|=1<<CS; 
 0218 C49A              sbi 0x18,4
 021A                   .dbline -2
 021A           L37:
 021A 0E940000          xcall pop_gset2
 021E                   .dbline 0 ; func end
 021E 0895              ret
 0220                   .dbsym l j 1 c
 0220                   .dbsym l i 1 c
 0220                   .dbsym r len 22 I

⌨️ 快捷键说明

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