📄 coder.lis
字号:
01DE 2224 clr R2
01E0 22BE out 0x32,R2
01E2 .dbline 200
01E2 ; input=1;
01E2 81E0 ldi R24,1
01E4 80931300 sts _input,R24
01E8 .dbline 201
01E8 ; if(train)//先不忙发送
01E8 20901400 lds R2,_train
01EC 2220 tst R2
01EE 99F0 breq L35
01F0 .dbline 202
01F0 ; switch(IN1)
01F0 00B3 in R16,0x10
01F2 1127 clr R17
01F4 0870 andi R16,8
01F6 1070 andi R17,0
01F8 0030 cpi R16,0
01FA 0107 cpc R16,R17
01FC 49F0 breq L40
01FE X5:
01FE 0030 cpi R16,0
0200 E0E0 ldi R30,0
0202 1E07 cpc R17,R30
0204 44F0 brlt L37
0206 L42:
0206 0830 cpi R16,8
0208 E0E0 ldi R30,0
020A 1E07 cpc R17,R30
020C 19F0 breq L41
020E 03C0 rjmp L37
0210 X6:
0210 .dbline 203
0210 ; {
0210 L40:
0210 .dbline 205
0210 ; case 0:
0210 ; OUTH;
0210 979A sbi 0x12,7
0212 .dbline 206
0212 ; break;
0212 01C0 rjmp L38
0214 L41:
0214 .dbline 208
0214 ; case 0x08:
0214 ; OUTL;
0214 9798 cbi 0x12,7
0216 .dbline 209
0216 ; }
0216 L37:
0216 L38:
0216 L35:
0216 .dbline -2
0216 L34:
0216 2990 ld R2,y+
0218 2FBE out 0x3f,R2
021A E991 ld R30,y+
021C 8991 ld R24,y+
021E 1991 ld R17,y+
0220 0991 ld R16,y+
0222 2990 ld R2,y+
0224 .dbline 0 ; func end
0224 1895 reti
0226 .dbend
0226 .dbfunc e Putchar _Putchar fV
0226 ; c -> R16
.even
0226 _Putchar::
0226 .dbline -1
0226 .dbline 216
0226 ;
0226 ; }
0226 ;
0226 ;
0226 ;
0226 ; void Putchar (Uchar c)
0226 ; {
0226 L44:
0226 .dbline 217
0226 L45:
0226 .dbline 217
0226 ; while(!(UCSRA&(1<<UDRE)));
0226 5D9B sbis 0xb,5
0228 FECF rjmp L44
022A .dbline 218
022A ; UDR=c;
022A 0CB9 out 0xc,R16
022C .dbline -2
022C L43:
022C .dbline 0 ; func end
022C 0895 ret
022E .dbsym r c 16 c
022E .dbend
022E .dbfunc e ReadADC _ReadADC fi
022E ; int2 -> R20,R21
022E ; int1 -> R22,R23
022E ; channel -> R16
.even
022E _ReadADC::
022E 00D0 rcall push_gset2
0230 .dbline -1
0230 .dbline 223
0230 ; }
0230 ;
0230 ;
0230 ; Uint ReadADC (Uchar channel)
0230 ; {
0230 .dbline 225
0230 ; Uint int1,int2;
0230 ; ADMUX&=~0x1F;
0230 87B1 in R24,0x7
0232 807E andi R24,224
0234 87B9 out 0x7,R24
0236 .dbline 226
0236 ; ADMUX|=channel;
0236 27B0 in R2,0x7
0238 202A or R2,R16
023A 27B8 out 0x7,R2
023C .dbline 227
023C ; ADCSRA|=0x40;
023C 369A sbi 0x6,6
023E L48:
023E .dbline 228
023E .dbline 228
023E L49:
023E .dbline 228
023E ; while(~ADCSRA&0x10){}
023E 26B0 in R2,0x6
0240 3324 clr R3
0242 2094 com R2
0244 3094 com R3
0246 24FC sbrc R2,4
0248 FACF rjmp L48
024A .dbline 229
024A ; ADCSRA|=0x10;
024A 349A sbi 0x6,4
024C .dbline 230
024C ; int2=ADCL;
024C 44B1 in R20,0x4
024E 5527 clr R21
0250 .dbline 231
0250 ; int1=ADCH;
0250 65B1 in R22,0x5
0252 7727 clr R23
0254 .dbline 232
0254 ; int1<<=8;
0254 762F mov R23,R22
0256 6627 clr R22
0258 .dbline 233
0258 ; return (int1+int2);
0258 8B01 movw R16,R22
025A 040F add R16,R20
025C 151F adc R17,R21
025E .dbline -2
025E L47:
025E 00D0 rcall pop_gset2
0260 .dbline 0 ; func end
0260 0895 ret
0262 .dbsym r int2 20 i
0262 .dbsym r int1 22 i
0262 .dbsym r channel 16 c
0262 .dbend
0262 .dbfunc e main _main fI
0262 ; warning_frequency -> R10
0262 ; ledonof -> y+13
0262 ; warning_counter -> y+12
0262 ; battcheck -> y+11
0262 ; youmen -> R14,R15
0262 ; safedelay -> y+10
0262 ; safe -> y+9
0262 ; batt -> R22,R23
0262 ; checken -> y+8
0262 ; temp -> y+0
0262 ; counter -> R20
.even
0262 _main::
0262 2E97 sbiw R28,14
0264 .dbline -1
0264 .dbline 238
0264 ; }
0264 ;
0264 ;
0264 ; main()
0264 ; {
0264 .dbline 244
0264 ;
0264 ; Uint batt;//电量
0264 ; Uint temp[4];//滤波用
0264 ; Uint youmen ;//油门缓存
0264 ; Uchar counter ;//采集计数
0264 ; Uchar safe=1,safedelay=0;//油门保护
0264 0024 clr R0
0266 0394 inc R0
0268 0986 std y+9,R0
026A .dbline 244
026A 0024 clr R0
026C 0A86 std y+10,R0
026E .dbline 246
026E ; Uchar warning_frequency;//警告频率
026E ; Uchar warning_counter=0;
026E 0C86 std y+12,R0
0270 .dbline 247
0270 ; Uchar ledonof=0;
0270 0D86 std y+13,R0
0272 .dbline 248
0272 ; Uchar battcheck=1;//检测电量许可
0272 0024 clr R0
0274 0394 inc R0
0276 0B86 std y+11,R0
0278 .dbline 249
0278 ; Uchar checken=200;//等待电压稳定
0278 88EC ldi R24,200
027A 8887 std y+8,R24
027C .dbline 251
027C ;
027C ; init_devices();
027C 6EDF rcall _init_devices
027E 25C1 rjmp L53
0280 L52:
0280 .dbline 255
0280 ;
0280 ;
0280 ; while(1)
0280 ; {
0280 .dbline 258
0280 ;
0280 ;
0280 ; for(counter=0;counter<=3;counter++)
0280 4427 clr R20
0282 33C0 rjmp L58
0284 L55:
0284 .dbline 259
0284 ; {
0284 .dbline 260
0284 ; temp[counter]=ReadADC (counter);
0284 042F mov R16,R20
0286 D3DF rcall _ReadADC
0288 82E0 ldi R24,2
028A 849F mul R24,R20
028C F001 movw R30,R0
028E CE01 movw R24,R28
0290 E80F add R30,R24
0292 F91F adc R31,R25
0294 1183 std z+1,R17
0296 0083 std z+0,R16
0298 .dbline 261
0298 82E0 ldi R24,2
029A 849F mul R24,R20
029C CE01 movw R24,R28
029E F001 movw R30,R0
02A0 E80F add R30,R24
02A2 F91F adc R31,R25
02A4 2080 ldd R2,z+0
02A6 3180 ldd R3,z+1
02A8 80E0 ldi R24,<_time
02AA 90E0 ldi R25,>_time
02AC F001 movw R30,R0
02AE E80F add R30,R24
02B0 F91F adc R31,R25
02B2 4080 ldd R4,z+0
02B4 5180 ldd R5,z+1
02B6 C201 movw R24,R4
02B8 0196 adiw R24,1
02BA 8215 cp R24,R2
02BC 9305 cpc R25,R3
02BE 28F0 brlo L61
02C0 C201 movw R24,R4
02C2 0197 sbiw R24,1
02C4 2816 cp R2,R24
02C6 3906 cpc R3,R25
02C8 78F4 brsh L59
02CA L61:
02CA .dbline 261
02CA ; if((temp[counter]>time[counter]+1)||(temp[counter]<time[counter]-1))time[counter]=temp[counter];
02CA 82E0 ldi R24,2
02CC 849F mul R24,R20
02CE CE01 movw R24,R28
02D0 F001 movw R30,R0
02D2 E80F add R30,R24
02D4 F91F adc R31,R25
02D6 2080 ldd R2,z+0
02D8 3180 ldd R3,z+1
02DA 80E0 ldi R24,<_time
02DC 90E0 ldi R25,>_time
02DE F001 movw R30,R0
02E0 E80F add R30,R24
02E2 F91F adc R31,R25
02E4 3182 std z+1,R3
02E6 2082 std z+0,R2
02E8 L59:
02E8 .dbline 263
02E8 L56:
02E8 .dbline 258
02E8 4395 inc R20
02EA L58:
02EA .dbline 258
02EA 83E0 ldi R24,3
02EC 8417 cp R24,R20
02EE 08F0 brlo X8
02F0 C9CF rjmp L55
02F2 X8:
02F2 .dbline 265
02F2 ;
02F2 ; }
02F2 ;
02F2 ; batt=ReadADC (4);
02F2 04E0 ldi R16,4
02F4 9CDF rcall _ReadADC
02F6 B801 movw R22,R16
02F8 .dbline 267
02F8 B19B sbis 0x16,1
02FA 07C0 rjmp L62
02FC .dbline 267
02FC 84E6 ldi R24,100
02FE 90E0 ldi R25,0
0300 90930900 sts _time+8+1,R25
0304 80930800 sts _time+8,R24
0308 06C0 rjmp L63
030A L62:
030A .dbline 267
030A ;
030A ; if(BUTTON1)time[4]=SWL_time;else time[4]=SWH_time;
030A 84E8 ldi R24,900
030C 93E0 ldi R25,3
030E 90930900 sts _time+8+1,R25
0312 80930800 sts _time+8,R24
0316 L63:
0316 .dbline 268
0316 B29B sbis 0x16,2
0318 07C0 rjmp L66
031A .dbline 268
031A 84E6 ldi R24,100
031C 90E0 ldi R25,0
031E 90930B00 sts _time+10+1,R25
0322 80930A00 sts _time+10,R24
0326 06C0 rjmp L67
0328 L66:
0328 .dbline 268
0328 ; if(BUTTON2)time[5]=SWL_time;else time[5]=SWH_time;
0328 84E8 ldi R24,900
032A 93E0 ldi R25,3
032C 90930B00 sts _time+10+1,R25
0330 80930A00 sts _time+10,R24
0334 L67:
0334 .dbline 269
0334 B39B sbis 0x16,3
0336 07C0 rjmp L70
0338 .dbline 269
0338 84E6 ldi R24,100
033A 90E0 ldi R25,0
033C 90930D00 sts _time+12+1,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -