📄 bjqd.lst
字号:
(0375) }
(0376)
(0377)
(0378)
(0379) void adc_change(void)
(0380) {
(0381) unsigned char i;
(0382) unsigned char k;
(0383) unsigned int j;
(0384) unsigned int g;
(0385) unsigned char l;
(0386) unsigned int s[10];
(0387) g=0;
0280 2744 CLR R20
0281 2755 CLR R21
(0388) for (l=0;l<10;l++)
0282 2766 CLR R22
0283 C036 RJMP 0x02BA
(0389) {
(0390) for (k=0;k<10;k++)
0284 24AA CLR R10
0285 C012 RJMP 0x0298
(0391) {
(0392) ADCSRA|=(1<<ADSC);
0286 9A36 SBI 0x06,6
(0393) i=ADCSRA;
0287 B0E6 IN R14,0x06
0288 C001 RJMP 0x028A
(0394) while ((i&(1<<ADIF))==0)
(0395) {i=ADCSRA;}
0289 B0E6 IN R14,0x06
028A FEE4 SBRS R14,4
028B CFFD RJMP 0x0289
(0396) j=ADC;
028C B0C4 IN R12,0x04
028D B0D5 IN R13,0x05
(0397) s[k]=j;
028E E082 LDI R24,2
028F 9D8A MUL R24,R10
0290 01F0 MOVW R30,R0
0291 01CE MOVW R24,R28
0292 0FE8 ADD R30,R24
0293 1FF9 ADC R31,R25
0294 82D1 STD Z+1,R13
0295 82C0 STD Z+0,R12
(0398) ADCSRA|=(1<<ADIF);
0296 9A34 SBI 0x06,4
0297 94A3 INC R10
0298 2D8A MOV R24,R10
0299 308A CPI R24,0xA
029A F358 BCS 0x0286
(0399) }
(0400) ins(s,10);
029B E02A LDI R18,0xA
029C 018E MOVW R16,R28
029D D04E RCALL _ins
(0401) j=0;
029E 24CC CLR R12
029F 24DD CLR R13
(0402) for (k=0;k<5;k++)
02A0 24AA CLR R10
02A1 C00C RJMP 0x02AE
(0403) {
(0404) j=j+s[k+2];
02A2 E082 LDI R24,2
02A3 9D8A MUL R24,R10
02A4 01F0 MOVW R30,R0
02A5 01CE MOVW R24,R28
02A6 9604 ADIW R24,4
02A7 0FE8 ADD R30,R24
02A8 1FF9 ADC R31,R25
02A9 8020 LDD R2,Z+0
02AA 8031 LDD R3,Z+1
02AB 0CC2 ADD R12,R2
02AC 1CD3 ADC R13,R3
02AD 94A3 INC R10
02AE 2D8A MOV R24,R10
02AF 3085 CPI R24,5
02B0 F388 BCS 0x02A2
(0405) }
(0406) j=j/5;
02B1 E025 LDI R18,5
02B2 E030 LDI R19,0
02B3 0186 MOVW R16,R12
02B4 940E094C CALL div16u
02B6 0168 MOVW R12,R16
(0407) g=g+j;
02B7 0F40 ADD R20,R16
02B8 1F51 ADC R21,R17
02B9 9563 INC R22
02BA 306A CPI R22,0xA
02BB F408 BCC 0x02BD
02BC CFC7 RJMP 0x0284
(0408) }
(0409) g=g/10;
02BD E02A LDI R18,0xA
02BE E030 LDI R19,0
02BF 018A MOVW R16,R20
02C0 940E094C CALL div16u
02C2 01A8 MOVW R20,R16
(0410) g=g*6/10;
02C3 E006 LDI R16,6
02C4 E010 LDI R17,0
02C5 019A MOVW R18,R20
02C6 940E09D7 CALL empy16s
02C8 E02A LDI R18,0xA
02C9 E030 LDI R19,0
02CA 940E094C CALL div16u
02CC 01A8 MOVW R20,R16
(0411) if (g<=6)
02CD E086 LDI R24,6
02CE E090 LDI R25,0
02CF 1780 CP R24,R16
02D0 0791 CPC R25,R17
02D1 F018 BCS 0x02D5
(0412) {g=1;}
02D2 E041 LDI R20,1
02D3 E050 LDI R21,0
02D4 C002 RJMP 0x02D7
(0413) else
(0414) {g=g-6;}
02D5 5046 SUBI R20,6
02D6 4050 SBCI R21,0
(0415) if (g>=600)
02D7 3548 CPI R20,0x58
02D8 E0E2 LDI R30,2
02D9 075E CPC R21,R30
02DA F010 BCS 0x02DD
(0416) {g=600;}
02DB E548 LDI R20,0x58
02DC E052 LDI R21,2
(0417) if (g<=1)
02DD E081 LDI R24,1
02DE E090 LDI R25,0
02DF 1784 CP R24,R20
02E0 0795 CPC R25,R21
02E1 F010 BCS 0x02E4
(0418) {g=1;}
02E2 E041 LDI R20,1
02E3 E050 LDI R21,0
(0419) out_ctr=g;
02E4 93500080 STS out_ctr+1,R21
02E6 9340007F STS out_ctr,R20
02E8 9664 ADIW R28,0x14
02E9 940E0A20 CALL pop_gset5
02EB 9508 RET
_ins:
a --> R20
t --> R22
b --> R10
count --> R18
item --> R16
02EC 940E0A27 CALL push_gset3
(0420) }
(0421)
(0422) void ins(unsigned int *item,unsigned char count)
(0423) {
(0424) unsigned char a;
(0425) unsigned char b;
(0426) unsigned int t;
(0427) for (a=1;a<count;a++)
02EE E041 LDI R20,1
02EF C02B RJMP 0x031B
(0428) {
(0429) t=item[a];
02F0 E082 LDI R24,2
02F1 9F84 MUL R24,R20
02F2 01F0 MOVW R30,R0
02F3 0FE0 ADD R30,R16
02F4 1FF1 ADC R31,R17
02F5 8160 LDD R22,Z+0
02F6 8171 LDD R23,Z+1
(0430) b=a-1;
02F7 2F84 MOV R24,R20
02F8 5081 SUBI R24,1
02F9 2EA8 MOV R10,R24
02FA C00B RJMP 0x0306
(0431) while(b>=1&&t<item[b])
(0432) {
(0433) item[b+1]=item[b];
02FB E082 LDI R24,2
02FC 9D8A MUL R24,R10
02FD 0110 MOVW R2,R0
02FE 0E20 ADD R2,R16
02FF 1E31 ADC R3,R17
0300 01F1 MOVW R30,R2
0301 8040 LDD R4,Z+0
0302 8051 LDD R5,Z+1
0303 8253 STD Z+3,R5
0304 8242 STD Z+2,R4
(0434) b--;
0305 94AA DEC R10
0306 2D8A MOV R24,R10
0307 3081 CPI R24,1
0308 F050 BCS 0x0313
0309 E082 LDI R24,2
030A 9D8A MUL R24,R10
030B 01F0 MOVW R30,R0
030C 0FE0 ADD R30,R16
030D 1FF1 ADC R31,R17
030E 8020 LDD R2,Z+0
030F 8031 LDD R3,Z+1
0310 1562 CP R22,R2
0311 0573 CPC R23,R3
0312 F340 BCS 0x02FB
(0435) }
(0436) item[b+1]=t;
0313 E082 LDI R24,2
0314 9D8A MUL R24,R10
0315 01F0 MOVW R30,R0
0316 0FE0 ADD R30,R16
0317 1FF1 ADC R31,R17
0318 8373 STD Z+3,R23
0319 8362 STD Z+2,R22
031A 9543 INC R20
031B 1742 CP R20,R18
031C F408 BCC 0x031E
031D CFD2 RJMP 0x02F0
031E 940E0A1A CALL pop_gset3
0320 9508 RET
(0437) }
(0438) }
(0439)
(0440) /*
(0441) *电流输出允许函数
(0442) */
(0443) void i_en(void)
(0444) {
(0445) TIMSK |= (1<<OCIE1A);
_i_en:
0321 B789 IN R24,0x39
0322 6180 ORI R24,0x10
0323 BF89 OUT 0x39,R24
(0446) PORTC|=(1<<INT);
0324 9AA9 SBI 0x15,1
(0447) DDRC |=(1<<INT);
0325 9AA1 SBI 0x14,1
0326 9508 RET
(0448) }
(0449)
(0450) /*
(0451) *电流输出禁止函数
(0452) */
(0453) void i_disen(void)
(0454) {
(0455) TIMSK &=~(1<<OCIE1A);
_i_disen:
0327 B789 IN R24,0x39
0328 7E8F ANDI R24,0xEF
0329 BF89 OUT 0x39,R24
(0456) delay_ms(100);
032A E604 LDI R16,0x64
032B E010 LDI R17,0
032C 940E0563 CALL _delay_ms
(0457) PORTC&=~(1<<INT);
032E 98A9 CBI 0x15,1
(0458) DDRC |=(1<<INT);
032F 9AA1 SBI 0x14,1
0330 9508 RET
_sp_mic:
i --> R20
sudu --> R16
0331 940E0A2B CALL push_gset1
(0459) }
(0460)
(0461) /*
(0462) *根据速度判断细分数函数
(0463) */
(0464) unsigned char sp_mic(unsigned int sudu)
(0465) {
(0466) unsigned char i;
(0467) if (sudu<=410)
0333 E98A LDI R24,0x9A
0334 E091 LDI R25,1
0335 1780 CP R24,R16
0336 0791 CPC R25,R17
0337 F0A8 BCS 0x034D
(0468) {
(0469) if (sudu<=290)
0338 E282 LDI R24,0x22
0339 1780 CP R24,R16
033A 0791 CPC R25,R17
033B F078 BCS 0x034B
(0470) {
(0471) if(sudu<=210)
033C ED82 LDI R24,0xD2
033D E090 LDI R25,0
033E 1780 CP R24,R16
033F 0791 CPC R25,R17
0340 F040 BCS 0x0349
(0472) {
(0473) if (sudu<=140)
0341 E88C LDI R24,0x8C
0342 1780 CP R24,R16
0343 0791 CPC R25,R17
0344 F010 BCS 0x0347
(0474) {i=16;}
0345 E140 LDI R20,0x10
0346 C007 RJMP 0x034E
(0475) else
(0476) {i=8;}
0347 E048 LDI R20,0x8
(0477) }
0348 C005 RJMP 0x034E
(0478) else
(0479) {i=4;}
0349 E044 LDI R20,4
(0480) }
034A C003 RJMP 0x034E
(0481) else
(0482) {i=2;}
034B E042 LDI R20,2
(0483) }
034C C001 RJMP 0x034E
(0484) else
(0485) {i=1;}
034D E041 LDI R20,1
(0486) return i;
034E 2F04 MOV R16,R20
034F 940E0A2E CALL pop_gset1
0351 9508 RET
_speed_slow:
i --> R20
speed_end --> R22
speed_start --> R10
0352 940E0A27 CALL push_gset3
0354 01B9 MOVW R22,R18
0355 0158 MOVW R10,R16
(0487) }
(0488)
(0489)
(0490) /*
(0491) 缓启动函数
(0492) */
(0493) void speed_slow(unsigned int speed_start,unsigned int speed_end)
(0494) {
(0495) unsigned char i;
(0496) for (i=0;speed_start<speed_end;i++)
0356 2744 CLR R20
0357 C00A RJMP 0x0362
(0497) {
(0498) cal_timer1(speed_start);
0358 0185 MOVW R16,R10
0359 D011 RCALL _cal_timer1
(0499) speed_start=speed_start+5;
035A 01C5 MOVW R24,R10
035B 9605 ADIW R24,5
035C 015C MOVW R10,R24
(0500) delay_ms(slow_time); //缓启动加速延时
035D E00A LDI R16,0xA
035E E010 LDI R17,0
035F 940E0563 CALL _delay_ms
0361 9543 INC R20
0362 16A6 CP R10,R22
0363 06B7 CPC R11,R23
0364 F398 BCS 0x0358
(0501) }
(0502) speed_start=speed_end;//abcd
0365 015B MOVW R10,R22
(0503) cal_timer1(speed_start);
0366 0185 MOVW R16,R10
0367 D003 RCALL _cal_timer1
0368 940E0A1A CALL pop_gset3
036A 9508 RET
_cal_timer1:
data --> Y+0
sudu --> R10
036B 940E0A27 CALL push_gset3
036D 0158 MOVW R10,R16
036E 9724 SBIW R28,4
(0504) }
(0505)
(0506) void cal_timer1(unsigned int sudu)
(0507) {
(0508) unsigned long data;
(0509) micros_nu=sp_mic(sudu);
036F 0185 MOVW R16,R10
0370 DFC0 RCALL _sp_mic
0371 93000076 STS micros_nu,R16
(0510) data=1200000/(sudu*micros_nu);
0373 2F20 MOV R18,R16
0374 2733 CLR R19
0375 0185 MOVW R16,R10
0376 940E09D7 CALL empy16s
0378 0118 MOVW R2,R16
0379 2444 CLR R4
037A 2455 CLR R5
037B E840 LDI R20,0x80
037C E45F LDI R21,0x4F
037D E162 LDI R22,0x12
037E E070 LDI R23,0
037F 925A ST R5,-Y
0380 924A ST R4,-Y
0381 923A ST R3,-Y
0382 922A ST R2,-Y
0383 018A MOVW R16,R20
0384 019B MOVW R18,R22
0385 940E096C CALL div32s
0387 01FE MOVW R30,R28
0388 8300 STD Z+0,R16
0389 8311 STD Z+1,R17
038A 8322 STD Z+2,R18
038B 8333 STD Z+3,R19
(0511) if (sudu==1)
038C 01C5 MOVW R24,R10
038D 3081 CPI R24,1
038E E0E0 LDI R30,0
038F 079E CPC R25,R30
0390 F009 BEQ 0x0392
0391 C02A RJMP 0x03BC
(0512) {
(0513) data=data/8;
0392 E083 LDI R24,3
0393 E090 LDI R25,0
0394 01FE MOVW R30,R28
0395 8020 LDD R2,Z+0
0396 8031 LDD R3,Z+1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -