📄 main.lst
字号:
0136 9040010B LDS R4,Timer
0138 9050010C LDS R5,Timer+1
013A 1442 CP R4,R2
013B 0453 CPC R5,R3
013C F420 BCC 0x0141
013D 9230010C STS Timer+1,R3
013F 9220010B STS Timer,R2
(0183)
(0184) if(Timer>(middle+50)) // 前进 1550us
0141 91800107 LDS R24,middle
0143 91900108 LDS R25,middle+1
0145 96C2 ADIW R24,0x32
0146 9020010B LDS R2,Timer
0148 9030010C LDS R3,Timer+1
014A 1582 CP R24,R2
014B 0593 CPC R25,R3
014C F590 BCC 0x017F
(0185) {
(0186) if(power>3 || heat>3)
014D E083 LDI R24,3
014E 90200103 LDS R2,power
0150 1582 CP R24,R2
0151 F020 BCS 0x0156
0152 90200102 LDS R2,heat
0154 1582 CP R24,R2
0155 F430 BCC 0x015C
(0187) {
(0188) PWM --;
0156 9180010D LDS R24,PWM
0158 5081 SUBI R24,1
0159 9380010D STS PWM,R24
(0189) }
015B C01A RJMP 0x0176
(0190) else
(0191) {
(0192) PWM = ((Timer-middle)*10)/PE1; // 计算占空比
015C 90200107 LDS R2,middle
015E 90300108 LDS R3,middle+1
0160 9120010B LDS R18,Timer
0162 9130010C LDS R19,Timer+1
0164 1922 SUB R18,R2
0165 0933 SBC R19,R3
0166 E00A LDI R16,0xA
0167 E010 LDI R17,0
0168 D39D RCALL empy16s
0169 91200112 LDS R18,PE1
016B 91300113 LDS R19,PE1+1
016D D37E RCALL div16u
016E 9300010D STS PWM,R16
(0193) if(PWM>210) PWM = 255;
0170 ED82 LDI R24,0xD2
0171 1780 CP R24,R16
0172 F418 BCC 0x0176
0173 EF8F LDI R24,0xFF
0174 9380010D STS PWM,R24
(0194)
(0195) }
(0196) Pwm_set(PWM,1); // 设置PWM占空比
0176 E021 LDI R18,1
0177 9100010D LDS R16,PWM
0179 D34B RCALL _Pwm_set
(0197) mode = 1;
017A E081 LDI R24,1
017B 9380010F STS mode,R24
(0198) SET_LED;
017D 9A5C SBI 0x0B,4
(0199) }
017E C060 RJMP 0x01DF
(0200) else if(Timer<(middle-50))
017F 91800107 LDS R24,middle
0181 91900108 LDS R25,middle+1
0183 97C2 SBIW R24,0x32
0184 9020010B LDS R2,Timer
0186 9030010C LDS R3,Timer+1
0188 1628 CP R2,R24
0189 0639 CPC R3,R25
018A F008 BCS 0x018C
018B C04F RJMP 0x01DB
(0201) {
(0202) if(!mode && REV) // 后退
018C 9020010F LDS R2,mode
018E 2022 TST R2
018F F5B1 BNE 0x01C6
0190 90200104 LDS R2,REV
0192 2022 TST R2
0193 F191 BEQ 0x01C6
(0203) {
(0204) if(power>3 || heat>3)
0194 E083 LDI R24,3
0195 90200103 LDS R2,power
0197 1582 CP R24,R2
0198 F020 BCS 0x019D
0199 90200102 LDS R2,heat
019B 1582 CP R24,R2
019C F430 BCC 0x01A3
(0205) {
(0206) PWM --;
019D 9180010D LDS R24,PWM
019F 5081 SUBI R24,1
01A0 9380010D STS PWM,R24
(0207) }
01A2 C01A RJMP 0x01BD
(0208) else
(0209) {
(0210) PWM = ((middle-Timer)*10)/PE2;
01A3 9020010B LDS R2,Timer
01A5 9030010C LDS R3,Timer+1
01A7 91200107 LDS R18,middle
01A9 91300108 LDS R19,middle+1
01AB 1922 SUB R18,R2
01AC 0933 SBC R19,R3
01AD E00A LDI R16,0xA
01AE E010 LDI R17,0
01AF D356 RCALL empy16s
01B0 91200110 LDS R18,PE2
01B2 91300111 LDS R19,PE2+1
01B4 D337 RCALL div16u
01B5 9300010D STS PWM,R16
(0211) if(PWM>210) PWM = 255;
01B7 ED82 LDI R24,0xD2
01B8 1780 CP R24,R16
01B9 F418 BCC 0x01BD
01BA EF8F LDI R24,0xFF
01BB 9380010D STS PWM,R24
(0212) }
(0213) Pwm_set(PWM,2);
01BD E022 LDI R18,2
01BE 9100010D LDS R16,PWM
01C0 D304 RCALL _Pwm_set
(0214) SET_LED;
01C1 9A5C SBI 0x0B,4
(0215) delay(5);
01C2 E005 LDI R16,5
01C3 E010 LDI R17,0
01C4 DEB8 RCALL _delay
(0216) }
01C5 C019 RJMP 0x01DF
(0217) else
(0218) {
(0219) Pwm_set(255,3); // 刹车
01C6 E023 LDI R18,3
01C7 EF0F LDI R16,0xFF
01C8 D2FC RCALL _Pwm_set
01C9 C001 RJMP 0x01CB
(0220) while((Timer+50)<=middle)
(0221) {
(0222) LED_set();
01CA DED1 RCALL _LED_set
01CB 90200107 LDS R2,middle
01CD 90300108 LDS R3,middle+1
01CF 9180010B LDS R24,Timer
01D1 9190010C LDS R25,Timer+1
01D3 96C2 ADIW R24,0x32
01D4 1628 CP R2,R24
01D5 0639 CPC R3,R25
01D6 F798 BCC 0x01CA
(0223) }
(0224) mode = 0;
01D7 2422 CLR R2
01D8 9220010F STS mode,R2
(0225) }
(0226) }
01DA C004 RJMP 0x01DF
(0227) else
(0228) {
(0229) Pwm_set(0,0);
01DB 2722 CLR R18
01DC 2700 CLR R16
01DD D2E7 RCALL _Pwm_set
(0230) CLR_LED;
01DE 985C CBI 0x0B,4
(0231) }
(0232) }
(0233) egis();
01DF DEC5 RCALL _egis
01E0 9508 RET
_key:
k --> R20
i --> R22
01E1 D340 RCALL push_gset2
(0234) }
(0235)
(0236)
(0237)
(0238)
(0239) uchar key(void)
(0240) {
(0241) uchar i,k=0;
01E2 2744 CLR R20
(0242)
(0243) for(i=0;i<5;i++)
01E3 2766 CLR R22
01E4 C009 RJMP 0x01EE
(0244) {
(0245) if(PINB & 0x80) k = 0;
01E5 9B1F SBIS 0x03,7
01E6 C002 RJMP 0x01E9
01E7 2744 CLR R20
01E8 C001 RJMP 0x01EA
(0246) else k ++;
01E9 9543 INC R20
(0247) delay(3);
01EA E003 LDI R16,3
01EB E010 LDI R17,0
01EC DE90 RCALL _delay
01ED 9563 INC R22
01EE 3065 CPI R22,5
01EF F3A8 BCS 0x01E5
(0248) }
(0249)
(0250) return k;
01F0 2F04 MOV R16,R20
01F1 D324 RCALL pop_gset2
01F2 9508 RET
(0251) }
(0252)
(0253) /*---------------------------------------------------------------
(0254)
(0255) ----------------------------------------------------------------*/
(0256)
(0257) uint compute(void)
(0258) {
(0259) uchar i;
(0260) uint temp = 0;
_compute:
temp --> R16
i --> R18
01F3 2700 CLR R16
01F4 2711 CLR R17
(0261)
(0262) for(i=0;i<8;i++)
01F5 2722 CLR R18
01F6 C013 RJMP 0x020A
(0263) {
(0264) while(!rxd_flag);
01F7 9020010E LDS R2,rxd_flag
01F9 2022 TST R2
01FA F3E1 BEQ 0x01F7
(0265) temp += Timer;
01FB 9020010B LDS R2,Timer
01FD 9030010C LDS R3,Timer+1
01FF 0D02 ADD R16,R2
0200 1D13 ADC R17,R3
(0266) rxd_flag = 0;
0201 2422 CLR R2
0202 9220010E STS rxd_flag,R2
(0267) Timer= 0;
0204 2433 CLR R3
0205 9230010C STS Timer+1,R3
0207 9220010B STS Timer,R2
0209 9523 INC R18
020A 3028 CPI R18,0x8
020B F358 BCS 0x01F7
(0268) }
(0269) temp = (temp>>3);
020C 0118 MOVW R2,R16
020D 9436 LSR R3
020E 9427 ROR R2
020F 9436 LSR R3
0210 9427 ROR R2
0211 9436 LSR R3
0212 9427 ROR R2
0213 0181 MOVW R16,R2
(0270)
(0271) return temp;
0214 9508 RET
(0272) }
(0273)
(0274)
(0275) void Buz()
(0276) {
(0277) Pwm_set(20,1);
_Buz:
0215 E021 LDI R18,1
0216 E104 LDI R16,0x14
0217 D2AD RCALL _Pwm_set
(0278) delay(15);
0218 E00F LDI R16,0xF
0219 E010 LDI R17,0
021A DE62 RCALL _delay
(0279) Pwm_set(0,0);
021B 2722 CLR R18
021C 2700 CLR R16
021D D2A7 RCALL _Pwm_set
(0280) delay(20);
021E E104 LDI R16,0x14
021F E010 LDI R17,0
0220 DE5C RCALL _delay
(0281) Pwm_set(20,1);
0221 E021 LDI R18,1
0222 E104 LDI R16,0x14
0223 D2A1 RCALL _Pwm_set
(0282) delay(15);
0224 E00F LDI R16,0xF
0225 E010 LDI R17,0
0226 DE56 RCALL _delay
(0283) Pwm_set(0,0);
0227 2722 CLR R18
0228 2700 CLR R16
0229 D29B RCALL _Pwm_set
022A 9508 RET
(0284) }
(0285)
(0286) void Rev_Setup()
(0287) {
(0288) e2rom[6] = EEPROM_read(6);
_Rev_Setup:
022B E006 LDI R16,6
022C D281 RCALL _EEPROM_read
022D 9300011A STS 0x11A,R16
(0289)
(0290) if(key()>3)
022F DFB1 RCALL _key
0230 E083 LDI R24,3
0231 1780 CP R24,R16
0232 F470 BCC 0x0241
(0291) {
(0292) if(e2rom[6]) e2rom[6]=0;
0233 9020011A LDS R2,0x11A
0235 2022 TST R2
0236 F021 BEQ 0x023B
0237 2422 CLR R2
0238 9220011A STS 0x11A,R2
023A C003 RJMP 0x023E
(0293) else e2rom[6] =1;
023B E081 LDI R24,1
023C 9380011A STS 0x11A,R24
(0294) Buz();
023E DFD6 RCALL _Buz
(0295) while(!(PINB&0x80)); // 等待按键松开
023F 9B1F SBIS 0x03,7
0240 CFFE RJMP 0x023F
(0296) }
(0297) EEPROM_write(6,e2rom[6]);
0241 9120011A LDS R18,0x11A
0243 E006 LDI R16,6
0244 D262 RCALL _EEPROM_write
0245 9508 RET
_Setup:
i --> R20
0246 D2DD RCALL push_gset1
(0298) }
(0299)
(0300)
(0301)
(0302) /*---------------------------------------------------------------
(0303) 中点设置
(0304) ----------------------------------------------------------------*/
(0305) void Setup()
(0306) {
(0307) uchar i;
(0308)
(0309)
(0310) if(key()>3) // 设置
0247 DF99 RCALL _key
0248 E083 LDI R24,3
0249 1780 CP R24,R16
024A F008 BCS 0x024C
024B C0DF RJMP 0x032B
(0311) {
(0312) loop: Buz();
024C DFC8 RCALL _Buz
(0313) middle = compute(); // 中位设置
024D DFA5 RCALL _compute
024E 93100108 STS middle+1,R17
0250 93000107 STS middle,R16
(0314)
(0315) delay(50);
0252 E302 LDI R16,0x32
0253 E010 LDI R17,0
0254 DE28 RCALL _delay
0255 C004 RJMP 0x025A
(0316) while(key()<3)
(0317) {
(0318) LED_set();
0256 DE45 RCALL _LED_set
(0319) delay(40);
0257 E208 LDI R16,0x28
0258 E010 LDI R17,0
0259 DE23 RCALL _delay
025A DF86 RCALL _key
025B 3003 CPI R16,3
025C F3C8 BCS 0x0256
(0320) }
(0321) Buz();
025D DFB7 RCALL _Buz
(0322) while(!(PINB&0x80));
025E 9B1F SBIS 0x03,7
025F CFFE RJMP 0x025E
(0323) high = compute(); // 高位设置
0260 DF92 RCALL _compute
0261 9310010A STS high+1,R17
0263 93000109 STS high,R16
(0324)
(0325) delay(50);
0265 E302 LDI R16,0x32
0266 E010 LDI R17,0
0267 DE15 RCALL _delay
0268 C005 RJMP 0x026E
(0326)
(0327) while(key()<3)
(0328) {
(0329) LED_set();
0269 DE32 RCALL _LED_set
(0330) LED_set();
026A DE31 RCALL _LED_set
(0331) delay(40);
026B E208 LDI R16,0x28
026C E010 LDI R17,0
026D DE0F RCALL _delay
026E DF72 RCALL _key
026F 3003 CPI R16,3
0270 F3C0 BCS 0x0269
(0332) }
(0333) Buz();
0271 DFA3 RCALL _Buz
(0334) while(!(PINB&0x80));
0272 9B1F SBIS 0x03,7
0273 CFFE RJMP 0x0272
(0335) low = compute(); // W低位设置
0274 DF7E RCALL _compute
0275 93100106 STS low+1,R17
0277 93000105 STS low,R16
(0336) delay(50);
0279 E302 LDI R16,0x32
027A E010 LDI R17,0
027B DE01 RCALL _delay
(0337)
(0338) // 设置数据正确存盘
(0339) if((low>800&&low<1300)&&(middle>1350&&middle<1650)&&(high>1700&&high<2200))
027C E280 LDI R24,0x20
027D E093 LDI R25,3
027E 90200105 LDS R2,low
0280 90300106 LDS R3,low+1
0282 1582 CP R24,R2
0283 0593 CPC R25,R3
0284 F008 BCS 0x0286
0285 C09E RJMP 0x0324
0286 01C1 MOVW R24,R2
0287 3184 CPI R24,0x14
0288 E0E5 LDI R30,5
0289 079E CPC R25,R30
028A F008 BCS 0x028C
028B C098 RJMP 0x0324
028C E486 LDI R24,0x46
028D E095 LDI R25,5
028E 90200107 LDS R2,middle
0290 90300108 LDS R3,middle+1
0292 1582 CP R24,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -