⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac18-1.lst

📁 AVR单片机ATmega16(L)应用实例1——风机测试仪
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -