📄 motor.lis
字号:
0156 0A93 st -y,R16
0158 00910600 lds R16,_itime
015C 10910700 lds R17,_itime+1
0160 00D0 rcall int2fp
0162 3A93 st -y,R19
0164 2A93 st -y,R18
0166 1A93 st -y,R17
0168 0A93 st -y,R16
016A 00D0 rcall mpy32f
016C 00D0 rcall fp2int
016E A02E mov R10,R16
0170 B12E mov R11,R17
0172 .dbline 77
0172 ; y = TCNT1;
0172 CCB4 in R12,0x2c
0174 DDB4 in R13,0x2d
0176 .dbline 78
0176 ; Ek=y-speed;
0176 2C2C mov R2,R12
0178 3D2C mov R3,R13
017A 2E18 sub R2,R14
017C 3F08 sbc R3,R15
017E 30920100 sts _Ek+1,R3
0182 20920000 sts _Ek,R2
0186 .dbline 79
0186 ; u=k[0]*((Ek-Ek_1)+(t/k[1])*Ek+(k[2]/t)*(Ek-2*Ek_1+Ek_2));
0186 EC2F mov R30,R28
0188 FD2F mov R31,R29
018A 2280 ldd R2,z+2
018C 3380 ldd R3,z+3
018E 4480 ldd R4,z+4
0190 5580 ldd R5,z+5
0192 5A92 st -y,R5
0194 4A92 st -y,R4
0196 3A92 st -y,R3
0198 2A92 st -y,R2
019A 20900200 lds R2,_Ek_1
019E 30900300 lds R3,_Ek_1+1
01A2 00910000 lds R16,_Ek
01A6 10910100 lds R17,_Ek+1
01AA 0219 sub R16,R2
01AC 1309 sbc R17,R3
01AE 00D0 rcall int2fp
01B0 3A93 st -y,R19
01B2 2A93 st -y,R18
01B4 1A93 st -y,R17
01B6 0A93 st -y,R16
01B8 0A2D mov R16,R10
01BA 1B2D mov R17,R11
01BC 00D0 rcall int2fp
01BE 3A93 st -y,R19
01C0 2A93 st -y,R18
01C2 1A93 st -y,R17
01C4 0A93 st -y,R16
01C6 EC2F mov R30,R28
01C8 FD2F mov R31,R29
01CA ; stack offset 12
01CA 2288 ldd R2,z+18
01CC 3388 ldd R3,z+19
01CE 4488 ldd R4,z+20
01D0 5588 ldd R5,z+21
01D2 5A92 st -y,R5
01D4 4A92 st -y,R4
01D6 3A92 st -y,R3
01D8 2A92 st -y,R2
01DA 00D0 rcall div32fs
01DC 00910000 lds R16,_Ek
01E0 10910100 lds R17,_Ek+1
01E4 00D0 rcall int2fp
01E6 3A93 st -y,R19
01E8 2A93 st -y,R18
01EA 1A93 st -y,R17
01EC 0A93 st -y,R16
01EE 00D0 rcall mpy32fs
01F0 00D0 rcall add32fs
01F2 EC2F mov R30,R28
01F4 FD2F mov R31,R29
01F6 ; stack offset 8
01F6 2288 ldd R2,z+18
01F8 3388 ldd R3,z+19
01FA 4488 ldd R4,z+20
01FC 5588 ldd R5,z+21
01FE 5A92 st -y,R5
0200 4A92 st -y,R4
0202 3A92 st -y,R3
0204 2A92 st -y,R2
0206 0A2D mov R16,R10
0208 1B2D mov R17,R11
020A 00D0 rcall int2fp
020C 3A93 st -y,R19
020E 2A93 st -y,R18
0210 1A93 st -y,R17
0212 0A93 st -y,R16
0214 00D0 rcall div32fs
0216 20900200 lds R2,_Ek_1
021A 30900300 lds R3,_Ek_1+1
021E 220C lsl R2
0220 331C rol R3
0222 00910000 lds R16,_Ek
0226 10910100 lds R17,_Ek+1
022A 0219 sub R16,R2
022C 1309 sbc R17,R3
022E 20900400 lds R2,_Ek_2
0232 30900500 lds R3,_Ek_2+1
0236 020D add R16,R2
0238 131D adc R17,R3
023A 00D0 rcall int2fp
023C 3A93 st -y,R19
023E 2A93 st -y,R18
0240 1A93 st -y,R17
0242 0A93 st -y,R16
0244 00D0 rcall mpy32fs
0246 00D0 rcall add32fs
0248 00D0 rcall mpy32f
024A EC2F mov R30,R28
024C FD2F mov R31,R29
024E 0687 std z+14,R16
0250 1787 std z+15,R17
0252 208B std z+16,R18
0254 318B std z+17,R19
0256 .dbline 80
0256 ; z=u/U1*0xFF;
0256 00E0 ldi R16,<L26
0258 10E0 ldi R17,>L26
025A 00D0 rcall lpm32
025C 3A93 st -y,R19
025E 2A93 st -y,R18
0260 1A93 st -y,R17
0262 0A93 st -y,R16
0264 EC2F mov R30,R28
0266 FD2F mov R31,R29
0268 ; stack offset 4
0268 2288 ldd R2,z+18
026A 3388 ldd R3,z+19
026C 4488 ldd R4,z+20
026E 5588 ldd R5,z+21
0270 5A92 st -y,R5
0272 4A92 st -y,R4
0274 3A92 st -y,R3
0276 2A92 st -y,R2
0278 00E0 ldi R16,<L27
027A 10E0 ldi R17,>L27
027C 00D0 rcall lpm32
027E 3A93 st -y,R19
0280 2A93 st -y,R18
0282 1A93 st -y,R17
0284 0A93 st -y,R16
0286 00D0 rcall div32fs
0288 00D0 rcall mpy32f
028A 00D0 rcall fp2int
028C 1D8B std y+21,R17
028E 0C8B std y+20,R16
0290 .dbline 81
0290 ; temp1=OCR2;
0290 43B5 in R20,0x23
0292 .dbline 82
0292 ; if(flage==1) //监控状态
0292 80910600 lds R24,_flage
0296 8130 cpi R24,1
0298 91F4 brne L28
029A .dbline 83
029A ; {Data[4]=0xD0;
029A .dbline 83
029A 80ED ldi R24,208
029C 80931400 sts _Data+4,R24
02A0 .dbline 84
02A0 ; Data[5]=temp1;
02A0 40931500 sts _Data+5,R20
02A4 .dbline 85
02A4 ; Data[6]=y>>8;
02A4 2C2C mov R2,R12
02A6 3D2C mov R3,R13
02A8 232C mov R2,R3
02AA 3324 clr R3
02AC 27FC sbrc R2,7
02AE 3094 com R3
02B0 20921600 sts _Data+6,R2
02B4 .dbline 86
02B4 ; Data[7]=y;
02B4 C0921700 sts _Data+7,R12
02B8 .dbline 87
02B8 ; Putdata(Data);}
02B8 00E0 ldi R16,<_Data
02BA 10E0 ldi R17,>_Data
02BC A1DE rcall _Putdata
02BE .dbline 87
02BE L28:
02BE .dbline 88
02BE ; temp1=temp1+z;
02BE 242E mov R2,R20
02C0 3324 clr R3
02C2 0C88 ldd R0,y+20
02C4 1D88 ldd R1,y+21
02C6 200C add R2,R0
02C8 311C adc R3,R1
02CA 422D mov R20,R2
02CC .dbline 89
02CC ; if(temp1<=0) //结果小于0时输出0
02CC 2224 clr R2
02CE 2416 cp R2,R20
02D0 08F0 brlo L34
02D2 .dbline 90
02D2 ; temp1 = 0x00;
02D2 4427 clr R20
02D4 L34:
02D4 .dbline 91
02D4 ; if(temp1>=0xF0) //结果大于0xF0时输出0xF0
02D4 403F cpi R20,240
02D6 08F0 brlo L36
02D8 .dbline 92
02D8 ; temp1 = 0xF0;
02D8 40EF ldi R20,240
02DA L36:
02DA .dbline 93
02DA ; OCR2=temp1;
02DA 43BD out 0x23,R20
02DC .dbline 94
02DC ; Ek_2 = Ek_1;
02DC 20900200 lds R2,_Ek_1
02E0 30900300 lds R3,_Ek_1+1
02E4 30920500 sts _Ek_2+1,R3
02E8 20920400 sts _Ek_2,R2
02EC .dbline 95
02EC ; Ek_1 = Ek;
02EC 20900000 lds R2,_Ek
02F0 30900100 lds R3,_Ek+1
02F4 30920300 sts _Ek_1+1,R3
02F8 20920200 sts _Ek_1,R2
02FC .dbline 96
02FC ; TCNT1 = 0x0000; //计数器清零
02FC 2224 clr R2
02FE 3324 clr R3
0300 3DBC out 0x2d,R3
0302 2CBC out 0x2c,R2
0304 .dbline -2
0304 .dbline 97
0304 ; }
0304 L18:
0304 6696 adiw R28,22
0306 00D0 rcall pop_gset5
0308 .dbline 0 ; func end
0308 0895 ret
030A .dbsym r speed 14 I
030A .dbsym l z 20 I
030A .dbsym l u 14 D
030A .dbsym r t 10 I
030A .dbsym r y 12 I
030A .dbsym r temp1 20 c
030A .dbsym l k 2 A[12:3]D
030A .dbsym l i 18 I
030A .dbend
030A .dbfunc e USARTInit _USARTInit fV
030A ; baudrate -> R16,R17
.even
030A _USARTInit::
030A .dbline -1
030A .dbline 101
030A ;
030A ; //***************************串口初始化函数************************//
030A ; void USARTInit(int baudrate)
030A ; {UCR = (1<<TXEN)|(1<<RXCIE)|(1<<RXEN); //设置收发使能,接受中断允许
030A .dbline 101
030A 88E9 ldi R24,152
030C 8AB9 out 0xa,R24
030E .dbline 102
030E ; UBRR = baudrate; //设置波特率寄存器
030E 09B9 out 0x9,R16
0310 .dbline -2
0310 .dbline 103
0310 ; }
0310 L38:
0310 .dbline 0 ; func end
0310 0895 ret
0312 .dbsym r baudrate 16 I
0312 .dbend
0312 .dbfunc e Eepromdata _Eepromdata fV
.even
0312 _Eepromdata::
0312 2297 sbiw R28,2
0314 .dbline -1
0314 .dbline 107
0314 ;
0314 ; //***************************读EEPROM函数**************************//
0314 ; void Eepromdata(void)
0314 ; {if((adress==0x0000)||(adress==0x0004)||(adress==0x0008)) //地址判断
0314 .dbline 107
0314 20900E00 lds R2,_adress
0318 30900F00 lds R3,_adress+1
031C 2220 tst R2
031E 11F4 brne X0
0320 3320 tst R3
0322 61F0 breq L43
0324 X0:
0324 80910E00 lds R24,_adress
0328 90910F00 lds R25,_adress+1
032C 8430 cpi R24,4
032E E0E0 ldi R30,0
0330 9E07 cpc R25,R30
0332 21F0 breq L43
0334 8830 cpi R24,8
0336 E0E0 ldi R30,0
0338 9E07 cpc R25,R30
033A 61F4 brne L40
033C L43:
033C .dbline 108
033C ; EEPROMReadBytes(adress,&Data[4],4);
033C 84E0 ldi R24,4
033E 90E0 ldi R25,0
0340 9983 std y+1,R25
0342 8883 std y+0,R24
0344 20E0 ldi R18,<_Data+4
0346 30E0 ldi R19,>_Data+4
0348 00910E00 lds R16,_adress
034C 10910F00 lds R17,_adress+1
0350 00D0 rcall _EEPROMReadBytes
0352 0BC0 rjmp L41
0354 L40:
0354 .dbline 110
0354 ; else
0354 ; EEPROMReadBytes(adress,&Data[6],2);
0354 82E0 ldi R24,2
0356 90E0 ldi R25,0
0358 9983 std y+1,R25
035A 8883 std y+0,R24
035C 20E0 ldi R18,<_Data+6
035E 30E0 ldi R19,>_Data+6
0360 00910E00 lds R16,_adress
0364 10910F00 lds R17,_adress+1
0368 00D0 rcall _EEPROMReadBytes
036A L41:
036A .dbline 111
036A ; switch(adress)
036A 80910E00 lds R24,_adress
036E 90910F00 lds R25,_adress+1
0372 8430 cpi R24,4
0374 E0E0 ldi R30,0
0376 9E07 cpc R25,R30
0378 99F1 breq L50
037A 84E0 ldi R24,4
037C 90E0 ldi R25,0
037E 20900E00 lds R2,_adress
0382 30900F00 lds R3,_adress+1
0386 8215 cp R24,R2
0388 9305 cpc R25,R3
038A 4CF0 brlt L61
038C L60:
038C 20900E00 lds R2,_adress
0390 30900F00 lds R3,_adress+1
0394 2220 tst R2
0396 11F4 brne X1
0398 3320 tst R3
039A F1F0 breq L48
039C X1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -