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

📄 atemga128iap.lis

📁 atmega128在线升级程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00CC           L21:
 00CC                   .dbline 90
 00CC           ;     status = UCSR0A; 
 00CC 2BB1              in R18,0xb
 00CE                   .dbline 91
 00CE           ;     res = UDR0; 
 00CE 0CB1              in R16,0xc
 00D0                   .dbline 92
 00D0           ;     if (status & 0x1c) return -1;        // If error, return -1 
 00D0 822F              mov R24,R18
 00D2 8C71              andi R24,28
 00D4 19F0              breq L23
 00D6                   .dbline 92
 00D6 0FEF              ldi R16,-1
 00D8 1FEF              ldi R17,-1
 00DA 01C0              xjmp L20
 00DC           L23:
 00DC                   .dbline 93
 00DC           ;     return res; 
 00DC 1127              clr R17
 00DE                   .dbline -2
 00DE           L20:
 00DE                   .dbline 0 ; func end
 00DE 0895              ret
 00E0                   .dbsym r res 16 c
 00E0                   .dbsym r status 18 c
 00E0                   .dbend
 00E0                   .dbfunc e uart_waitchar _uart_waitchar fc
 00E0           ;              c -> R20,R21
                        .even
 00E0           _uart_waitchar::
 00E0 0E940000          xcall push_gset1
 00E4                   .dbline -1
 00E4                   .dbline 97
 00E4           ; } 
 00E4           ; //等待从RS232接收一个有效的字节 
 00E4           ; char uart_waitchar(void) 
 00E4           ; { 
 00E4           L26:
 00E4                   .dbline 99
 00E4           L27:
 00E4                   .dbline 99
 00E4           ;     int c; 
 00E4           ;     while((c=uart_getchar())==-1); 
 00E4 EEDF              xcall _uart_getchar
 00E6 A801              movw R20,R16
 00E8 4F3F              cpi R20,255
 00EA EFEF              ldi R30,255
 00EC 5E07              cpc R21,R30
 00EE D1F3              breq L26
 00F0                   .dbline 100
 00F0           ;     return (char)c; 
 00F0                   .dbline -2
 00F0           L25:
 00F0 0E940000          xcall pop_gset1
 00F4                   .dbline 0 ; func end
 00F4 0895              ret
 00F6                   .dbsym r c 20 I
 00F6                   .dbend
 00F6                   .dbfunc e calcrc _calcrc fI
 00F6           ;              i -> R22
 00F6           ;            crc -> R20,R21
 00F6           ;          count -> R18,R19
 00F6           ;            ptr -> R16,R17
                        .even
 00F6           _calcrc::
 00F6 0E940000          xcall push_gset2
 00FA                   .dbline -1
 00FA                   .dbline 104
 00FA           ; } 
 00FA           ; //计算CRC 
 00FA           ; int calcrc(char *ptr, int count) 
 00FA           ; { 
 00FA                   .dbline 105
 00FA           ;     int crc = 0; 
 00FA 4427              clr R20
 00FC 5527              clr R21
 00FE 1BC0              xjmp L31
 0100           L30:
 0100                   .dbline 109
 0100           ;     char i; 
 0100           ;      
 0100           ;     while (--count >= 0) 
 0100           ;     { 
 0100                   .dbline 110
 0100           ;         crc = crc ^ (int) *ptr++ << 8; 
 0100 F801              movw R30,R16
 0102 2190              ld R2,Z+
 0104 8F01              movw R16,R30
 0106 3324              clr R3
 0108 322C              mov R3,R2
 010A 2224              clr R2
 010C 4225              eor R20,R2
 010E 5325              eor R21,R3
 0110                   .dbline 111
 0110           ;         i = 8; 
 0110 68E0              ldi R22,8
 0112           L33:
 0112                   .dbline 113
 0112           ;         do 
 0112           ;         { 
 0112                   .dbline 114
 0112           ;         if (crc & 0x8000) 
 0112 57FF              sbrs R21,7
 0114 09C0              rjmp L36
 0116                   .dbline 115
 0116           ;             crc = crc << 1 ^ 0x1021; 
 0116 81E2              ldi R24,4129
 0118 90E1              ldi R25,16
 011A 1A01              movw R2,R20
 011C 220C              lsl R2
 011E 331C              rol R3
 0120 2826              eor R2,R24
 0122 3926              eor R3,R25
 0124 A101              movw R20,R2
 0126 02C0              xjmp L37
 0128           L36:
 0128                   .dbline 117
 0128           ;         else 
 0128           ;             crc = crc << 1; 
 0128 440F              lsl R20
 012A 551F              rol R21
 012C           L37:
 012C                   .dbline 118
 012C           L34:
 012C                   .dbline 118
 012C 862F              mov R24,R22
 012E 8150              subi R24,1
 0130 682F              mov R22,R24
 0132 8823              tst R24
 0134 71F7              brne L33
 0136                   .dbline 119
 0136           L31:
 0136                   .dbline 108
 0136 C901              movw R24,R18
 0138 0197              sbiw R24,1
 013A 9C01              movw R18,R24
 013C 2030              cpi R18,0
 013E E0E0              ldi R30,0
 0140 3E07              cpc R19,R30
 0142 F4F6              brge L30
 0144                   .dbline 120
 0144           ;         } while(--i); 
 0144           ;     } 
 0144           ;     return (crc); 
 0144 8A01              movw R16,R20
 0146                   .dbline -2
 0146           L29:
 0146 0E940000          xcall pop_gset2
 014A                   .dbline 0 ; func end
 014A 0895              ret
 014C                   .dbsym r i 22 c
 014C                   .dbsym r crc 20 I
 014C                   .dbsym r count 18 I
 014C                   .dbsym r ptr 16 pc
 014C                   .dbend
 014C                   .dbfunc e quit _quit fV
                        .even
 014C           _quit::
 014C                   .dbline -1
 014C                   .dbline 124
 014C           ; } 
 014C           ; //退出Bootloader程序,从0x0000处执行应用程序 
 014C           ; void quit(void) 
 014C           ; { 
 014C                   .dbline 125
 014C           ;       uart_putchar('O');uart_putchar('K'); 
 014C 0FE4              ldi R16,79
 014E B5DF              xcall _uart_putchar
 0150                   .dbline 125
 0150 0BE4              ldi R16,75
 0152 B3DF              xcall _uart_putchar
 0154                   .dbline 126
 0154           ; uart_putchar(0x0d);uart_putchar(0x0a); 
 0154 0DE0              ldi R16,13
 0156 B1DF              xcall _uart_putchar
 0158                   .dbline 126
 0158 0AE0              ldi R16,10
 015A AFDF              xcall _uart_putchar
 015C           L39:
 015C                   .dbline 127
 015C           L40:
 015C                   .dbline 127
 015C           ;      while(!(UCSR0A & 0x20));            //等待结束提示信息回送完成 
 015C 5D9B              sbis 0xb,5
 015E FECF              rjmp L39
 0160                   .dbline 128
 0160           ;   MCUCR = 0x01; 
 0160 81E0              ldi R24,1
 0162 85BF              out 0x35,R24
 0164                   .dbline 129
 0164           ;      MCUCR = 0x00;                    //将中断向量表迁移到应用程序区头部 
 0164 2224              clr R2
 0166 25BE              out 0x35,R2
 0168                   .dbline 130
 0168           ;      RAMPZ = 0x00;                    //RAMPZ/清零初始化 
 0168 2BBE              out 0x3b,R2
 016A                   .dbline 131
 016A           ;      asm("jmp 0x0000\n");                //跳转到Flash的0x0000处,执行用户的应用程序 
 016A 0C940000          jmp 0x0000
 016E                   
 016E                   .dbline -2
 016E                   .dbline 132
 016E           ; } 
 016E           L38:
 016E                   .dbline 0 ; func end
 016E 0895              ret
 0170                   .dbend
 0170                   .dbfunc e main _main fV
 0170           ;     timercount -> y+2
 0170           ;            crc -> R10,R11
 0170           ;         packNO -> R14
 0170           ;              i -> y+0
 0170           ;    bufferPoint -> R12,R13
                        .even
 0170           _main::
 0170 2397              sbiw R28,3
 0172                   .dbline -1
 0172                   .dbline 135
 0172           ; //主程序 
 0172           ; void main(void) 
 0172           ; { 
 0172                   .dbline 136
 0172           ;     int i = 0; 
 0172 0024              clr R0
 0174 1124              clr R1
 0176 1982              std y+1,R1
 0178 0882              std y+0,R0
 017A                   .dbline 137
 017A           ;     unsigned char timercount = 0; 
 017A 0A82              std y+2,R0
 017C                   .dbline 138
 017C           ;     unsigned char packNO = 1; 
 017C EE24              clr R14
 017E E394              inc R14
 0180                   .dbline 139
 0180           ;     int bufferPoint = 0; 
 0180 CC24              clr R12
 0182 DD24              clr R13
 0184                   .dbline 142
 0184           ;     unsigned int crc; 
 0184           ; //初始化M128的USART0 
 0184           ;     UBRR0H = BAUD_H;     
 0184 2224              clr R2
 0186 20929000          sts 144,R2
 018A                   .dbline 143
 018A           ;     UBRR0L = BAUD_L;            //Set/ baud rate 
 018A 89E1              ldi R24,25
 018C 89B9              out 0x9,R24
 018E                   .dbline 144
 018E           ;     UCSR0B = 0x18;            //Enable/ Receiver and Transmitter 
 018E 88E1              ldi R24,24
 0190 8AB9              out 0xa,R24
 0192                   .dbline 145
 0192           ;     UCSR0C = 0x0E;            //Set/ frame format: 8data, 2stop bit 
 0192 8EE0              ldi R24,14
 0194 80939500          sts 149,R24
 0198                   .dbline 147
 0198           ; //初始化M128的T/C0,15ms自动重载 
 0198           ;   OCR0 = 0xEA; 
 0198 8AEE              ldi R24,234
 019A 81BF              out 0x31,R24
 019C                   .dbline 148
 019C           ;   TCCR0 = 0x0F;     
 019C 8FE0              ldi R24,15
 019E 83BF              out 0x33,R24
 01A0 0DC0              xjmp L44
 01A2           L43:
 01A2                   .dbline 151
 01A2                   .dbline 152
 01A2 80E0              ldi R24,<_startupString
 01A4 90E0              ldi R25,>_startupString
 01A6 E881              ldd R30,y+0
 01A8 F981              ldd R31,y+1
 01AA E80F              add R30,R24
 01AC F91F              adc R31,R25
 01AE 0691              elpm R16,Z
 01B0 84DF              xcall _uart_putchar
 01B2                   .dbline 153
 01B2 8881              ldd R24,y+0
 01B4 9981              ldd R25,y+1
 01B6 0196              adiw R24,1
 01B8 9983              std y+1,R25
 01BA 8883              std y+0,R24
 01BC                   .dbline 154
 01BC           L44:
 01BC                   .dbline 150
 01BC           ; //向PC机发送开始提示信息 
 01BC           ;     while(startupString[i]!='\0') 
 01BC 80E0              ldi R24,<_startupString
 01BE 90E0              ldi R25,>_startupString
 01C0 E881              ldd R30,y+0
 01C2 F981              ldd R31,y+1
 01C4 E80F              add R30,R24
 01C6 F91F              adc R31,R25
 01C8 E691              elpm R30,Z
 01CA EE23              tst R30
 01CC 51F7              brne L43
 01CE 14C0              xjmp L47
 01D0           L46:
 01D0                   .dbline 157
 01D0           ;     { 
 01D0           ;         uart_putchar(startupString[i]); 
 01D0           ;         i++; 

⌨️ 快捷键说明

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