📄 bjqd.lst
字号:
0397 8042 LDD R4,Z+2
0398 8053 LDD R5,Z+3
0399 938A ST R24,-Y
039A 0181 MOVW R16,R2
039B 0192 MOVW R18,R4
039C 940E0A67 CALL lsr32
039E 01FE MOVW R30,R28
039F 8300 STD Z+0,R16
03A0 8311 STD Z+1,R17
03A1 8322 STD Z+2,R18
03A2 8333 STD Z+3,R19
(0514) TCCR1B |= (1<<CS11);
03A3 B58E IN R24,0x2E
03A4 6082 ORI R24,2
03A5 BD8E OUT 0x2E,R24
(0515) TCCR1B &=~(1<<CS10);
03A6 B58E IN R24,0x2E
03A7 7F8E ANDI R24,0xFE
03A8 BD8E OUT 0x2E,R24
(0516) data=data-1;
03A9 E041 LDI R20,1
03AA E050 LDI R21,0
03AB E060 LDI R22,0
03AC E070 LDI R23,0
03AD 01FE MOVW R30,R28
03AE 8020 LDD R2,Z+0
03AF 8031 LDD R3,Z+1
03B0 8042 LDD R4,Z+2
03B1 8053 LDD R5,Z+3
03B2 1A24 SUB R2,R20
03B3 0A35 SBC R3,R21
03B4 0A46 SBC R4,R22
03B5 0A57 SBC R5,R23
03B6 01FE MOVW R30,R28
03B7 8220 STD Z+0,R2
03B8 8231 STD Z+1,R3
03B9 8242 STD Z+2,R4
03BA 8253 STD Z+3,R5
(0517) }
03BB C018 RJMP 0x03D4
(0518) else
(0519) {
(0520) TCCR1B |= (1<<CS10);
03BC B58E IN R24,0x2E
03BD 6081 ORI R24,1
03BE BD8E OUT 0x2E,R24
(0521) TCCR1B &=~(1<<CS11);
03BF B58E IN R24,0x2E
03C0 7F8D ANDI R24,0xFD
03C1 BD8E OUT 0x2E,R24
(0522) data=data-1;
03C2 E041 LDI R20,1
03C3 E050 LDI R21,0
03C4 E060 LDI R22,0
03C5 E070 LDI R23,0
03C6 01FE MOVW R30,R28
03C7 8020 LDD R2,Z+0
03C8 8031 LDD R3,Z+1
03C9 8042 LDD R4,Z+2
03CA 8053 LDD R5,Z+3
03CB 1A24 SUB R2,R20
03CC 0A35 SBC R3,R21
03CD 0A46 SBC R4,R22
03CE 0A57 SBC R5,R23
03CF 01FE MOVW R30,R28
03D0 8220 STD Z+0,R2
03D1 8231 STD Z+1,R3
03D2 8242 STD Z+2,R4
03D3 8253 STD Z+3,R5
(0523) }
(0524) time_da=data;
03D4 01FE MOVW R30,R28
03D5 8020 LDD R2,Z+0
03D6 8031 LDD R3,Z+1
03D7 9230007C STS time_da+1,R3
03D9 9220007B STS time_da,R2
03DB 9624 ADIW R28,4
03DC 940E0A1A CALL pop_gset3
03DE 9508 RET
(0525) }
(0526)
(0527) void out_ctrol(void)//abcd
(0528) {
(0529) unsigned char temp;
(0530) i_disen();
_out_ctrol:
temp --> Y+1
03DF DF47 RCALL _i_disen
(0531) state&=0b11110101;
03E0 91800068 LDS R24,state
03E2 7F85 ANDI R24,0xF5
03E3 93800068 STS state,R24
(0532) state2|=0b00100000;
03E5 918000F5 LDS R24,state2
03E7 6280 ORI R24,0x20
03E8 938000F5 STS state2,R24
03EA 9508 RET
(0533) }
(0534)
(0535) void adc_ctrol(void)
(0536) {
(0537) adc_change();
_adc_ctrol:
03EB DE91 RCALL _adc_change
(0538) speed_slow(speed,out_ctr);
03EC 9120007F LDS R18,out_ctr
03EE 91300080 LDS R19,out_ctr+1
03F0 91000081 LDS R16,speed
03F2 91100082 LDS R17,speed+1
03F4 DF5D RCALL _speed_slow
(0539) if (out_ctr==speed)
03F5 90200081 LDS R2,speed
03F7 90300082 LDS R3,speed+1
03F9 9040007F LDS R4,out_ctr
03FB 90500080 LDS R5,out_ctr+1
03FD 1442 CP R4,R2
03FE 0453 CPC R5,R3
03FF F411 BNE 0x0402
(0540) {asm("nop");}
0400 0000 NOP
0401 C008 RJMP 0x040A
(0541) else
(0542) {speed=out_ctr;}
0402 9020007F LDS R2,out_ctr
0404 90300080 LDS R3,out_ctr+1
0406 92300082 STS speed+1,R3
0408 92200081 STS speed,R2
040A 9508 RET
_key_disposal:
temp --> Y+1
j --> Y+1
i --> Y+1
040B 940E0A2B CALL push_gset1
(0543) }
(0544)
(0545) /*键盘处理函数*/
(0546) void key_disposal(void)
(0547) {
(0548) unsigned char i;
(0549) unsigned char j;
(0550) unsigned int temp;
(0551) switch (key)
040D 91400078 LDS R20,key
040F 2755 CLR R21
0410 3041 CPI R20,1
0411 E0E0 LDI R30,0
0412 075E CPC R21,R30
0413 F029 BEQ 0x0419
0414 3042 CPI R20,2
0415 E0E0 LDI R30,0
0416 075E CPC R21,R30
0417 F0E1 BEQ 0x0434
0418 C035 RJMP 0x044E
(0552) {
(0553) /*******************************启停控制*********************************/
(0554) case runstop_nu:
(0555)
(0556) if((state&0b00001000)==0) //判断启停状态
0419 90200068 LDS R2,state
041B FC23 SBRC R2,3
041C C00D RJMP 0x042A
(0557) {
(0558) state|=0b00001000;
041D 2D82 MOV R24,R2
041E 6088 ORI R24,0x8
041F 93800068 STS state,R24
(0559) i_en();
0421 DEFF RCALL _i_en
(0560) speed_slow(1,speed);
0422 91200081 LDS R18,speed
0424 91300082 LDS R19,speed+1
0426 E001 LDI R16,1
0427 E010 LDI R17,0
0428 DF29 RCALL _speed_slow
(0561) }
0429 C006 RJMP 0x0430
(0562) else
(0563) {
(0564) i_disen();
042A DEFC RCALL _i_disen
(0565) state&=0b11110111;
042B 91800068 LDS R24,state
042D 7F87 ANDI R24,0xF7
042E 93800068 STS state,R24
(0566) }
(0567) key=empty;
0430 2422 CLR R2
0431 92200078 STS key,R2
(0568) break;
0433 C01A RJMP 0x044E
(0569) /******************************正反转控制**********************************/
(0570) case cwccw_nu:
(0571)
(0572) if ((state|0b11111110)==0b11111110) //判断正反状态
0434 91800068 LDS R24,state
0436 6F8E ORI R24,0xFE
0437 3F8E CPI R24,0xFE
0438 F431 BNE 0x043F
(0573) {
(0574) state|=0b00000001;
0439 91800068 LDS R24,state
043B 6081 ORI R24,1
043C 93800068 STS state,R24
(0575) }
043E C005 RJMP 0x0444
(0576) else
(0577) {
(0578) state&=0b11111110;
043F 91800068 LDS R24,state
0441 7F8E ANDI R24,0xFE
0442 93800068 STS state,R24
(0579) }
(0580) speed_slow(1,speed);
0444 91200081 LDS R18,speed
0446 91300082 LDS R19,speed+1
0448 E001 LDI R16,1
0449 E010 LDI R17,0
044A DF07 RCALL _speed_slow
(0581) key=empty;
044B 2422 CLR R2
044C 92200078 STS key,R2
(0582) break;
044E 940E0A2E CALL pop_gset1
0450 9508 RET
(0583) }
(0584) }
(0585)
(0586) //状态初始化函数
(0587) void state_init(void)
(0588) {
(0589) if ((state&0b00001000)!=0) //如果电机没有运行可执行确认操作
_state_init:
0451 90200068 LDS R2,state
0453 FE23 SBRS R2,3
0454 C007 RJMP 0x045C
(0590) {
(0591) state&=0b11110111;
0455 2D82 MOV R24,R2
0456 7F87 ANDI R24,0xF7
0457 93800068 STS state,R24
(0592) key=runstop_nu;
0459 E081 LDI R24,1
045A 93800078 STS key,R24
(0593) }
(0594) key_disposal();
045C DFAE RCALL _key_disposal
045D 9508 RET
(0595) }
(0596) //停止所有运行
(0597) void all_stop(void)
(0598) {
(0599) i_disen();
_all_stop:
045E DEC8 RCALL _i_disen
(0600) state&=~(1<<RUN_STOP);
045F 91800068 LDS R24,state
0461 7F87 ANDI R24,0xF7
0462 93800068 STS state,R24
0464 9508 RET
_defult_fac:
temp --> R20
0465 940E0A2B CALL push_gset1
(0601) }
(0602)
(0603) //所有参数的出厂缺省值
(0604) void defult_fac(void)
(0605) {
(0606) unsigned int temp;
(0607) if ((EEPROMread(DEFAULT_ROMADDR))!=0)
0467 E001 LDI R16,1
0468 E010 LDI R17,0
0469 940E0A73 CALL _EEPROMread
046B 2300 TST R16
046C F409 BNE 0x046E
046D C03C RJMP 0x04AA
(0608) {
(0609) do {temp=EEPROMwrite(DEFAULT_ROMADDR,0);}
046E 2722 CLR R18
046F E001 LDI R16,1
0470 E010 LDI R17,0
0471 940E0A78 CALL _EEPROMwrite
0473 01A8 MOVW R20,R16
(0610) while(temp>0);
0474 3040 CPI R20,0
0475 0745 CPC R20,R21
0476 F7B9 BNE 0x046E
(0611) speed=50;
0477 E382 LDI R24,0x32
0478 E090 LDI R25,0
0479 93900082 STS speed+1,R25
047B 93800081 STS speed,R24
(0612) EEPROMWriteWord(speed_romaddr,&speed);
047D E821 LDI R18,0x81
047E E030 LDI R19,0
047F E003 LDI R16,3
0480 E010 LDI R17,0
0481 940E00E7 CALL _EEPROMWriteWord
(0613) state=0;
0483 2422 CLR R2
0484 92200068 STS state,R2
(0614) do {temp=EEPROMwrite(state_romaddr,state);}
0486 91200068 LDS R18,state
0488 E005 LDI R16,5
0489 E010 LDI R17,0
048A 940E0A78 CALL _EEPROMwrite
048C 01A8 MOVW R20,R16
(0615) while(temp>0);
048D 3040 CPI R20,0
048E 0745 CPC R20,R21
048F F7B1 BNE 0x0486
(0616) pump_tab=1;
0490 E081 LDI R24,1
0491 938000F3 STS pump_tab,R24
(0617) do {temp=EEPROMwrite(pump_tab_romaddr,pump_tab);}
0493 912000F3 LDS R18,pump_tab
0495 E006 LDI R16,6
0496 E010 LDI R17,0
0497 940E0A78 CALL _EEPROMwrite
0499 01A8 MOVW R20,R16
(0618) while(temp>0);
049A 3040 CPI R20,0
049B 0745 CPC R20,R21
049C F7B1 BNE 0x0493
(0619) state_other=0;
049D 2422 CLR R2
049E 92200067 STS state_other,R2
(0620) do {temp=EEPROMwrite(state_other_romaddr,state_other);}
04A0 91200067 LDS R18,state_other
04A2 E007 LDI R16,7
04A3 E010 LDI R17,0
04A4 940E0A78 CALL _EEPROMwrite
04A6 01A8 MOVW R20,R16
(0621) while(temp>0);
04A7 3040 CPI R20,0
04A8 0745 CPC R20,R21
04A9 F7B1 BNE 0x04A0
(0622) }
04AA 940E0A2E CALL pop_gset1
04AC 9508 RET
(0623) //do {temp=EEPROMwrite(DEFAULT_ROMADDR,1);}
(0624) //while(temp>0);
(0625) }
(0626)
(0627)
(0628) /****************************************************************
(0629) 主函数
(0630) ****************************************************************/
(0631) void main(void)
(0632) {
(0633) unsigned char i;
(0634) CLI();
_main:
i --> Y+1
04AD 94F8 BCLR 7
(0635) defult_fac();
04AE DFB6 RCALL _defult_fac
(0636) EEPROMReadWord(speed_romaddr,&speed);
04AF E821 LDI R18,0x81
04B0 E030 LDI R19,0
04B1 E003 LDI R16,3
04B2 E010 LDI R17,0
04B3 940E00CB CALL _EEPROMReadWord
(0637) pump_tab=EEPROMread(pump_tab_romaddr);
04B5 E006 LDI R16,6
04B6 E010 LDI R17,0
04B7 940E0A73 CALL _EEPROMread
04B9 930000F3 STS pump_tab,R16
(0638) if ((pump_tab>=31)||(pump_tab==0))
04BB 310F CPI R16,0x1F
04BC F410 BCC 0x04BF
04BD 2300 TST R16
04BE F419 BNE 0x04C2
(0639) {pump_tab=1;}
04BF E081 LDI R24,1
04C0 938000F3 STS pump_tab,R24
(0640) if ((speed>600)||(speed==0))
04C2 E588 LDI R24,0x58
04C3 E092 LDI R25,2
04C4 90200081 LDS R2,speed
04C6 90300082 LDS R3,speed+1
04C8 1582 CP R24,R2
04C9 0593 CPC R25,R3
04CA F020 BCS 0x04CF
04CB 2022 TST R2
04CC F441 BNE 0x04D5
04CD 2033 TST R3
04CE F431 BNE 0x04D5
(0641) {speed=1;}
04CF E081 LDI R24,1
04D0 E090 LDI R25,0
04D1 93900082 STS speed+1,R25
04D3 93800081 STS speed,R24
(0642) state=0;
04D5 2422 CLR R2
04D6 92200068 STS state,R2
(0643) state0=0;
04D8 92200066 STS state0,R2
(0644) state1=0;
04DA 922000F4 STS state1,R2
(0645) state2=0;
04DC 922000F5 STS state2,R2
(0646) wrong=0;
04DE 92200063 STS wrong,R2
(0647) micros_nu0=16;
04E0 E180 LDI R24,0x10
04E1 93800075 STS micros_nu0,R24
(0648) in_out_number=in_int;
04E3 92200064 STS in_out_number,R2
(0649) in_out_state=in_int;
04E5 92200065 STS in_out_state,R2
(0650) port_init(); //端口初始化
04E7 DD61 RCALL _port_init
(0651) da_init();
04E8 DD7B RCALL _da_init
(0652) out_init(); //外控初始化
04E9 940E0916 CALL _out_init
(0653) serial_init();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -