📄 m8pwm.lst
字号:
0245 B74F IN R20,0x3F
(0313) CLI(); // 关闭中断
0246 94F8 BCLR 7
(0314) if(Address >EEP_RANG)Address=EEP_RANG;
0247 EA8A LDI R24,0xAA
0248 1780 CP R24,R16
0249 F408 BCC 0x024B
024A EA0A LDI R16,0xAA
(0315) for(k=0;k<3;k++)
024B 2766 CLR R22
024C C012 RJMP 0x025F
(0316) {
(0317) while(EECR & (1<<EEWE));
024D 99E1 SBIC 0x1C,1
024E CFFE RJMP 0x024D
(0318) EEAR = (Address+k*EEP_RANG); // 写地址,相隔rang个单元
024F EA8A LDI R24,0xAA
0250 9F86 MUL R24,R22
0251 2E20 MOV R2,R16
0252 2433 CLR R3
0253 0C20 ADD R2,R0
0254 1C31 ADC R3,R1
0255 BA3F OUT 0x1F,R3
0256 BA2E OUT 0x1E,R2
(0319) EEDR = Data; // 写数据
0257 BB2D OUT 0x1D,R18
(0320) EECR |= (1<<EEMWE); // 置位EEMWE同时清零EEWE
0258 9AE2 SBI 0x1C,2
(0321) EECR |= (1<<EEWE); // 在4个时钟周期内置位EEWE
0259 9AE1 SBI 0x1C,1
(0322) EEAR = 0;
025A 2422 CLR R2
025B 2433 CLR R3
025C BA3F OUT 0x1F,R3
025D BA2E OUT 0x1E,R2
025E 9563 INC R22
025F 3063 CPI R22,3
0260 F360 BCS 0x024D
(0323) }
(0324) SREG =tmpeeprom; // 恢复当前设置
0261 BF4F OUT 0x3F,R20
(0325) SEI(); // 打开中断
0262 9478 BSET 7
0263 D090 RCALL pop_gset2
0264 9508 RET
(0326) }
(0327) /***************************************************************************
(0328) 系统初始化
(0329) ****************************************************************************/
(0330) void Hardware_init(void)
(0331) {
(0332) CLI();
_Hardware_init:
0265 94F8 BCLR 7
(0333) Port_init();
0266 DDDC RCALL _Port_init
(0334) uart0_init();
0267 DDE4 RCALL _uart0_init
(0335) Timer1_init();
0268 DDEE RCALL _Timer1_init
(0336) Timer2_init();
0269 DE03 RCALL _Timer2_init
(0337) adc_init();
026A DE0B RCALL _adc_init
(0338) MCUCR = (0x01<<ISC01)|(0x01<<ISC11);//INT0、1下降沿触发
026B E08A LDI R24,0xA
026C BF85 OUT 0x35,R24
(0339) GICR = (0x01<<INT0)|(0x01<<INT1); //INT0、1使能
026D EC80 LDI R24,0xC0
026E BF8B OUT 0x3B,R24
(0340) TIMSK = (0x01<<OCIE1A);
026F E180 LDI R24,0x10
0270 BF89 OUT 0x39,R24
(0341) SEI();
0271 9478 BSET 7
(0342) BRAKE_LED_OFF;
0272 B385 IN R24,0x15
0273 7F8C ANDI R24,0xFC
0274 BB85 OUT 0x15,R24
(0343) KiloMeter=EepromRead(1)+EepromRead(2)*0x100;
0275 E001 LDI R16,1
0276 DF72 RCALL _EepromRead
0277 2E20 MOV R2,R16
0278 E002 LDI R16,2
0279 922F PUSH R2
027A DF6E RCALL _EepromRead
027B 902F POP R2
027C 2F20 MOV R18,R16
027D 2733 CLR R19
027E E000 LDI R16,0
027F E011 LDI R17,1
0280 D063 RCALL empy16s
0281 2433 CLR R3
0282 0E20 ADD R2,R16
0283 1E31 ADC R3,R17
0284 92300066 STS KiloMeter+1,R3
0286 92200065 STS KiloMeter,R2
(0344) OldKiloMeter=KiloMeter;
0288 92300068 STS OldKiloMeter+1,R3
028A 92200067 STS OldKiloMeter,R2
(0345) if(KiloMeter==0xffff)KiloMeter=0;
028C 01C1 MOVW R24,R2
028D 3F8F CPI R24,0xFF
028E EFEF LDI R30,0xFF
028F 079E CPC R25,R30
0290 F431 BNE 0x0297
0291 2422 CLR R2
0292 2433 CLR R3
0293 92300066 STS KiloMeter+1,R3
0295 92200065 STS KiloMeter,R2
0297 9508 RET
_Delay_ms:
l --> R20
j --> R22
m --> R16
0298 D065 RCALL push_gset2
(0346) }
(0347)
(0348) /***************************************************************************
(0349) 延时程序
(0350) ****************************************************************************/
(0351)
(0352) void Delay_ms(unsigned int m) //1ms延时
(0353) {
(0354) int l,j;
(0355) for(l=0;l<m;l++)
0299 2744 CLR R20
029A 2755 CLR R21
029B C00A RJMP 0x02A6
(0356) for(j=0;j<500;j++)
029C 2766 CLR R22
029D 2777 CLR R23
029E 5F6F SUBI R22,0xFF
029F 4F7F SBCI R23,0xFF
02A0 3F64 CPI R22,0xF4
02A1 E0E1 LDI R30,1
02A2 077E CPC R23,R30
02A3 F3D4 BLT 0x029E
02A4 5F4F SUBI R20,0xFF
02A5 4F5F SBCI R21,0xFF
02A6 1740 CP R20,R16
02A7 0751 CPC R21,R17
02A8 F398 BCS 0x029C
02A9 D04A RCALL pop_gset2
02AA 9508 RET
(0357) {
(0358) ;
(0359) }
(0360) }
(0361) /**************************************************************************
(0362) 主函数
(0363) **************************************************************************/
(0364) void main(void)
(0365) {
(0366) int k=0,adc=0;
_main:
k --> R20
adc --> R20
edata --> R22
02AB 2744 CLR R20
02AC 2755 CLR R21
(0367) uchar edata;
(0368) Hardware_init();
02AD DFB7 RCALL _Hardware_init
02AE C02E RJMP 0x02DD
(0369) while(1)
(0370) {
(0371) if(KiloMeter!=OldKiloMeter)
02AF 90200067 LDS R2,OldKiloMeter
02B1 90300068 LDS R3,OldKiloMeter+1
02B3 90400065 LDS R4,KiloMeter
02B5 90500066 LDS R5,KiloMeter+1
02B7 1442 CP R4,R2
02B8 0453 CPC R5,R3
02B9 F0A9 BEQ 0x02CF
(0372) {
(0373) edata = KiloMeter&0x00ff;
02BA 2D64 MOV R22,R4
02BB 7070 ANDI R23,0
(0374) if(edata) //只改变十位个位
02BC 2366 TST R22
02BD F021 BEQ 0x02C2
(0375) {
(0376) EepromWrite(1,edata); //30ms
02BE 2F26 MOV R18,R22
02BF E001 LDI R16,1
02C0 DF83 RCALL _EepromWrite
(0377) }
02C1 C00D RJMP 0x02CF
(0378) else
(0379) { //60ms
(0380) EepromWrite(1,edata);
02C2 2F26 MOV R18,R22
02C3 E001 LDI R16,1
02C4 DF7F RCALL _EepromWrite
(0381) edata = (KiloMeter>>8)&0x00ff;
02C5 91600065 LDS R22,KiloMeter
02C7 91700066 LDS R23,KiloMeter+1
02C9 2F67 MOV R22,R23
02CA 2777 CLR R23
02CB 7070 ANDI R23,0
(0382) EepromWrite(2,edata);
02CC 2F26 MOV R18,R22
02CD E002 LDI R16,2
02CE DF75 RCALL _EepromWrite
(0383) }
(0384) }
(0385) if(++adc>1)
02CF 5F4F SUBI R20,0xFF
02D0 4F5F SBCI R21,0xFF
02D1 E081 LDI R24,1
02D2 E090 LDI R25,0
02D3 1784 CP R24,R20
02D4 0795 CPC R25,R21
02D5 F41C BGE 0x02D9
(0386) {
(0387) ADCSRA |=(1<<ADSC); //启动AD转换
02D6 9A36 SBI 0x06,6
(0388) adc=0;
02D7 2744 CLR R20
02D8 2755 CLR R21
(0389) }
(0390) Delay_ms(100);
02D9 E604 LDI R16,0x64
02DA E010 LDI R17,0
02DB DFBC RCALL _Delay_ms
(0391) SpeedControl();
FILE: <library>
02DC DEEE RCALL _SpeedControl
02DD CFD1 RJMP 0x02AF
02DE 9508 RET
push_arg4:
02DF 933A ST R19,-Y
02E0 932A ST R18,-Y
push_arg2:
02E1 931A ST R17,-Y
02E2 930A ST R16,-Y
02E3 9508 RET
empy16s:
02E4 920A ST R0,-Y
02E5 921A ST R1,-Y
02E6 938A ST R24,-Y
02E7 939A ST R25,-Y
02E8 9F02 MUL R16,R18
02E9 01C0 MOVW R24,R0
02EA 9F12 MUL R17,R18
02EB 0D90 ADD R25,R0
02EC 9F03 MUL R16,R19
02ED 0D90 ADD R25,R0
02EE 018C MOVW R16,R24
02EF 9199 LD R25,Y+
02F0 9189 LD R24,Y+
02F1 9019 LD R1,Y+
02F2 9009 LD R0,Y+
02F3 9508 RET
pop_gset2:
02F4 E0E2 LDI R30,2
02F5 C00E RJMP pop
pop_gset4:
02F6 E0E8 LDI R30,0x8
02F7 C00C RJMP pop
push_gset5:
02F8 92FA ST R15,-Y
02F9 92EA ST R14,-Y
push_gset4:
02FA 92DA ST R13,-Y
02FB 92CA ST R12,-Y
push_gset3:
02FC 92BA ST R11,-Y
02FD 92AA ST R10,-Y
push_gset2:
02FE 937A ST R23,-Y
02FF 936A ST R22,-Y
push_gset1:
0300 935A ST R21,-Y
0301 934A ST R20,-Y
0302 9508 RET
pop_gset1:
0303 E0E1 LDI R30,1
pop:
0304 9149 LD R20,Y+
0305 9159 LD R21,Y+
0306 FDE0 SBRC R30,0
0307 9508 RET
0308 9169 LD R22,Y+
0309 9179 LD R23,Y+
030A FDE1 SBRC R30,1
030B 9508 RET
030C 90A9 LD R10,Y+
030D 90B9 LD R11,Y+
030E FDE2 SBRC R30,2
030F 9508 RET
0310 90C9 LD R12,Y+
0311 90D9 LD R13,Y+
0312 FDE3 SBRC R30,3
0313 9508 RET
0314 90E9 LD R14,Y+
0315 90F9 LD R15,Y+
0316 9508 RET
neg32:
0317 9500 COM R16
0318 9510 COM R17
0319 9520 COM R18
031A 9530 COM R19
031B 5F0F SUBI R16,0xFF
031C 4F1F SBCI R17,0xFF
031D 4F2F SBCI R18,0xFF
031E 4F3F SBCI R19,0xFF
031F 9508 RET
lpm32:
0320 93EA ST R30,-Y
0321 93FA ST R31,-Y
0322 920A ST R0,-Y
0323 2FE0 MOV R30,R16
0324 2FF1 MOV R31,R17
0325 95C8 LPM
0326 2D00 MOV R16,R0
0327 9631 ADIW R30,1
0328 95C8 LPM
0329 2D10 MOV R17,R0
032A 9631 ADIW R30,1
032B 95C8 LPM
032C 2D20 MOV R18,R0
032D 9631 ADIW R30,1
032E 95C8 LPM
032F 2D30 MOV R19,R0
0330 9009 LD R0,Y+
0331 91F9 LD R31,Y+
0332 91E9 LD R30,Y+
0333 9508 RET
push_lset:
0334 93FA ST R31,-Y
0335 93EA ST R30,-Y
0336 93BA ST R27,-Y
0337 93AA ST R26,-Y
0338 939A ST R25,-Y
0339 938A ST R24,-Y
033A 933A ST R19,-Y
033B 932A ST R18,-Y
033C 931A ST R17,-Y
033D 930A ST R16,-Y
033E 929A ST R9,-Y
033F 928A ST R8,-Y
0340 927A ST R7,-Y
0341 926A ST R6,-Y
0342 925A ST R5,-Y
0343 924A ST R4,-Y
0344 923A ST R3,-Y
0345 922A ST R2,-Y
0346 921A ST R1,-Y
0347 920A ST R0,-Y
0348 B60F IN R0,0x3F
0349 920A ST R0,-Y
034A 9508 RET
pop_lset:
034B 9009 LD R0,Y+
034C BE0F OUT 0x3F,R0
034D 9009 LD R0,Y+
034E 9019 LD R1,Y+
034F 9029 LD R2,Y+
0350 9039 LD R3,Y+
0351 9049 LD R4,Y+
0352 9059 LD R5,Y+
0353 9069 LD R6,Y+
0354 9079 LD R7,Y+
0355 9089 LD R8,Y+
0356 9099 LD R9,Y+
0357 9109 LD R16,Y+
0358 9119 LD R17,Y+
0359 9129 LD R18,Y+
035A 9139 LD R19,Y+
035B 9189 LD R24,Y+
035C 9199 LD R25,Y+
035D 91A9 LD R26,Y+
035E 91B9 LD R27,Y+
035F 91E9 LD R30,Y+
0360 91F9 LD R31,Y+
0361 9508 RET
fp2int:
0362 D15D RCALL savfacc1
0363 D00F RCALL FTOI
0364 2F02 MOV R16,R18
0365 2F13 MOV R17,R19
0366 FD87 SBRC R24,7
0367 C001 RJMP nojump1
0368 C15A RJMP restorefacc1
nojump1:
0369 9510 COM R17
036A 9501 NEG R16
036B 4F1F SBCI R17,0xFF
036C C156 RJMP restorefacc1
fp2long:
036D D152 RCALL savfacc1
036E D006 RCALL FTOL
036F FF87 SBRS R24,7
0370 C001 RJMP nojump2
0371 DFA5 RCALL neg32
nojump2:
0372 C150 RJMP restorefacc1
FTOI:
0373 E0BE LDI R27,0xE
0374 C001 RJMP 0x0376
FTOL:
0375 E1BE LDI R27,0x1E
0376 D14F RCALL unpackfacc1
0377 F059 BEQ 0x0383
0378 1BB3 SUB R27,R19
0379 F009 BEQ 0x037B
037A F45A BPL 0x0386
037B 2388 TST R24
037C F01A BMI 0x0380
037D E010 LDI R17,0
037E E20E LDI R16,0x2E
037F CFA0 RJMP lpm32
0380 E010 LDI R17,0
0381 E304 LDI R16,0x34
0382 CF9D RJMP lpm32
0383 E010 LDI R17,0
0384 E302 LDI R16,0x32
0385 CF9A RJMP lpm32
0386 9533 INC R19
0387 F3DA BMI 0x0383
0388 E030 LDI R19,0
0389 50B8 SUBI R27,0x8
038A F452 BPL 0x0395
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -