📄 ac18-1.lst
字号:
019B 8388 STD Y+0,R24
019C 2722 CLR R18
019D 2700 CLR R16
019E 940E099F CALL _ePutstr
(0189) ePutstr(0,1,str1);
01A0 E98D LDI R24,0x9D
01A1 E090 LDI R25,0
01A2 8399 STD Y+1,R25
01A3 8388 STD Y+0,R24
01A4 E021 LDI R18,1
01A5 2700 CLR R16
01A6 940E099F CALL _ePutstr
(0190) ePutstr(0,2,str2);
01A8 EA8E LDI R24,0xAE
01A9 E090 LDI R25,0
01AA 8399 STD Y+1,R25
01AB 8388 STD Y+0,R24
01AC E022 LDI R18,2
01AD 2700 CLR R16
01AE 940E099F CALL _ePutstr
(0191) ePutstr(0,3,str3);
01B0 EB8F LDI R24,0xBF
01B1 E090 LDI R25,0
01B2 8399 STD Y+1,R25
01B3 8388 STD Y+0,R24
01B4 E023 LDI R18,3
01B5 2700 CLR R16
01B6 940E099F CALL _ePutstr
01B8 9622 ADIW R28,2
01B9 9508 RET
_test_display:
01BA 9722 SBIW R28,2
(0192) }
(0193) /************************测试界面*************************/
(0194) void test_display(void)
(0195) {
(0196) ePutstr(0,0,cs0);
01BB ED80 LDI R24,0xD0
01BC E090 LDI R25,0
01BD 8399 STD Y+1,R25
01BE 8388 STD Y+0,R24
01BF 2722 CLR R18
01C0 2700 CLR R16
01C1 940E099F CALL _ePutstr
(0197) ePutstr(0,1,cs1);
01C3 EE81 LDI R24,0xE1
01C4 E090 LDI R25,0
01C5 8399 STD Y+1,R25
01C6 8388 STD Y+0,R24
01C7 E021 LDI R18,1
01C8 2700 CLR R16
01C9 940E099F CALL _ePutstr
(0198) ePutstr(0,2,cs2);
01CB EF82 LDI R24,0xF2
01CC E090 LDI R25,0
01CD 8399 STD Y+1,R25
01CE 8388 STD Y+0,R24
01CF E022 LDI R18,2
01D0 2700 CLR R16
01D1 940E099F CALL _ePutstr
(0199) ePutstr(0,3,cs3);
01D3 E083 LDI R24,3
01D4 E091 LDI R25,1
01D5 8399 STD Y+1,R25
01D6 8388 STD Y+0,R24
01D7 E023 LDI R18,3
01D8 2700 CLR R16
01D9 940E099F CALL _ePutstr
01DB 9622 ADIW R28,2
01DC 9508 RET
_scan_key:
temp --> R20
01DD 940E0AB9 CALL push_gset1
(0200) }
(0201) /**********************扫描按键**************************/
(0202) void scan_key(void)
(0203) {
(0204) uchar temp;
(0205) temp=PINA;
01DF B349 IN R20,0x19
(0206) if(temp==0xbe)status++;
01E0 3B4E CPI R20,0xBE
01E1 F429 BNE 0x01E7
01E2 91800060 LDS R24,status
01E4 5F8F SUBI R24,0xFF
01E5 93800060 STS status,R24
(0207) Delay_nms(50);
01E7 E302 LDI R16,0x32
01E8 E010 LDI R17,0
01E9 D7A5 RCALL _Delay_nms
01EA 940E0ABC CALL pop_gset1
01EC 9508 RET
_average:
array --> Y+0
avx --> R20
i --> R22
01ED 940E0AB7 CALL push_gset2
01EF 9764 SBIW R28,0x14
(0208) }
(0209)
(0210) uint average(void)//数字化滤波子函数,取样10次后求平均值
(0211) {
(0212) uchar i;
(0213) uint avx=0,array[10];
01F0 2744 CLR R20
01F1 2755 CLR R21
(0214) for(i=0;i<10;i++)
01F2 2766 CLR R22
01F3 C00D RJMP 0x0201
(0215) {
(0216) array[i]=ADC_Convert();
01F4 D785 RCALL _ADC_Convert
01F5 E082 LDI R24,2
01F6 9F86 MUL R24,R22
01F7 01F0 MOVW R30,R0
01F8 01CE MOVW R24,R28
01F9 0FE8 ADD R30,R24
01FA 1FF9 ADC R31,R25
01FB 8311 STD Z+1,R17
01FC 8300 STD Z+0,R16
(0217) Delay_nms(2);
01FD E002 LDI R16,2
01FE E010 LDI R17,0
01FF D78F RCALL _Delay_nms
0200 9563 INC R22
0201 306A CPI R22,0xA
0202 F388 BCS 0x01F4
(0218) }
(0219) for(i=0;i<10;i++)avx=avx+array[i];
0203 2766 CLR R22
0204 C00B RJMP 0x0210
0205 E082 LDI R24,2
0206 9F86 MUL R24,R22
0207 01F0 MOVW R30,R0
0208 01CE MOVW R24,R28
0209 0FE8 ADD R30,R24
020A 1FF9 ADC R31,R25
020B 8020 LDD R2,Z+0
020C 8031 LDD R3,Z+1
020D 0D42 ADD R20,R2
020E 1D53 ADC R21,R3
020F 9563 INC R22
0210 306A CPI R22,0xA
0211 F398 BCS 0x0205
(0220) avx=avx/10;
0212 E02A LDI R18,0xA
0213 E030 LDI R19,0
0214 018A MOVW R16,R20
0215 940E0A7E CALL div16u
0217 01A8 MOVW R20,R16
(0221) return avx;
0218 9664 ADIW R28,0x14
0219 940E0AA8 CALL pop_gset2
021B 9508 RET
_main:
f --> Y+2
temp --> R10
i --> R20
021C 9726 SBIW R28,6
(0222) }
(0223) /**********************主函数*****************************/
(0224) void main(void)
(0225) { uint temp;float f;uchar i;
(0226) Delay_nms(400);
021D E900 LDI R16,0x90
021E E011 LDI R17,1
021F D76F RCALL _Delay_nms
(0227) init_devices();
0220 DF69 RCALL _init_devices
(0228) InitLcd();
0221 940E0A03 CALL _InitLcd
(0229) welcome();
0223 DF73 RCALL _welcome
(0230) LCM_BLCON_ON;
0224 9894 CBI 0x12,4
(0231) Delay_nms(3000);
0225 EB08 LDI R16,0xB8
0226 E01B LDI R17,0xB
0227 D767 RCALL _Delay_nms
(0232) LCM_BLCON_OFF;
0228 9A94 SBI 0x12,4
0229 C74D RJMP 0x0977
(0233) /********************************************/
(0234) while(1) //无限循环
(0235) {
(0236) switch(status)
022A 91600060 LDS R22,status
022C 2777 CLR R23
022D 3060 CPI R22,0
022E E0E0 LDI R30,0
022F 077E CPC R23,R30
0230 F40C BGE 0x0232
0231 C745 RJMP 0x0977
0232 E18B LDI R24,0x1B
0233 E090 LDI R25,0
0234 1786 CP R24,R22
0235 0797 CPC R25,R23
0236 F40C BGE 0x0238
0237 C73F RJMP 0x0977
0238 E002 LDI R16,2
0239 E010 LDI R17,0
023A 019B MOVW R18,R22
023B 940E0A98 CALL empy16s
023D 01F8 MOVW R30,R16
023E E584 LDI R24,0x54
023F E090 LDI R25,0
0240 0FE8 ADD R30,R24
0241 1FF9 ADC R31,R25
0242 9005 LPM R0,Z+
0243 9014 LPM R1,0(Z)
0244 01F0 MOVW R30,R0
0245 9409 IJMP
(0237) {
(0238) case 0:scan_key();WDR();//等待按启动键
0246 DF96 RCALL _scan_key
0247 95A8 WDR
(0239) break;
0248 C72E RJMP 0x0977
(0240) case 1:LcdWriteCommand(0x01,1);//清屏
0249 E021 LDI R18,1
024A E001 LDI R16,1
024B 940E0A38 CALL _LcdWriteCommand
(0241) LcdWriteCommand(0x0c,1);//开显示
024D E021 LDI R18,1
024E E00C LDI R16,0xC
024F 940E0A38 CALL _LcdWriteCommand
(0242) test_display();//显示测试界面
0251 DF68 RCALL _test_display
(0243) status=2;
0252 E082 LDI R24,2
0253 93800060 STS status,R24
(0244) break;
0255 C721 RJMP 0x0977
(0245)
(0246) case 2:AIR_ON;Delay_nms(2000);status=3;//启动气缸并等待2S进入刹车
0256 9893 CBI 0x12,3
0257 ED00 LDI R16,0xD0
0258 E017 LDI R17,7
0259 D735 RCALL _Delay_nms
025A E083 LDI R24,3
025B 93800060 STS status,R24
(0247) break;
025D C719 RJMP 0x0977
(0248)
(0249) case 3:SPEED_5V;Delay_nms(100);POW_27V;//转换成27V,RPM
025E 9890 CBI 0x12,0
025F E604 LDI R16,0x64
0260 E010 LDI R17,0
0261 D72D RCALL _Delay_nms
0262 9892 CBI 0x12,2
(0250) Delay_nms(100);POW_ON;status=4;//开电源
0263 E604 LDI R16,0x64
0264 E010 LDI R17,0
0265 D729 RCALL _Delay_nms
0266 9891 CBI 0x12,1
0267 E084 LDI R24,4
0268 93800060 STS status,R24
(0251) break;
026A C70C RJMP 0x0977
(0252)
(0253) case 4:Wait2S_Start_Flag=1;cnt=0;status=5;//启动2S定时
026B E081 LDI R24,1
026C 9380006C STS Wait2S_Start_Flag,R24
026E 2422 CLR R2
026F 2433 CLR R3
0270 92300063 STS cnt+1,R3
0272 92200062 STS cnt,R2
0274 E085 LDI R24,5
0275 93800060 STS status,R24
(0254) break;
0277 C6FF RJMP 0x0977
(0255)
(0256) case 5:while(Wait2S_End_Flag==0)Delay_nms(10);Wait2S_End_Flag=0;status=6;//等待2S定时结束
0278 E00A LDI R16,0xA
0279 E010 LDI R17,0
027A D714 RCALL _Delay_nms
027B 9020006D LDS R2,Wait2S_End_Flag
027D 2022 TST R2
027E F3C9 BEQ 0x0278
027F 2422 CLR R2
0280 9220006D STS Wait2S_End_Flag,R2
0282 E086 LDI R24,6
0283 93800060 STS status,R24
(0257) break;
0285 C6F1 RJMP 0x0977
(0258)
(0259) case 6:current=average();status=7;//取样堵转电流
0286 DF66 RCALL _average
0287 93100067 STS current+1,R17
0289 93000066 STS current,R16
028B E087 LDI R24,7
028C 93800060 STS status,R24
(0260) current=current-14;
028E 01C8 MOVW R24,R16
028F 970E SBIW R24,0xE
0290 93900067 STS current+1,R25
0292 93800066 STS current,R24
(0261) f=(float)current;f=(f*2560)/1024;
0294 E501 LDI R16,0x51
0295 E011 LDI R17,1
0296 940E0AD9 CALL lpm32
0298 933A ST R19,-Y
0299 932A ST R18,-Y
029A 931A ST R17,-Y
029B 930A ST R16,-Y
029C 91000066 LDS R16,current
029E 91100067 LDS R17,current+1
02A0 9516 LSR R17
02A1 9507 ROR R16
02A2 940E0B35 CALL int2fp
02A4 933A ST R19,-Y
02A5 932A ST R18,-Y
02A6 931A ST R17,-Y
02A7 930A ST R16,-Y
02A8 940E0C7E CALL empy32fs
02AA 91000066 LDS R16,current
02AC 91100067 LDS R17,current+1
02AE 7001 ANDI R16,1
02AF 7010 ANDI R17,0
02B0 940E0B35 CALL int2fp
02B2 933A ST R19,-Y
02B3 932A ST R18,-Y
02B4 931A ST R17,-Y
02B5 930A ST R16,-Y
02B6 940E0B92 CALL add32f
02B8 01FE MOVW R30,R28
02B9 8302 STD Z+2,R16
02BA 8313 STD Z+3,R17
02BB 8324 STD Z+4,R18
02BC 8335 STD Z+5,R19
02BD E40D LDI R16,0x4D
02BE E011 LDI R17,1
02BF 940E0AD9 CALL lpm32
02C1 933A ST R19,-Y
02C2 932A ST R18,-Y
02C3 931A ST R17,-Y
02C4 930A ST R16,-Y
02C5 01FE MOVW R30,R28
02C6 8026 LDD R2,Z+6
02C7 8037 LDD R3,Z+7
02C8 8440 LDD R4,Z+8
02C9 8451 LDD R5,Z+9
02CA 925A ST R5,-Y
02CB 924A ST R4,-Y
02CC 923A ST R3,-Y
02CD 922A ST R2,-Y
02CE 940E0C7E CALL empy32fs
02D0 E409 LDI R16,0x49
02D1 E011 LDI R17,1
02D2 940E0AD9 CALL lpm32
02D4 933A ST R19,-Y
02D5 932A ST R18,-Y
02D6 931A ST R17,-Y
02D7 930A ST R16,-Y
02D8 940E0BF3 CALL div32f
02DA 01FE MOVW R30,R28
02DB 8302 STD Z+2,R16
02DC 8313 STD Z+3,R17
02DD 8324 STD Z+4,R18
02DE 8335 STD Z+5,R19
(0262) f=f*4.25;//修正
02DF E405 LDI R16,0x45
02E0 E011 LDI R17,1
02E1 940E0AD9 CALL lpm32
02E3 933A ST R19,-Y
02E4 932A ST R18,-Y
02E5 931A ST R17,-Y
02E6 930A ST R16,-Y
02E7 01FE MOVW R30,R28
02E8 8026 LDD R2,Z+6
02E9 8037 LDD R3,Z+7
02EA 8440 LDD R4,Z+8
02EB 8451 LDD R5,Z+9
02EC 925A ST R5,-Y
02ED 924A ST R4,-Y
02EE 923A ST R3,-Y
02EF 922A ST R2,-Y
02F0 940E0C81 CALL empy32f
02F2 01FE MOVW R30,R28
02F3 8302 STD Z+2,R16
02F4 8313 STD Z+3,R17
02F5 8324 STD Z+4,R18
02F6 8335 STD Z+5,R19
(0263) LLC=f;//暂存堵转电流
02F7 01FE MOVW R30,R28
02F8 8022 LDD R2,Z+2
02F9 8033 LDD R3,Z+3
02FA 8044 LDD R4,Z+4
02FB 8055 LDD R5,Z+5
02FC 9230006F STS LLC+1,R3
02FE 9220006E STS LLC,R2
0300 92500071 STS LLC+3,R5
0302 92400070 STS LLC+2,R4
(0264) if(LLC<480)OutFlag++;//判断堵转电流大小
0304 925A ST R5,-Y
0305 924A ST R4,-Y
0306 923A ST R3,-Y
0307 922A ST R2,-Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -