📄 init.lis
字号:
020A ; if ((LO_COUNT_SAVE>MAXDURATION)||(LO_COUNT_SAVE==0))//如果低电平大于限定值
020A E0E0 ldi R30,<_MAXDURATION
020C F0E0 ldi R31,>_MAXDURATION
020E E491 lpm R30,Z
0210 20900000 lds R2,_LO_COUNT_SAVE
0214 E215 cp R30,R2
0216 10F0 brlo L40
0218 2220 tst R2
021A 69F4 brne L38
021C L40:
021C .dbline 189
021C ; {//3-1
021C .dbline 190
021C ; BITCOUNTER=CODELANGTH;//代码是错误的
021C E0E0 ldi R30,<_CODELANGTH
021E F0E0 ldi R31,>_CODELANGTH
0220 E491 lpm R30,Z
0222 E0930000 sts _BITCOUNTER,R30
0226 .dbline 191
0226 ; data[0]=0;
0226 2224 clr R2
0228 20920000 sts _data,R2
022C .dbline 192
022C ; data[1]=0;
022C 20920100 sts _data+1,R2
0230 .dbline 193
0230 ; data[2]=0;
0230 20920200 sts _data+2,R2
0234 .dbline 194
0234 ; return;//跳出中断
0234 B8C0 rjmp L20
0236 L38:
0236 .dbline 196
0236 ; }//3-1
0236 ; }//3
0236 .dbline 197
0236 ; if (HI_COUNT_SAVE<LO_COUNT_SAVE)//为1的数据存贮
0236 20900000 lds R2,_LO_COUNT_SAVE
023A 30900000 lds R3,_HI_COUNT_SAVE
023E 3214 cp R3,R2
0240 08F0 brlo X6
0242 51C0 rjmp L43
0244 X6:
0244 .dbline 198
0244 ; {//5
0244 .dbline 199
0244 ; i=data[2]&0x80; //保存第七位
0244 60910200 lds R22,_data+2
0248 6078 andi R22,128
024A .dbline 200
024A ; data[2]<<=1;
024A 20900200 lds R2,_data+2
024E 220C lsl R2
0250 20920200 sts _data+2,R2
0254 .dbline 201
0254 ; data[2]+=1;
0254 822D mov R24,R2
0256 8F5F subi R24,255 ; addi 1
0258 80930200 sts _data+2,R24
025C .dbline 202
025C ; j=data[1]&0x80; //保存第七位
025C 40910100 lds R20,_data+1
0260 4078 andi R20,128
0262 .dbline 203
0262 ; if(i){data[1]<<=1;data[1]+=1;}
0262 6623 tst R22
0264 51F0 breq L49
0266 .dbline 203
0266 .dbline 203
0266 20900100 lds R2,_data+1
026A 220C lsl R2
026C 20920100 sts _data+1,R2
0270 .dbline 203
0270 822D mov R24,R2
0272 8F5F subi R24,255 ; addi 1
0274 80930100 sts _data+1,R24
0278 .dbline 203
0278 05C0 rjmp L50
027A L49:
027A .dbline 204
027A ; else data[1]<<=1;
027A 20900100 lds R2,_data+1
027E 220C lsl R2
0280 20920100 sts _data+1,R2
0284 L50:
0284 .dbline 205
0284 ; if(j){data[0]<<=1;data[0]+=1;}
0284 4423 tst R20
0286 51F0 breq L54
0288 .dbline 205
0288 .dbline 205
0288 20900000 lds R2,_data
028C 220C lsl R2
028E 20920000 sts _data,R2
0292 .dbline 205
0292 822D mov R24,R2
0294 8F5F subi R24,255 ; addi 1
0296 80930000 sts _data,R24
029A .dbline 205
029A 05C0 rjmp L55
029C L54:
029C .dbline 206
029C ; else data[0]<<=1;
029C 20900000 lds R2,_data
02A0 220C lsl R2
02A2 20920000 sts _data,R2
02A6 L55:
02A6 .dbline 207
02A6 ; BITCOUNTER--;
02A6 80910000 lds R24,_BITCOUNTER
02AA 8150 subi R24,1
02AC 80930000 sts _BITCOUNTER,R24
02B0 .dbline 208
02B0 ; if (BITCOUNTER==0)//解码完成
02B0 8823 tst R24
02B2 09F0 breq X7
02B4 78C0 rjmp L20
02B6 X7:
02B6 .dbline 209
02B6 ; {//5-3
02B6 .dbline 210
02B6 ; if(CRC3(data,3)==0)
02B6 23E0 ldi R18,3
02B8 00E0 ldi R16,<_data
02BA 10E0 ldi R17,>_data
02BC 16DF rcall _CRC3
02BE 0023 tst R16
02C0 09F0 breq X8
02C2 5CC0 rjmp L61
02C4 X8:
02C4 .dbline 211
02C4 ; {//n
02C4 .dbline 212
02C4 ; DECODER_FLAG_H;
02C4 80910000 lds R24,_flag
02C8 8460 ori R24,4
02CA 80930000 sts _flag,R24
02CE .dbline 213
02CE ; DECODER_EN_L;
02CE 8D7F andi R24,253
02D0 80930000 sts _flag,R24
02D4 .dbline 214
02D4 ; eaddr0=data[0];
02D4 20900000 lds R2,_data
02D8 20920000 sts _eaddr0,R2
02DC .dbline 215
02DC ; eaddr1=data[1];
02DC 20900100 lds R2,_data+1
02E0 20920000 sts _eaddr1,R2
02E4 .dbline 216
02E4 ; return;
02E4 60C0 rjmp L20
02E6 X1:
02E6 .dbline 219
02E6 ; }//n
02E6 ; else //解码错误
02E6 ; {
02E6 .dbline 220
02E6 ; goto give_up;
02E6 .dbline 223
02E6 ; }
02E6 ; }//5-3
02E6 ; return;
02E6 L43:
02E6 .dbline 226
02E6 ; }//5
02E6 ; else //为0的数据存贮
02E6 ; {//6
02E6 .dbline 227
02E6 ; i=data[2]&0x80; //保存第七位
02E6 60910200 lds R22,_data+2
02EA 6078 andi R22,128
02EC .dbline 228
02EC ; data[2]<<=1;
02EC 20900200 lds R2,_data+2
02F0 220C lsl R2
02F2 20920200 sts _data+2,R2
02F6 .dbline 229
02F6 ; j=data[1]&0x80; //保存第七位
02F6 40910100 lds R20,_data+1
02FA 4078 andi R20,128
02FC .dbline 230
02FC ; if(i){data[1]<<=1;data[1]+=1;}
02FC 6623 tst R22
02FE 51F0 breq L65
0300 .dbline 230
0300 .dbline 230
0300 20900100 lds R2,_data+1
0304 220C lsl R2
0306 20920100 sts _data+1,R2
030A .dbline 230
030A 822D mov R24,R2
030C 8F5F subi R24,255 ; addi 1
030E 80930100 sts _data+1,R24
0312 .dbline 230
0312 05C0 rjmp L66
0314 L65:
0314 .dbline 231
0314 ; else data[1]<<=1;
0314 20900100 lds R2,_data+1
0318 220C lsl R2
031A 20920100 sts _data+1,R2
031E L66:
031E .dbline 232
031E ; if(j){data[0]<<=1;data[0]+=1;}
031E 4423 tst R20
0320 51F0 breq L70
0322 .dbline 232
0322 .dbline 232
0322 20900000 lds R2,_data
0326 220C lsl R2
0328 20920000 sts _data,R2
032C .dbline 232
032C 822D mov R24,R2
032E 8F5F subi R24,255 ; addi 1
0330 80930000 sts _data,R24
0334 .dbline 232
0334 05C0 rjmp L71
0336 L70:
0336 .dbline 233
0336 ; else data[0]<<=1;
0336 20900000 lds R2,_data
033A 220C lsl R2
033C 20920000 sts _data,R2
0340 L71:
0340 .dbline 234
0340 ; BITCOUNTER--;
0340 80910000 lds R24,_BITCOUNTER
0344 8150 subi R24,1
0346 80930000 sts _BITCOUNTER,R24
034A .dbline 235
034A ; if (BITCOUNTER==0)//解码完成
034A 8823 tst R24
034C 61F5 brne L20
034E .dbline 236
034E ; {//6-3
034E .dbline 237
034E ; if(CRC3(data,3)==0)
034E 23E0 ldi R18,3
0350 00E0 ldi R16,<_data
0352 10E0 ldi R17,>_data
0354 CADE rcall _CRC3
0356 0023 tst R16
0358 89F4 brne L61
035A .dbline 238
035A ; {//n
035A .dbline 239
035A ; DECODER_FLAG_H;
035A 80910000 lds R24,_flag
035E 8460 ori R24,4
0360 80930000 sts _flag,R24
0364 .dbline 240
0364 ; DECODER_EN_L;
0364 8D7F andi R24,253
0366 80930000 sts _flag,R24
036A .dbline 241
036A ; eaddr0=data[0];
036A 20900000 lds R2,_data
036E 20920000 sts _eaddr0,R2
0372 .dbline 242
0372 ; eaddr1=data[1];
0372 20900100 lds R2,_data+1
0376 20920000 sts _eaddr1,R2
037A .dbline 243
037A ; return;
037A 15C0 rjmp L20
037C X2:
037C .dbline 246
037C ; }//n
037C ; else //解码错误
037C ; {
037C .dbline 247
037C ; goto give_up;
037C .dbline 250
037C ; }
037C ; }//6-3
037C ; return;
037C L61:
037C .dbline 253
037C 2224 clr R2
037E 20920000 sts _data,R2
0382 .dbline 254
0382 20920100 sts _data+1,R2
0386 .dbline 255
0386 20920200 sts _data+2,R2
038A .dbline 256
038A E0E0 ldi R30,<_CODELANGTH
038C F0E0 ldi R31,>_CODELANGTH
038E E491 lpm R30,Z
0390 E0930000 sts _BITCOUNTER,R30
0394 .dbline 257
0394 80910000 lds R24,_flag
0398 8B7F andi R24,251
039A 80930000 sts _flag,R24
039E .dbline 258
039E 20920000 sts _LO_COUNT_SAVE,R2
03A2 .dbline 259
03A2 20920000 sts _HI_COUNT_SAVE,R2
03A6 .dbline 260
03A6 L21:
03A6 .dbline -2
03A6 L20:
03A6 00D0 rcall pop_gset2
03A8 00D0 rcall pop_lset
03AA .dbline 0 ; func end
03AA 1895 reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -