📄 soc_test.lis
字号:
015E .dbline 195
015E ; else
015E ; {
015E .dbline 196
015E ; haveError=0x02; //haveError索引(2),开始字出错
015E 82E0 ldi R24,2
0160 80930700 sts _haveError,R24
0164 .dbline 197
0164 ; }
0164 .dbline 198
0164 ; }
0164 6BC0 xjmp L29
0166 L32:
0166 .dbline 199
0166 ; else if(1==buf_index && BEGIN_WORD==beginWord)
0166 80910500 lds R24,_buf_index
016A 8130 cpi R24,1
016C C1F4 brne L36
016E 80910A00 lds R24,_beginWord
0172 8E37 cpi R24,126
0174 A1F4 brne L36
0176 .dbline 200
0176 ; { //索引为1,且已经起始
0176 .dbline 201
0176 ; if(BEGIN_WORD==buffer[1]) //若第二个数据也是起始字,删除一个
0176 80912000 lds R24,_buffer+1
017A 8E37 cpi R24,126
017C 39F4 brne L38
017E .dbline 202
017E ; {
017E .dbline 203
017E ; buf_index=0; //索引变为0
017E 2224 clr R2
0180 20920500 sts _buf_index,R2
0184 .dbline 204
0184 ; buffer[1]=0x01; //清除第二个接收到的起始字
0184 81E0 ldi R24,1
0186 80932000 sts _buffer+1,R24
018A .dbline 205
018A ; }
018A 58C0 xjmp L29
018C L38:
018C .dbline 207
018C ; //判断所收命令是否归本片AVR处理
018C ; else if(ADDRESS_WORD!=buffer[1])
018C 80912000 lds R24,_buffer+1
0190 8F35 cpi R24,95
0192 09F4 brne X1
0194 53C0 xjmp L29
0196 X1:
0196 .dbline 208
0196 ; {
0196 .dbline 209
0196 ; haveError=0x03; //haveError索引(3),地址不对,重新接收
0196 83E0 ldi R24,3
0198 80930700 sts _haveError,R24
019C .dbline 210
019C ; }
019C .dbline 211
019C ; }
019C 4FC0 xjmp L29
019E L36:
019E .dbline 212
019E ; else if(haveSpeWord) //这里用else,是因为第一个字,第二个字都不可能是转义字符
019E 20900600 lds R2,_haveSpeWord
01A2 2220 tst R2
01A4 09F4 brne X2
01A6 39C0 xjmp L45
01A8 X2:
01A8 .dbline 213
01A8 ; {//含有转义字符,做转义操作,若数据错误,则设置错误标志,重新接收
01A8 .dbline 214
01A8 ; haveSpeWord=0x00; //清除标志
01A8 2224 clr R2
01AA 20920600 sts _haveSpeWord,R2
01AE .dbline 215
01AE ; if(CHANGE_WORDL1==buffer[buf_index])
01AE 80E0 ldi R24,<_buffer
01B0 90E0 ldi R25,>_buffer
01B2 E0910500 lds R30,_buf_index
01B6 FF27 clr R31
01B8 E80F add R30,R24
01BA F91F adc R31,R25
01BC 8081 ldd R24,z+0
01BE 8E35 cpi R24,94
01C0 79F4 brne L47
01C2 .dbline 216
01C2 ; {
01C2 .dbline 217
01C2 ; buffer[buf_index-1]=0x7E; //若是7D 5E -> 7E
01C2 80E0 ldi R24,<_buffer-1
01C4 90E0 ldi R25,>_buffer-1
01C6 E0910500 lds R30,_buf_index
01CA FF27 clr R31
01CC E80F add R30,R24
01CE F91F adc R31,R25
01D0 8EE7 ldi R24,126
01D2 8083 std z+0,R24
01D4 .dbline 218
01D4 ; buf_index-=1; //buf_index减一
01D4 80910500 lds R24,_buf_index
01D8 8150 subi R24,1
01DA 80930500 sts _buf_index,R24
01DE .dbline 219
01DE ; }
01DE 2EC0 xjmp L29
01E0 L47:
01E0 .dbline 220
01E0 ; else if(CHANGE_WORDL2==buffer[buf_index])
01E0 80E0 ldi R24,<_buffer
01E2 90E0 ldi R25,>_buffer
01E4 E0910500 lds R30,_buf_index
01E8 FF27 clr R31
01EA E80F add R30,R24
01EC F91F adc R31,R25
01EE 8081 ldd R24,z+0
01F0 8D35 cpi R24,93
01F2 79F4 brne L50
01F4 .dbline 221
01F4 ; {
01F4 .dbline 222
01F4 ; buffer[buf_index-1]=0x7D; //若是7D 5D -> 7D
01F4 80E0 ldi R24,<_buffer-1
01F6 90E0 ldi R25,>_buffer-1
01F8 E0910500 lds R30,_buf_index
01FC FF27 clr R31
01FE E80F add R30,R24
0200 F91F adc R31,R25
0202 8DE7 ldi R24,125
0204 8083 std z+0,R24
0206 .dbline 223
0206 ; buf_index-=1; //buf_index减一
0206 80910500 lds R24,_buf_index
020A 8150 subi R24,1
020C 80930500 sts _buf_index,R24
0210 .dbline 224
0210 ; }
0210 15C0 xjmp L29
0212 L50:
0212 .dbline 226
0212 ; else
0212 ; {
0212 .dbline 227
0212 ; haveError=0x04; //haveError索引(4),转义字符出错
0212 84E0 ldi R24,4
0214 80930700 sts _haveError,R24
0218 .dbline 228
0218 ; }
0218 .dbline 229
0218 ; }
0218 11C0 xjmp L29
021A L45:
021A .dbline 230
021A ; else if(0x7D==buffer[buf_index])
021A 80E0 ldi R24,<_buffer
021C 90E0 ldi R25,>_buffer
021E E0910500 lds R30,_buf_index
0222 FF27 clr R31
0224 E80F add R30,R24
0226 F91F adc R31,R25
0228 8081 ldd R24,z+0
022A 8D37 cpi R24,125
022C 39F4 brne L29
022E .dbline 231
022E ; {
022E .dbline 232
022E ; haveSpeWord=0x01; //接收到转义字符
022E 81E0 ldi R24,1
0230 80930600 sts _haveSpeWord,R24
0234 .dbline 233
0234 ; }
0234 .dbline 234
0234 ; }
0234 03C0 xjmp L29
0236 L28:
0236 .dbline 236
0236 ; else
0236 ; {
0236 .dbline 237
0236 ; haveError=0x01; //haveError索引(1),超出了接收长度
0236 81E0 ldi R24,1
0238 80930700 sts _haveError,R24
023C .dbline 238
023C ; }
023C L29:
023C .dbline 240
023C ; //跳出时做错误判断
023C ; if(haveError!=0) //如果发现有错误
023C 20900700 lds R2,_haveError
0240 2220 tst R2
0242 71F0 breq L55
0244 .dbline 241
0244 ; { //如果有错误,重新接收
0244 .dbline 242
0244 ; buffer[0]=0x00; //第一个字符清零
0244 2224 clr R2
0246 20921F00 sts _buffer,R2
024A .dbline 243
024A ; buf_index=0; //buffer索引清零,继续接收
024A 20920500 sts _buf_index,R2
024E .dbline 244
024E ; beginWord=0x00; //为开始做准备
024E 20920A00 sts _beginWord,R2
0252 .dbline 245
0252 ; endWord=0x00; //结束字还没收到
0252 20920900 sts _endWord,R2
0256 .dbline 246
0256 ; haveSpeWord=0; //清接收转义字符标志
0256 20920600 sts _haveSpeWord,R2
025A .dbline 247
025A ; haveError=0; //清错误标志
025A 20920700 sts _haveError,R2
025E .dbline 248
025E ; }
025E 05C0 xjmp L56
0260 L55:
0260 .dbline 250
0260 .dbline 251
0260 80910500 lds R24,_buf_index
0264 8F5F subi R24,255 ; addi 1
0266 80930500 sts _buf_index,R24
026A .dbline 252
026A L56:
026A .dbline -2
026A .dbline 253
026A ; else
026A ; { //若没有错误
026A ; buf_index+=1; //buffer索引加1
026A ; }
026A ; }//end usart0_receive
026A L27:
026A 2990 ld R2,y+
026C 2FBE out 0x3f,R2
026E F991 ld R31,y+
0270 E991 ld R30,y+
0272 9991 ld R25,y+
0274 8991 ld R24,y+
0276 0991 ld R16,y+
0278 2990 ld R2,y+
027A .dbline 0 ; func end
027A 1895 reti
027C .dbsym r revChar 16 c
027C .dbend
027C .dbfunc e Write_bus_data _Write_bus_data fV
027C ; bus_data_H -> R20
027C ; bus_data_L -> R22
027C ; bus_data -> R22,R23
.even
027C _Write_bus_data::
027C 0E940000 xcall push_gset2
0280 B801 movw R22,R16
0282 .dbline -1
0282 .dbline 259
0282 ;
0282 ; /*********************************************************
0282 ; 向命令总线写命令数据
0282 ; *********************************************************/
0282 ; void Write_bus_data(short bus_data)
0282 ; {unsigned char bus_data_L;
0282 .dbline 261
0282 ; unsigned char bus_data_H;
0282 ; bus_data_H = bus_data/256;
0282 20E0 ldi R18,256
0284 31E0 ldi R19,1
0286 8B01 movw R16,R22
0288 0E940000 xcall div16s
028C 402F mov R20,R16
028E .dbline 262
028E ; bus_data_L = bus_data%256;
028E 20E0 ldi R18,256
0290 31E0 ldi R19,1
0292 8B01 movw R16,R22
0294 0E940000 xcall mod16s
0298 602F mov R22,R16
029A .dbline 263
029A ; INSTRUCT_BYTE_LOW = bus_data_L;
029A 6093FF11 sts 4607,R22
029E .dbline 264
029E ; INSTRUCT_BYTE_HIG = bus_data_H;
029E 4093FF12 sts 4863,R20
02A2 .dbline -2
02A2 .dbline 265
02A2 ; }//end Write_bus_data
02A2 L57:
02A2 0E940000 xcall pop_gset2
02A6 .dbline 0 ; func end
02A6 0895 ret
02A8 .dbsym r bus_data_H 20 c
02A8 .dbsym r bus_data_L 22 c
02A8 .dbsym r bus_data 22 S
02A8 .dbend
02A8 .dbfunc e Write_bus_add _Write_bus_add fV
02A8 ; bus_add -> R16
.even
02A8 _Write_bus_add::
02A8 .dbline -1
02A8 .dbline 271
02A8 ; /*********************************************************
02A8 ; 向命令总线写命令地址
02A8 ; *********************************************************/
02A8 ;
02A8 ; void Write_bus_add(unsigned char bus_add)
02A8 ; {INSTRUCT_ADD = bus_add;
02A8 .dbline 271
02A8 0093FF13 sts 5119,R16
02AC .dbline -2
02AC .dbline 272
02AC ; }//end Write_bus_add
02AC L58:
02AC .dbline 0 ; func end
02AC 0895 ret
02AE .dbsym r bus_add 16 c
02AE .dbend
02AE .dbfunc e send_instruct _send_instruct fV
02AE ; address -> R20
02AE ; command -> R22,R23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -