📄 coder.lis
字号:
0340 80930C00 sts _time+12,R24
0344 06C0 rjmp L71
0346 L70:
0346 .dbline 269
0346 ; if(BUTTON3)time[6]=SWL_time;else time[6]=SWH_time;
0346 84E8 ldi R24,900
0348 93E0 ldi R25,3
034A 90930D00 sts _time+12+1,R25
034E 80930C00 sts _time+12,R24
0352 L71:
0352 .dbline 270
0352 B49B sbis 0x16,4
0354 07C0 rjmp L74
0356 .dbline 270
0356 84E6 ldi R24,100
0358 90E0 ldi R25,0
035A 90930F00 sts _time+14+1,R25
035E 80930E00 sts _time+14,R24
0362 06C0 rjmp L75
0364 L74:
0364 .dbline 270
0364 ; if(BUTTON4)time[7]=SWL_time;else time[7]=SWH_time;
0364 84E8 ldi R24,900
0366 93E0 ldi R25,3
0368 90930F00 sts _time+14+1,R25
036C 80930E00 sts _time+14,R24
0370 L75:
0370 .dbline 272
0370 ;
0370 ; time[8]=12000-time[0]-time[1]-time[2]-time[3]-time[4]-time[5]-time[6]-time[7];
0370 20900000 lds R2,_time
0374 30900100 lds R3,_time+1
0378 80EE ldi R24,12000
037A 9EE2 ldi R25,46
037C 8219 sub R24,R2
037E 9309 sbc R25,R3
0380 20900200 lds R2,_time+2
0384 30900300 lds R3,_time+2+1
0388 8219 sub R24,R2
038A 9309 sbc R25,R3
038C 20900400 lds R2,_time+4
0390 30900500 lds R3,_time+4+1
0394 8219 sub R24,R2
0396 9309 sbc R25,R3
0398 20900600 lds R2,_time+6
039C 30900700 lds R3,_time+6+1
03A0 8219 sub R24,R2
03A2 9309 sbc R25,R3
03A4 20900800 lds R2,_time+8
03A8 30900900 lds R3,_time+8+1
03AC 8219 sub R24,R2
03AE 9309 sbc R25,R3
03B0 20900A00 lds R2,_time+10
03B4 30900B00 lds R3,_time+10+1
03B8 8219 sub R24,R2
03BA 9309 sbc R25,R3
03BC 20900C00 lds R2,_time+12
03C0 30900D00 lds R3,_time+12+1
03C4 8219 sub R24,R2
03C6 9309 sbc R25,R3
03C8 20900E00 lds R2,_time+14
03CC 30900F00 lds R3,_time+14+1
03D0 8219 sub R24,R2
03D2 9309 sbc R25,R3
03D4 90931100 sts _time+16+1,R25
03D8 80931000 sts _time+16,R24
03DC .dbline 274
03DC ;
03DC ; WDR();
03DC A895 wdr
03DE .dbline 276
03DE ;
03DE ; if(safe)
03DE 0984 ldd R0,y+9
03E0 0020 tst R0
03E2 C9F0 breq L86
03E4 .dbline 277
03E4 ; {
03E4 .dbline 278
03E4 ; youmen=time[2];
03E4 E0900400 lds R14,_time+4
03E8 F0900500 lds R15,_time+4+1
03EC .dbline 279
03EC ; time[2]=0;
03EC 2224 clr R2
03EE 3324 clr R3
03F0 30920500 sts _time+4+1,R3
03F4 20920400 sts _time+4,R2
03F8 .dbline 280
03F8 ; if(safedelay>3)
03F8 83E0 ldi R24,3
03FA 0A84 ldd R0,y+10
03FC 8015 cp R24,R0
03FE 40F4 brsh L90
0400 .dbline 281
0400 ; {
0400 .dbline 282
0400 ; if(youmen<50)safe=0;
0400 C701 movw R24,R14
0402 8233 cpi R24,50
0404 E0E0 ldi R30,0
0406 9E07 cpc R25,R30
0408 30F4 brsh L91
040A .dbline 282
040A 0024 clr R0
040C 0986 std y+9,R0
040E .dbline 283
040E ; }
040E 03C0 rjmp L91
0410 L90:
0410 .dbline 284
0410 ; else safedelay++;
0410 0A84 ldd R0,y+10
0412 0394 inc R0
0414 0A86 std y+10,R0
0416 L91:
0416 .dbline 285
0416 ; }
0416 L86:
0416 .dbline 288
0416 ;
0416 ;
0416 ; if(!(BUTTON5))
0416 B599 sbic 0x16,5
0418 16C0 rjmp L94
041A .dbline 289
041A ; {
041A .dbline 290
041A ; TCCR0 = 0x05; //start timer//开始判断有无信号
041A 85E0 ldi R24,5
041C 83BF out 0x33,R24
041E .dbline 291
041E ; GICR = 0xC0;//外中断开
041E 80EC ldi R24,192
0420 8BBF out 0x3b,R24
0422 .dbline 292
0422 ; if (input)
0422 20901300 lds R2,_input
0426 2220 tst R2
0428 41F0 breq L96
042A .dbline 293
042A ; {
042A .dbline 294
042A ; TCCR1B = 0x00;//原来的信号发送关闭
042A 2224 clr R2
042C 2EBC out 0x2e,R2
042E .dbline 295
042E ; train=1;//开始训练
042E 81E0 ldi R24,1
0430 80931400 sts _train,R24
0434 .dbline 296
0434 ; ch_counter=0;//等待放行
0434 20921200 sts _ch_counter,R2
0438 .dbline 297
0438 ; }
0438 10C0 rjmp L95
043A L96:
043A .dbline 299
043A ; else
043A ; {
043A .dbline 300
043A ; TCCR1B = 0x02;
043A 82E0 ldi R24,2
043C 8EBD out 0x2e,R24
043E .dbline 301
043E ; train=0;//退出时关闭训练
043E 2224 clr R2
0440 20921400 sts _train,R2
0444 .dbline 303
0444 ; ////原来的信号发送打开
0444 ; }
0444 .dbline 304
0444 ; }//if(!(BUTTON5))
0444 0AC0 rjmp L95
0446 L94:
0446 .dbline 306
0446 ; else
0446 ; {
0446 .dbline 307
0446 ; GICR = 0x00;//外中断关
0446 2224 clr R2
0448 2BBE out 0x3b,R2
044A .dbline 308
044A ; TCCR0 = 0x00;
044A 23BE out 0x33,R2
044C .dbline 309
044C ; TCNT0 = 0x00;
044C 22BE out 0x32,R2
044E .dbline 310
044E ; train=0;
044E 20921400 sts _train,R2
0452 .dbline 311
0452 ; input=0;
0452 20921300 sts _input,R2
0456 .dbline 312
0456 ; TCCR1B = 0x02;
0456 82E0 ldi R24,2
0458 8EBD out 0x2e,R24
045A .dbline 313
045A ; }
045A L95:
045A .dbline 317
045A ;
045A ; ////////////////////////////
045A ;
045A ; if(checken==0)
045A 0884 ldd R0,y+8
045C 0020 tst R0
045E 71F5 brne L98
0460 .dbline 318
0460 ; {
0460 .dbline 319
0460 ; if(battcheck)
0460 0B84 ldd R0,y+11
0462 0020 tst R0
0464 71F1 breq L113
0466 .dbline 320
0466 ; {
0466 .dbline 321
0466 ; if(batt<450) //进入报警状态
0466 623C cpi R22,194
0468 E1E0 ldi R30,1
046A 7E07 cpc R23,R30
046C 28F5 brsh L102
046E .dbline 322
046E ; {
046E .dbline 323
046E ; if(batt>393) //进入频闪状态
046E 89E8 ldi R24,393
0470 91E0 ldi R25,1
0472 8617 cp R24,R22
0474 9707 cpc R25,R23
0476 E0F4 brsh L104
0478 .dbline 324
0478 ; {
0478 .dbline 325
0478 ; warning_frequency=batt-390;
0478 CB01 movw R24,R22
047A 8658 subi R24,134
047C 9140 sbci R25,1
047E A82E mov R10,R24
0480 .dbline 326
0480 ; warning_counter++;
0480 0C84 ldd R0,y+12
0482 0394 inc R0
0484 0C86 std y+12,R0
0486 .dbline 327
0486 ; if(warning_counter>=warning_frequency)
0486 0816 cp R0,R24
0488 E0F0 brlo L113
048A .dbline 328
048A ; {
048A .dbline 329
048A ; warning_counter=0;
048A 0024 clr R0
048C 0C86 std y+12,R0
048E .dbline 330
048E ; ledonof=!ledonof;
048E 0D84 ldd R0,y+13
0490 0020 tst R0
0492 21F4 brne L108
0494 81E0 ldi R24,1
0496 90E0 ldi R25,0
0498 6C01 movw R12,R24
049A 02C0 rjmp L109
049C L108:
049C CC24 clr R12
049E DD24 clr R13
04A0 L109:
04A0 CD86 std y+13,R12
04A2 .dbline 331
04A2 ; if(ledonof)LEDH;
04A2 0C2C mov R0,R12
04A4 CC20 tst R12
04A6 11F0 breq L110
04A8 .dbline 331
04A8 C09A sbi 0x18,0
04AA 0BC0 rjmp L113
04AC L110:
04AC .dbline 332
04AC ; else LEDL;
04AC C098 cbi 0x18,0
04AE .dbline 333
04AE ; }
04AE .dbline 334
04AE ; }
04AE 09C0 rjmp L113
04B0 L104:
04B0 .dbline 335
04B0 ; else {LEDH;battcheck=0; }//进入长亮状态,不允许电压回升
04B0 .dbline 335
04B0 C09A sbi 0x18,0
04B2 .dbline 335
04B2 0024 clr R0
04B4 0B86 std y+11,R0
04B6 .dbline 335
04B6 .dbline 337
04B6 ;
04B6 ; }
04B6 05C0 rjmp L113
04B8 L102:
04B8 .dbline 339
04B8 ;
04B8 ; else LEDL; //关闭
04B8 C098 cbi 0x18,0
04BA .dbline 340
04BA ; }
04BA .dbline 341
04BA ; }//if(checken==0)
04BA 03C0 rjmp L113
04BC L98:
04BC .dbline 342
04BC ; else checken--;
04BC 0884 ldd R0,y+8
04BE 0A94 dec R0
04C0 0886 std y+8,R0
04C2 L112:
04C2 .dbline 347
04C2 L113:
04C2 .dbline 347
04C2 20901200 lds R2,_ch_counter
04C6 2220 tst R2
04C8 E1F7 brne L112
04CA .dbline 349
04CA L53:
04CA .dbline 254
04CA DACE rjmp L52
04CC X7:
04CC .dbline -2
04CC L51:
04CC 2E96 adiw R28,14
04CE .dbline 0 ; func end
04CE 0895 ret
04D0 .dbsym r warning_frequency 10 c
04D0 .dbsym l ledonof 13 c
04D0 .dbsym l warning_counter 12 c
04D0 .dbsym l battcheck 11 c
04D0 .dbsym r youmen 14 i
04D0 .dbsym l safedelay 10 c
04D0 .dbsym l safe 9 c
04D0 .dbsym r batt 22 i
04D0 .dbsym l checken 8 c
04D0 .dbsym l temp 0 A[8:4]i
04D0 .dbsym r counter 20 c
04D0 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\AVR程序\简易编码系统\coder.c
0000 _time::
0000 .blkb 18
0012 .dbsym e time _time A[18:9]i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -