📄 main.lst
字号:
0293 0593 CPC R25,R3
0294 F008 BCS 0x0296
0295 C08E RJMP 0x0324
0296 01C1 MOVW R24,R2
0297 3782 CPI R24,0x72
0298 E0E6 LDI R30,6
0299 079E CPC R25,R30
029A F008 BCS 0x029C
029B C088 RJMP 0x0324
029C EA84 LDI R24,0xA4
029D E096 LDI R25,6
029E 90200109 LDS R2,high
02A0 9030010A LDS R3,high+1
02A2 1582 CP R24,R2
02A3 0593 CPC R25,R3
02A4 F008 BCS 0x02A6
02A5 C07E RJMP 0x0324
02A6 01C1 MOVW R24,R2
02A7 3988 CPI R24,0x98
02A8 E0E8 LDI R30,0x8
02A9 079E CPC R25,R30
02AA F008 BCS 0x02AC
02AB C078 RJMP 0x0324
(0340) {
(0341) PE1 = ((high-middle)*10)/256+2;
02AC 90200107 LDS R2,middle
02AE 90300108 LDS R3,middle+1
02B0 019C MOVW R18,R24
02B1 1922 SUB R18,R2
02B2 0933 SBC R19,R3
02B3 E00A LDI R16,0xA
02B4 E010 LDI R17,0
02B5 D250 RCALL empy16s
02B6 01C8 MOVW R24,R16
02B7 2F89 MOV R24,R25
02B8 2799 CLR R25
02B9 9602 ADIW R24,2
02BA 93900113 STS PE1+1,R25
02BC 93800112 STS PE1,R24
(0342) PE2 = ((middle-low )*10)/256+2;
02BE 90200105 LDS R2,low
02C0 90300106 LDS R3,low+1
02C2 91200107 LDS R18,middle
02C4 91300108 LDS R19,middle+1
02C6 1922 SUB R18,R2
02C7 0933 SBC R19,R3
02C8 E00A LDI R16,0xA
02C9 E010 LDI R17,0
02CA D23B RCALL empy16s
02CB 01C8 MOVW R24,R16
02CC 2F89 MOV R24,R25
02CD 2799 CLR R25
02CE 9602 ADIW R24,2
02CF 93900111 STS PE2+1,R25
02D1 93800110 STS PE2,R24
(0343)
(0344) e2rom[0] = low/256;
02D3 90200105 LDS R2,low
02D5 90300106 LDS R3,low+1
02D7 2C23 MOV R2,R3
02D8 2433 CLR R3
02D9 92200114 STS e2rom,R2
(0345) e2rom[1] = low%256;
02DB 91800105 LDS R24,low
02DD 91900106 LDS R25,low+1
02DF 7090 ANDI R25,0
02E0 93800115 STS e2rom+1,R24
(0346)
(0347) e2rom[2] = high/256;
02E2 90200109 LDS R2,high
02E4 9030010A LDS R3,high+1
02E6 2C23 MOV R2,R3
02E7 2433 CLR R3
02E8 92200116 STS e2rom+2,R2
(0348) e2rom[3] = high%256;
02EA 91800109 LDS R24,high
02EC 9190010A LDS R25,high+1
02EE 7090 ANDI R25,0
02EF 93800117 STS e2rom+3,R24
(0349)
(0350) e2rom[4] = middle/256;
02F1 90200107 LDS R2,middle
02F3 90300108 LDS R3,middle+1
02F5 2C23 MOV R2,R3
02F6 2433 CLR R3
02F7 92200118 STS 0x118,R2
(0351) e2rom[5] = middle%256;
02F9 91800107 LDS R24,middle
02FB 91900108 LDS R25,middle+1
02FD 7090 ANDI R25,0
02FE 93800119 STS 0x119,R24
(0352)
(0353) Buz();
0300 DF14 RCALL _Buz
(0354) for(i=0;i<6;i++) // 写EEPOM
0301 2744 CLR R20
0302 C018 RJMP 0x031B
(0355) {
(0356) EEPROM_write(i,e2rom[i]);
0303 E184 LDI R24,0x14
0304 E091 LDI R25,1
0305 2FE4 MOV R30,R20
0306 27FF CLR R31
0307 0FE8 ADD R30,R24
0308 1FF9 ADC R31,R25
0309 8120 LDD R18,Z+0
030A 2F04 MOV R16,R20
030B D19B RCALL _EEPROM_write
(0357) delay(5);
030C E005 LDI R16,5
030D E010 LDI R17,0
030E DD6E RCALL _delay
(0358) while(compute()<1350||compute()>1650);
030F DEE3 RCALL _compute
0310 3406 CPI R16,0x46
0311 E0E5 LDI R30,5
0312 071E CPC R17,R30
0313 F3D8 BCS 0x030F
0314 DEDE RCALL _compute
0315 E782 LDI R24,0x72
0316 E096 LDI R25,6
0317 1780 CP R24,R16
0318 0791 CPC R25,R17
0319 F3A8 BCS 0x030F
031A 9543 INC R20
031B 3046 CPI R20,6
031C F330 BCS 0x0303
(0359) }
(0360) LED_set();
031D DD7E RCALL _LED_set
(0361) delay(10);
031E E00A LDI R16,0xA
031F E010 LDI R17,0
0320 DD5C RCALL _delay
(0362) LED_set();
0321 DD7A RCALL _LED_set
(0363) }
0322 C008 RJMP 0x032B
(0364) else // 设置不对重来
(0365) {
(0366) while(key()<3)
(0367) {
(0368) LED_set();
0323 DD78 RCALL _LED_set
0324 DEBC RCALL _key
0325 3003 CPI R16,3
0326 F3E0 BCS 0x0323
(0369) }
(0370) delay(100);
0327 E604 LDI R16,0x64
0328 E010 LDI R17,0
0329 DD53 RCALL _delay
(0371) goto loop;
032A CF21 RJMP 0x024C
(0372)
(0373) }
(0374) }
032B D1FB RCALL pop_gset1
032C 9508 RET
_Read_E2rom:
i --> R20
032D D1F6 RCALL push_gset1
(0375) }
(0376)
(0377)
(0378) void Read_E2rom(void)
(0379) {
(0380) uchar i;
(0381)
(0382) for(i=0;i<7;i++) // 读EEPOM
032E 2744 CLR R20
032F C00D RJMP 0x033D
(0383) {
(0384) e2rom[i] = EEPROM_read(i);
0330 2F04 MOV R16,R20
0331 D17C RCALL _EEPROM_read
0332 E184 LDI R24,0x14
0333 E091 LDI R25,1
0334 2FE4 MOV R30,R20
0335 27FF CLR R31
0336 0FE8 ADD R30,R24
0337 1FF9 ADC R31,R25
0338 8300 STD Z+0,R16
(0385) delay(5);
0339 E005 LDI R16,5
033A E010 LDI R17,0
033B DD41 RCALL _delay
033C 9543 INC R20
033D 3047 CPI R20,7
033E F388 BCS 0x0330
(0386) }
(0387)
(0388) low = e2rom[0]*256+e2rom[1]; // 油门低位
033F 91200114 LDS R18,e2rom
0341 2733 CLR R19
0342 E000 LDI R16,0
0343 E011 LDI R17,1
0344 D1C1 RCALL empy16s
0345 0118 MOVW R2,R16
0346 90400115 LDS R4,e2rom+1
0348 2455 CLR R5
0349 0C24 ADD R2,R4
034A 1C35 ADC R3,R5
034B 92300106 STS low+1,R3
034D 92200105 STS low,R2
(0389) high = e2rom[2]*256+e2rom[3]; // 高位
034F 91200116 LDS R18,e2rom+2
0351 2733 CLR R19
0352 E000 LDI R16,0
0353 E011 LDI R17,1
0354 D1B1 RCALL empy16s
0355 0118 MOVW R2,R16
0356 90400117 LDS R4,e2rom+3
0358 2455 CLR R5
0359 0C24 ADD R2,R4
035A 1C35 ADC R3,R5
035B 9230010A STS high+1,R3
035D 92200109 STS high,R2
(0390) middle = e2rom[4]*256+e2rom[5]; // 中位
035F 91200118 LDS R18,0x118
0361 2733 CLR R19
0362 E000 LDI R16,0
0363 E011 LDI R17,1
0364 D1A1 RCALL empy16s
0365 0118 MOVW R2,R16
0366 90400119 LDS R4,0x119
0368 2455 CLR R5
0369 0C24 ADD R2,R4
036A 1C35 ADC R3,R5
036B 92300108 STS middle+1,R3
036D 92200107 STS middle,R2
(0391) REV = e2rom[6]; // 倒车标致
036F 9020011A LDS R2,0x11A
0371 92200104 STS REV,R2
(0392)
(0393) if((low>800&&low<1300)&&(middle>1350&&middle<1650)&&(high>1700&&high<2200))
0373 E280 LDI R24,0x20
0374 E093 LDI R25,3
0375 90200105 LDS R2,low
0377 90300106 LDS R3,low+1
0379 1582 CP R24,R2
037A 0593 CPC R25,R3
037B F008 BCS 0x037D
037C C04B RJMP 0x03C8
037D 01C1 MOVW R24,R2
037E 3184 CPI R24,0x14
037F E0E5 LDI R30,5
0380 079E CPC R25,R30
0381 F008 BCS 0x0383
0382 C045 RJMP 0x03C8
0383 E486 LDI R24,0x46
0384 E095 LDI R25,5
0385 90200107 LDS R2,middle
0387 90300108 LDS R3,middle+1
0389 1582 CP R24,R2
038A 0593 CPC R25,R3
038B F008 BCS 0x038D
038C C03B RJMP 0x03C8
038D 01C1 MOVW R24,R2
038E 3782 CPI R24,0x72
038F E0E6 LDI R30,6
0390 079E CPC R25,R30
0391 F5B0 BCC 0x03C8
0392 EA84 LDI R24,0xA4
0393 E096 LDI R25,6
0394 90200109 LDS R2,high
0396 9030010A LDS R3,high+1
0398 1582 CP R24,R2
0399 0593 CPC R25,R3
039A F568 BCC 0x03C8
039B 01C1 MOVW R24,R2
039C 3988 CPI R24,0x98
039D E0E8 LDI R30,0x8
039E 079E CPC R25,R30
039F F540 BCC 0x03C8
(0394) { // 读起的数据正确
(0395) PE1 = ((high-middle)*10)/256+2;
03A0 90200107 LDS R2,middle
03A2 90300108 LDS R3,middle+1
03A4 019C MOVW R18,R24
03A5 1922 SUB R18,R2
03A6 0933 SBC R19,R3
03A7 E00A LDI R16,0xA
03A8 E010 LDI R17,0
03A9 D15C RCALL empy16s
03AA 01C8 MOVW R24,R16
03AB 2F89 MOV R24,R25
03AC 2799 CLR R25
03AD 9602 ADIW R24,2
03AE 93900113 STS PE1+1,R25
03B0 93800112 STS PE1,R24
(0396) PE2 = ((middle-low )*10)/256+2;
03B2 90200105 LDS R2,low
03B4 90300106 LDS R3,low+1
03B6 91200107 LDS R18,middle
03B8 91300108 LDS R19,middle+1
03BA 1922 SUB R18,R2
03BB 0933 SBC R19,R3
03BC E00A LDI R16,0xA
03BD E010 LDI R17,0
03BE D147 RCALL empy16s
03BF 01C8 MOVW R24,R16
03C0 2F89 MOV R24,R25
03C1 2799 CLR R25
03C2 9602 ADIW R24,2
03C3 93900111 STS PE2+1,R25
03C5 93800110 STS PE2,R24
(0397) }
03C7 C01F RJMP 0x03E7
(0398) else // 读起的数据不正确使用默认值
(0399) {
(0400) PE1 = 23;
03C8 E187 LDI R24,0x17
03C9 E090 LDI R25,0
03CA 93900113 STS PE1+1,R25
03CC 93800112 STS PE1,R24
(0401) PE2 = 23;
03CE 93900111 STS PE2+1,R25
03D0 93800110 STS PE2,R24
(0402) middle = 1500;
03D2 ED8C LDI R24,0xDC
03D3 E095 LDI R25,5
03D4 93900108 STS middle+1,R25
03D6 93800107 STS middle,R24
(0403) low = 1100;
03D8 E48C LDI R24,0x4C
03D9 E094 LDI R25,4
03DA 93900106 STS low+1,R25
03DC 93800105 STS low,R24
(0404) high = 1900;
03DE E68C LDI R24,0x6C
03DF E097 LDI R25,7
03E0 9390010A STS high+1,R25
03E2 93800109 STS high,R24
(0405) REV = 1;
03E4 E081 LDI R24,1
03E5 93800104 STS REV,R24
(0406) }
03E7 D13F RCALL pop_gset1
03E8 9508 RET
_int0_isr:
03E9 922A ST R2,-Y
03EA 923A ST R3,-Y
03EB 938A ST R24,-Y
03EC B62F IN R2,0x3F
03ED 922A ST R2,-Y
(0407) }
(0408)
(0409)
(0410)
(0411) /*---------------------------------------------------------------
(0412) INT0 中断油门接收
(0413) ----------------------------------------------------------------*/
(0414) #pragma interrupt_handler int0_isr:2
(0415) void int0_isr(void)
(0416) {
(0417) if(EICRA==0x03) // 上升沿开始记时
03EE 91800069 LDS R24,0x69
03F0 3083 CPI R24,3
03F1 F459 BNE 0x03FD
(0418) {
(0419) TCNT1H = 0x00;
03F2 2422 CLR R2
03F3 92200085 STS 0x85,R2
(0420) TCNT1L = 0x00;
03F5 92200084 STS 0x84,R2
(0421) TCCR1B = 0x02; //start Timer1
03F7 E082 LDI R24,2
03F8 93800081 STS 0x81,R24
(0422) EICRA = 0x02;
03FA 93800069 STS 0x69,R24
(0423) }
03FC C01F RJMP 0x041C
(0424) else if(EICRA==0x02) // 下降沿读计时数据
03FD 91800069 LDS R24,0x69
03FF 3082 CPI R24,2
0400 F4D9 BNE 0x041C
(0425) {
(0426) time.data[0] = TCNT1L;
0401 90200084 LDS R2,0x84
0403 92200100 STS time,R2
(0427) time.data[1] = TCNT1H;
0405 90200085 LDS R2,0x85
0407 92200101 STS time+1,R2
(0428) Timer = time.temp;
0409 90200100 LDS R2,time
040B 90300101 LDS R3,time+1
040D 9230010C STS Timer+1,R3
040F 9220010B STS Timer,R2
(0429) TCNT1H = 0x00;
0411 2422 CLR R2
0412 92200085 STS 0x85,R2
(0430) TCNT1L = 0x00;
0414 92200084 STS 0x84,R2
(0431) EICRA = 0x03;
0416 E083 LDI R24,3
0417 93800069 STS 0x69,R24
(0432) rxd_flag =1; // 置接收 flag
0419 E081 LDI R24,1
041A 9380010E STS rxd_flag,R24
(0433) }
041C 9029 LD R2,Y+
041D BE2F OUT 0x3F,R2
041E 9189 LD R24,Y+
041F 9039 LD R3,Y+
0420 9029 LD R2,Y+
0421 9518 RETI
(0434) }
(0435)
(0436)
(0437) /*---------------------------------------------------------------
(0438) main
(0439) ----------------------------------------------------------------*/
(0440)
(0441) void main(void)
(0442) {
(0443) delay(10);
_main:
0422 E00A LDI R16,0xA
0423 E010 LDI R17,0
0424 DC58 RCALL _delay
(0444)
(0445) init_devices(); // 初始化
0425 DC3D RCALL _init_devices
(0446)
(0447) Rev_Setup();
0426 DE04 RCALL _Rev_Setup
(0448)
(0449) Read_E2rom(); // 读EEPROM
0427 DF05 RCALL _Read_E2rom
(0450)
(0451) while(!rxd_flag); // 等待油门信号
0428 9020010E LDS R2,rxd_flag
042A 2022 TST R2
042B F3E1 BEQ 0x0428
(0452) Buz();
042C DDE8 RCALL _Buz
(0453)
(0454) LED_set();
042D DC6E RCALL _LED_set
(0455) delay(10);
042E E00A LDI R16,0xA
042F E010 LDI R17,0
0430 DC4C RCALL _delay
(0456) LED_set();
0431 DC6A RCALL _LED_set
(0457)
(0458) rxd_flag = 0 ;
0432 2422 CLR R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -