📄 atemga128iap.lis
字号:
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 + -