📄 main.lis
字号:
00DC ; else state = ST_START;
00DC 40E0 ldi R20,61440
00DE 50EF ldi R21,240
00E0 .dbline 151
00E0 ; }
00E0 23C0 xjmp L21
00E2 L20:
00E2 .dbline 152
00E2 ; else if (state==ST_GET_DATA)
00E2 4530 cpi R20,5
00E4 E0EF ldi R30,240
00E6 5E07 cpc R21,R30
00E8 A9F4 brne L24
00EA X9:
00EA .dbline 153
00EA ; {
00EA .dbline 154
00EA ; msg_buffer[i++] = t;
00EA E880 ldd R14,y+0
00EC F980 ldd R15,y+1
00EE C701 movw R24,R14
00F0 0196 adiw R24,1
00F2 9983 std y+1,R25
00F4 8883 std y+0,R24
00F6 80E0 ldi R24,<_msg_buffer
00F8 90E0 ldi R25,>_msg_buffer
00FA F701 movw R30,R14
00FC E80F add R30,R24
00FE F91F adc R31,R25
0100 A082 std z+0,R10
0102 .dbline 155
0102 ; checksum ^= t;
0102 6A25 eor R22,R10
0104 .dbline 156
0104 ; if (i==msg_size)
0104 0880 ldd R0,y+0
0106 1980 ldd R1,y+1
0108 0C14 cp R0,R12
010A 1D04 cpc R1,R13
010C 69F4 brne L25
010E X10:
010E .dbline 157
010E ; {
010E .dbline 158
010E ; state = ST_GET_CHECK;
010E 46E0 ldi R20,61446
0110 50EF ldi R21,240
0112 .dbline 159
0112 ; }
0112 .dbline 160
0112 ; }
0112 0AC0 xjmp L25
0114 L24:
0114 .dbline 161
0114 ; else if (state==ST_GET_CHECK)
0114 4630 cpi R20,6
0116 E0EF ldi R30,240
0118 5E07 cpc R21,R30
011A 31F4 brne L28
011C X11:
011C .dbline 162
011C ; {
011C .dbline 163
011C ; if (t==checksum)
011C A616 cp R10,R22
011E 11F4 brne L30
0120 X12:
0120 .dbline 164
0120 ; {
0120 .dbline 165
0120 ; process_command(seq_num);
0120 0A81 ldd R16,y+2
0122 14D0 xcall _process_command
0124 .dbline 166
0124 ; }
0124 L30:
0124 .dbline 168
0124 ;
0124 ; state = ST_START;
0124 40E0 ldi R20,61440
0126 50EF ldi R21,240
0128 .dbline 169
0128 ; }
0128 L28:
0128 L25:
0128 L21:
0128 L19:
0128 L17:
0128 L15:
0128 L11:
0128 .dbline 171
0128 ;
0128 ; }//if(rec_data!=-1)
0128 L8:
0128 .dbline 172
0128 ; }//while(2)
0128 L6:
0128 .dbline 105
0128 93CF xjmp L5
012A X13:
012A .dbline -2
012A L2:
012A .dbline 0 ; func end
012A 2496 adiw R28,4
012C 0895 ret
012E .dbsym r rec_data1 10 I
012E .dbsym r t0 10 c
012E .dbsym r state0 20 i
012E .dbsym r checksum0 22 c
012E .dbsym r msg_size0 12 i
012E .dbsym l seq_num0 2 c
012E .dbsym l i0 0 i
012E .dbend
012E .dbfunc e adc_get _adc_get fc
012E ; n -> R16
.even
012E _adc_get::
012E .dbline -1
012E .dbline 186
012E ;
012E ; return 0;
012E ;
012E ; }
012E ;
012E ; /**
012E ; Returns the value of the selected adc channel
012E ;
012E ; @param n Number of ADC channel
012E ;
012E ; @return Value of ADC channel
012E ; */
012E ; unsigned char adc_get(char n)
012E ; {
012E .dbline 187
012E ; ADMUX&=0xF0;
012E 87B1 in R24,0x7
0130 807F andi R24,240
0132 87B9 out 0x7,R24
0134 .dbline 188
0134 ; ADMUX|=n&0x7;
0134 802F mov R24,R16
0136 8770 andi R24,7
0138 27B0 in R2,0x7
013A 282A or R2,R24
013C 27B8 out 0x7,R2
013E L33:
013E .dbline 190
013E ;
013E ; while (ADCSRA&0x40);
013E L34:
013E .dbline 190
013E 3699 sbic 0x6,6
0140 FECF rjmp L33
0142 X16:
0142 .dbline 191
0142 ; ADCSRA|=(1<<ADSC);
0142 369A sbi 0x6,6
0144 L36:
0144 .dbline 192
0144 ; while (ADCSRA&0x40);
0144 L37:
0144 .dbline 192
0144 3699 sbic 0x6,6
0146 FECF rjmp L36
0148 X17:
0148 .dbline 194
0148 ;
0148 ; return ADCH;
0148 05B1 in R16,0x5
014A .dbline -2
014A L32:
014A .dbline 0 ; func end
014A 0895 ret
014C .dbsym r n 16 c
014C .dbend
014C .dbfunc e process_command _process_command fV
014C ; bytes_to_transmit0 -> y+12
014C ; rx_from0 -> y+14
014C ; rx_bytes0 -> R12
014C ; tx_bytes0 -> y+10
014C ; Reg9 -> R12,R13
014C ; Reg80 -> y+14
014C ; Reg26 -> y+16
014C ; Reg48 -> R12,R13
014C ; Reg17 -> y+16
014C ; Reg39 -> R12,R13
014C ; Reg65 -> y+16
014C ; Reg72 -> y+16
014C ; Reg59 -> R12,R13
014C ; Reg29 -> y+20
014C ; Reg12 -> y+16
014C ; i29 -> R12,R13
014C ; tmp47 -> R14
014C ; i23 -> R12,R13
014C ; i20 -> R14,R15
014C ; tmp39 -> R14
014C ; i16 -> R14,R15
014C ; mode7 -> y+12
014C ; block_size6 -> y+14
014C ; i13 -> R14,R15
014C ; tmp37 -> y+14
014C ; block_size4 -> y+12
014C ; i10 -> R14,R15
014C ; tmp31 -> R12
014C ; i6 -> R14,R15
014C ; mode0 -> y+14
014C ; block_size2 -> y+12
014C ; i3 -> R12,R13
014C ; tmp29 -> y+12
014C ; block_size0 -> y+14
014C ; tmp24 -> R14
014C ; tmp23 -> R14
014C ; tmp22 -> R14
014C ; tmp21 -> R14
014C ; tmp16 -> R14
014C ; tmp15 -> R14
014C ; tmp14 -> R14
014C ; tmp13 -> R14
014C ; tmp12 -> R14
014C ; tmp11 -> R14
014C ; tmp10 -> R14
014C ; tmp9 -> R14
014C ; tmp8 -> R14
014C ; tmp7 -> R14
014C ; tmp6 -> R14
014C ; tmp5 -> R14
014C ; tmp2 -> R12
014C ; num_bytes1 -> R10,R11
014C ; i0 -> R14,R15
014C ; cmd0 -> y+10
014C ; start_address0 -> y+6
014C ; polling_address0 -> y+2
014C ; tmp0 -> y+18
014C ; seq_num -> y+32
.even
014C _process_command::
014C 1A93 st -y,r17
014E 0A93 st -y,r16
0150 0E940000 xcall push_xgsetF0FC
0154 6697 sbiw R28,22
0156 .dbline -1
0156 .dbline 203
0156 ; }
0156 ;
0156 ; /**
0156 ; Processes a command packet received in main loop and located in the global buffer
0156 ;
0156 ; @param seq_num The sequence number of the command packet
0156 ; */
0156 ; void process_command(unsigned char seq_num)
0156 ; {
0156 .dbline 205
0156 ; unsigned char cmd;
0156 ; unsigned char tmp=0;
0156 0024 clr R0
0158 0A8A std y+18,R0
015A .dbline 209
015A ; unsigned char mode;
015A ; unsigned int block_size;
015A ; unsigned int i;
015A ; unsigned int num_bytes=0;
015A AA24 clr R10
015C BB24 clr R11
015E .dbline 210
015E ; unsigned long polling_address=0;
015E 40E0 ldi R20,0
0160 50E0 ldi R21,0
0162 60E0 ldi R22,0
0164 70E0 ldi R23,0
0166 4A83 std y+2,R20
0168 5B83 std y+3,R21
016A 6C83 std y+4,R22
016C 7D83 std y+5,R23
016E .dbline 211
016E ; unsigned long start_address = address;
016E 40900200 lds R4,_address+2
0172 50900300 lds R5,_address+2+1
0176 20900000 lds R2,_address
017A 30900100 lds R3,_address+1
017E 2E82 std y+6,R2
0180 3F82 std y+7,R3
0182 4886 std y+8,R4
0184 5986 std y+9,R5
0186 .dbline 213
0186 ;
0186 ; cmd = msg_buffer[0];
0186 20900800 lds R2,_msg_buffer
018A 2A86 std y+10,R2
018C .dbline 218
018C ;
018C ; //////////////////////////////////////
018C ; //CMD_SIGN_ON
018C ; //////////////////////////////////////
018C ; if (cmd==CMD_SIGN_ON)
018C 822D mov R24,R2
018E 8130 cpi R24,1
0190 A9F4 brne L40
0192 X18:
0192 .dbline 219
0192 ; {
0192 .dbline 220
0192 ; num_bytes = 11;
0192 8BE0 ldi R24,11
0194 90E0 ldi R25,0
0196 5C01 movw R10,R24
0198 .dbline 221
0198 ; msg_buffer[0] = CMD_SIGN_ON;
0198 81E0 ldi R24,1
019A 80930800 sts _msg_buffer,R24
019E .dbline 222
019E ; msg_buffer[1] = STATUS_CMD_OK;
019E 2224 clr R2
01A0 20920900 sts _msg_buffer+1,R2
01A4 .dbline 223
01A4 ; msg_buffer[2] = 8;
01A4 88E0 ldi R24,8
01A6 80930A00 sts _msg_buffer+2,R24
01AA .dbline 224
01AA ; memcpy(msg_buffer+3,"AVRISP_2",8);
01AA 9983 std y+1,R25
01AC 8883 std y+0,R24
01AE 20E0 ldi R18,<L45
01B0 30E0 ldi R19,>L45
01B2 00E0 ldi R16,<_msg_buffer+3
01B4 10E0 ldi R17,>_msg_buffer+3
01B6 0E940000 xcall _memcpy
01BA .dbline 225
01BA ; }
01BA FDC7 xjmp L41
01BC L40:
01BC .dbline 229
01BC ; //////////////////////////////////////
01BC ; //CMD_SET_PARAMETER
01BC ; //////////////////////////////////////
01BC ; else if (cmd==CMD_SET_PARAMETER)
01BC 8A85 ldd R24,y+10
01BE 8230 cpi R24,2
01C0 09F0 breq X135
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -