📄 main.lis
字号:
00E2 ; if(t==TOKEN) {
00E2 4E30 cpi R20,14
00E4 49F4 brne L22
00E6 .dbline 114
00E6 .dbline 115
00E6 ; state = ST_GET_DATA;
00E6 85E0 ldi R24,61445
00E8 90EF ldi R25,240
00EA 7C01 movw R14,R24
00EC .dbline 116
00EC ; checksum ^= t;
00EC C426 eor R12,R20
00EE .dbline 117
00EE ; i=0;
00EE 0024 clr R0
00F0 1124 clr R1
00F2 1A82 std y+2,R1
00F4 0982 std y+1,R0
00F6 .dbline 118
00F6 ; }
00F6 2BC0 rjmp L21
00F8 L22:
00F8 .dbline 119
00F8 ; else {
00F8 .dbline 120
00F8 ; state = ST_START;
00F8 80E0 ldi R24,61440
00FA 90EF ldi R25,240
00FC 7C01 movw R14,R24
00FE .dbline 121
00FE ; }
00FE .dbline 122
00FE ; }
00FE 27C0 rjmp L21
0100 L20:
0100 .dbline 123
0100 ; else {
0100 .dbline 124
0100 ; if(state==ST_GET_DATA) {
0100 C701 movw R24,R14
0102 8530 cpi R24,5
0104 E0EF ldi R30,240
0106 9E07 cpc R25,R30
0108 B1F4 brne L24
010A .dbline 124
010A .dbline 125
010A ; msg_buffer[i++] = t;
010A 2980 ldd R2,y+1
010C 3A80 ldd R3,y+2
010E C101 movw R24,R2
0110 0196 adiw R24,1
0112 9A83 std y+2,R25
0114 8983 std y+1,R24
0116 80E0 ldi R24,<_msg_buffer
0118 90E0 ldi R25,>_msg_buffer
011A F101 movw R30,R2
011C E80F add R30,R24
011E F91F adc R31,R25
0120 4083 std z+0,R20
0122 .dbline 126
0122 ; checksum ^= t;
0122 C426 eor R12,R20
0124 .dbline 127
0124 ; if(i==msg_size) {
0124 0980 ldd R0,y+1
0126 1A80 ldd R1,y+2
0128 0616 cp R0,R22
012A 1706 cpc R1,R23
012C 81F4 brne L25
012E .dbline 127
012E .dbline 128
012E ; state = ST_GET_CHECK;
012E 86E0 ldi R24,61446
0130 90EF ldi R25,240
0132 7C01 movw R14,R24
0134 .dbline 129
0134 ; }
0134 .dbline 130
0134 ; }
0134 0CC0 rjmp L25
0136 L24:
0136 .dbline 131
0136 ; else {
0136 .dbline 132
0136 ; if(state==ST_GET_CHECK) {
0136 C701 movw R24,R14
0138 8630 cpi R24,6
013A E0EF ldi R30,240
013C 9E07 cpc R25,R30
013E 39F4 brne L28
0140 .dbline 132
0140 .dbline 133
0140 ; if(t==checksum) {
0140 4C15 cp R20,R12
0142 11F4 brne L30
0144 .dbline 133
0144 .dbline 134
0144 ; process_command(seq_num);
0144 0881 ldd R16,y+0
0146 22D0 rcall _process_command
0148 .dbline 135
0148 ; }
0148 L30:
0148 .dbline 136
0148 ; state = ST_START;
0148 80E0 ldi R24,61440
014A 90EF ldi R25,240
014C 7C01 movw R14,R24
014E .dbline 137
014E ; }
014E L28:
014E .dbline 138
014E ; }
014E L25:
014E .dbline 139
014E ; }
014E L21:
014E .dbline 140
014E ; }
014E L19:
014E .dbline 141
014E ; }
014E L17:
014E .dbline 142
014E ; }
014E L15:
014E .dbline 143
014E ; }
014E L11:
014E .dbline 144
014E ; }
014E L8:
014E .dbline 145
014E L6:
014E .dbline 82
014E 85CF rjmp L5
0150 X0:
0150 .dbline -2
0150 L2:
0150 2396 adiw R28,3
0152 .dbline 0 ; func end
0152 0895 ret
0154 .dbsym l i 1 i
0154 .dbsym r msg_size 22 i
0154 .dbsym l seq_num 0 c
0154 .dbsym r checksum 12 c
0154 .dbsym r t 20 c
0154 .dbsym r state 14 i
0154 .dbsym r rec_data 10 I
0154 .dbend
0154 .dbfunc e adc_get _adc_get fc
0154 ; n -> R16
.even
0154 _adc_get::
0154 .dbline -1
0154 .dbline 156
0154 ; }
0154 ; }
0154 ;
0154 ; /**
0154 ; Returns the value of the selected adc channel
0154 ;
0154 ; @param n Number of ADC channel
0154 ;
0154 ; @return Value of ADC channel
0154 ; */
0154 ; unsigned char adc_get(char n)
0154 ; {
0154 .dbline 157
0154 ; ADMUX&=0xF0;
0154 80917C00 lds R24,124
0158 807F andi R24,240
015A 80937C00 sts 124,R24
015E .dbline 158
015E ; ADMUX|=n&0x7;
015E 802F mov R24,R16
0160 8770 andi R24,7
0162 20907C00 lds R2,124
0166 282A or R2,R24
0168 20927C00 sts 124,R2
016C L33:
016C .dbline 160
016C L34:
016C .dbline 160
016C ;
016C ; while(ADCSRA&0x40);
016C 20907A00 lds R2,122
0170 26FC sbrc R2,6
0172 FCCF rjmp L33
0174 .dbline 161
0174 ; ADCSRA|=(1<<ADSC);
0174 80917A00 lds R24,122
0178 8064 ori R24,64
017A 80937A00 sts 122,R24
017E L36:
017E .dbline 162
017E L37:
017E .dbline 162
017E ; while(ADCSRA&0x40);
017E 20907A00 lds R2,122
0182 26FC sbrc R2,6
0184 FCCF rjmp L36
0186 .dbline 164
0186 ;
0186 ; return ADCH;
0186 00917900 lds R16,121
018A .dbline -2
018A L32:
018A .dbline 0 ; func end
018A 0895 ret
018C .dbsym r n 16 c
018C .dbend
018C .dbfunc e process_command _process_command fV
018C ; mode -> R14
018C ; block_size -> R10,R11
018C ; start_address -> y+6
018C ; polling_address -> y+2
018C ; tmp -> y+13
018C ; cmd -> y+12
018C ; num_bytes -> y+10
018C ; i -> R12,R13
018C ; seq_num -> y+24
.even
018C _process_command::
018C 1A93 st -y,r17
018E 0A93 st -y,r16
0190 00D0 rcall push_gset5
0192 2E97 sbiw R28,14
0194 .dbline -1
0194 .dbline 173
0194 ; }
0194 ;
0194 ; /**
0194 ; Processes a command packet received in main loop and located in the global buffer
0194 ;
0194 ; @param seq_num The sequence number of the command packet
0194 ; */
0194 ; void process_command(unsigned char seq_num)
0194 ; {
0194 .dbline 175
0194 ; unsigned char cmd;
0194 ; unsigned char tmp=0;
0194 0024 clr R0
0196 0D86 std y+13,R0
0198 .dbline 179
0198 ; unsigned char mode;
0198 ; unsigned int block_size;
0198 ; unsigned int i;
0198 ; unsigned int num_bytes=0;
0198 1124 clr R1
019A 1B86 std y+11,R1
019C 0A86 std y+10,R0
019E .dbline 180
019E ; unsigned long polling_address=0;
019E 40E0 ldi R20,0
01A0 50E0 ldi R21,0
01A2 60E0 ldi R22,0
01A4 70E0 ldi R23,0
01A6 FE01 movw R30,R28
01A8 4283 std z+2,R20
01AA 5383 std z+3,R21
01AC 6483 std z+4,R22
01AE 7583 std z+5,R23
01B0 .dbline 181
01B0 ; unsigned long start_address = address;
01B0 40900200 lds R4,_address+2
01B4 50900300 lds R5,_address+2+1
01B8 20900000 lds R2,_address
01BC 30900100 lds R3,_address+1
01C0 FE01 movw R30,R28
01C2 2682 std z+6,R2
01C4 3782 std z+7,R3
01C6 4086 std z+8,R4
01C8 5186 std z+9,R5
01CA .dbline 183
01CA ;
01CA ; cmd = msg_buffer[0];
01CA 20900800 lds R2,_msg_buffer
01CE 2C86 std y+12,R2
01D0 .dbline 188
01D0 ;
01D0 ; //////////////////////////////////////
01D0 ; //CMD_SIGN_ON
01D0 ; //////////////////////////////////////
01D0 ; if(cmd==CMD_SIGN_ON)
01D0 822D mov R24,R2
01D2 8130 cpi R24,1
01D4 A9F4 brne L40
01D6 .dbline 189
01D6 ; {
01D6 .dbline 190
01D6 ; num_bytes = 11;
01D6 8BE0 ldi R24,11
01D8 90E0 ldi R25,0
01DA 9B87 std y+11,R25
01DC 8A87 std y+10,R24
01DE .dbline 191
01DE ; msg_buffer[0] = CMD_SIGN_ON;
01DE 81E0 ldi R24,1
01E0 80930800 sts _msg_buffer,R24
01E4 .dbline 192
01E4 ; msg_buffer[1] = STATUS_CMD_OK;
01E4 2224 clr R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -