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

📄 minid.lst

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0490 8253      STD	Z+3,R5
(0104) 	pidtemp *= (pp->I);
    0491 01F5      MOVW	R30,R10
    0492 8024      LDD	R2,Z+4
    0493 8035      LDD	R3,Z+5
    0494 2444      CLR	R4
    0495 2455      CLR	R5
    0496 01FE      MOVW	R30,R28
    0497 8060      LDD	R6,Z+0
    0498 8071      LDD	R7,Z+1
    0499 8082      LDD	R8,Z+2
    049A 8093      LDD	R9,Z+3
    049B 925A      ST	R5,-Y
    049C 924A      ST	R4,-Y
    049D 923A      ST	R3,-Y
    049E 922A      ST	R2,-Y
    049F 0183      MOVW	R16,R6
    04A0 0194      MOVW	R18,R8
    04A1 D386      RCALL	empy32s
    04A2 01FE      MOVW	R30,R28
    04A3 8300      STD	Z+0,R16
    04A4 8311      STD	Z+1,R17
    04A5 8322      STD	Z+2,R18
    04A6 8333      STD	Z+3,R19
(0105) 	result += pidtemp;						// 积分项
    04A7 01FE      MOVW	R30,R28
    04A8 8020      LDD	R2,Z+0
    04A9 8031      LDD	R3,Z+1
    04AA 8042      LDD	R4,Z+2
    04AB 8053      LDD	R5,Z+3
    04AC 01FE      MOVW	R30,R28
    04AD 8064      LDD	R6,Z+4
    04AE 8075      LDD	R7,Z+5
    04AF 8086      LDD	R8,Z+6
    04B0 8097      LDD	R9,Z+7
    04B1 0C62      ADD	R6,R2
    04B2 1C73      ADC	R7,R3
    04B3 1C84      ADC	R8,R4
    04B4 1C95      ADC	R9,R5
    04B5 01FE      MOVW	R30,R28
    04B6 8264      STD	Z+4,R6
    04B7 8275      STD	Z+5,R7
    04B8 8286      STD	Z+6,R8
    04B9 8297      STD	Z+7,R9
(0106) 		
(0107) 		
(0108) //  	pidtemp = derror;
(0109) //		pidtemp *= (pp->D);
(0110) //		result += pidtemp;            	 // 微分项
(0111)   	
(0112) 	SumDu += result;
    04BA 01FE      MOVW	R30,R28
    04BB 8024      LDD	R2,Z+4
    04BC 8035      LDD	R3,Z+5
    04BD 8046      LDD	R4,Z+6
    04BE 8057      LDD	R5,Z+7
    04BF 90800144  LDS	R8,SumDu+2
    04C1 90900145  LDS	R9,SumDu+3
    04C3 90600142  LDS	R6,SumDu
    04C5 90700143  LDS	R7,SumDu+1
    04C7 0C62      ADD	R6,R2
    04C8 1C73      ADC	R7,R3
    04C9 1C84      ADC	R8,R4
    04CA 1C95      ADC	R9,R5
    04CB 92700143  STS	SumDu+1,R7
    04CD 92600142  STS	SumDu,R6
    04CF 92900145  STS	SumDu+3,R9
    04D1 92800144  STS	SumDu+2,R8
(0113) 	
(0114) 	if (SumDu <= 0)
    04D3 E040      LDI	R20,0
    04D4 E050      LDI	R21,0
    04D5 E060      LDI	R22,0
    04D6 E070      LDI	R23,0
    04D7 1546      CP	R20,R6
    04D8 0557      CPC	R21,R7
    04D9 0568      CPC	R22,R8
    04DA 0579      CPC	R23,R9
    04DB F014      BLT	0x04DE
(0115) 	{
(0116) 		K = 0;
    04DC 24AA      CLR	R10
(0117) 	}
    04DD C069      RJMP	0x0547
(0118) 	
(0119) 	else 
(0120) 	{
(0121) 		result = SumDu;
    04DE 90400144  LDS	R4,SumDu+2
    04E0 90500145  LDS	R5,SumDu+3
    04E2 90200142  LDS	R2,SumDu
    04E4 90300143  LDS	R3,SumDu+1
    04E6 01FE      MOVW	R30,R28
    04E7 8224      STD	Z+4,R2
    04E8 8235      STD	Z+5,R3
    04E9 8246      STD	Z+6,R4
    04EA 8257      STD	Z+7,R5
(0122) 		result /= 3000;
    04EB EB48      LDI	R20,0xB8
    04EC E05B      LDI	R21,0xB
    04ED E060      LDI	R22,0
    04EE E070      LDI	R23,0
    04EF 01FE      MOVW	R30,R28
    04F0 8024      LDD	R2,Z+4
    04F1 8035      LDD	R3,Z+5
    04F2 8046      LDD	R4,Z+6
    04F3 8057      LDD	R5,Z+7
    04F4 937A      ST	R23,-Y
    04F5 936A      ST	R22,-Y
    04F6 935A      ST	R21,-Y
    04F7 934A      ST	R20,-Y
    04F8 0181      MOVW	R16,R2
    04F9 0192      MOVW	R18,R4
    04FA D2B2      RCALL	div32s
    04FB 01FE      MOVW	R30,R28
    04FC 8304      STD	Z+4,R16
    04FD 8315      STD	Z+5,R17
    04FE 8326      STD	Z+6,R18
    04FF 8337      STD	Z+7,R19
(0123) 		
(0124) 		if (result > 1000) 
    0500 EE48      LDI	R20,0xE8
    0501 E053      LDI	R21,3
    0502 E060      LDI	R22,0
    0503 E070      LDI	R23,0
    0504 01FE      MOVW	R30,R28
    0505 8024      LDD	R2,Z+4
    0506 8035      LDD	R3,Z+5
    0507 8046      LDD	R4,Z+6
    0508 8057      LDD	R5,Z+7
    0509 1542      CP	R20,R2
    050A 0553      CPC	R21,R3
    050B 0564      CPC	R22,R4
    050C 0575      CPC	R23,R5
    050D F44C      BGE	0x0517
(0125) 			result = 1000;
    050E EE48      LDI	R20,0xE8
    050F E053      LDI	R21,3
    0510 E060      LDI	R22,0
    0511 E070      LDI	R23,0
    0512 01FE      MOVW	R30,R28
    0513 8344      STD	Z+4,R20
    0514 8355      STD	Z+5,R21
    0515 8366      STD	Z+6,R22
    0516 8377      STD	Z+7,R23
(0126) 			
(0127) 		result *= 0xff;
    0517 01FE      MOVW	R30,R28
    0518 8024      LDD	R2,Z+4
    0519 8035      LDD	R3,Z+5
    051A 8046      LDD	R4,Z+6
    051B 8057      LDD	R5,Z+7
    051C EF4F      LDI	R20,0xFF
    051D E050      LDI	R21,0
    051E E060      LDI	R22,0
    051F E070      LDI	R23,0
    0520 925A      ST	R5,-Y
    0521 924A      ST	R4,-Y
    0522 923A      ST	R3,-Y
    0523 922A      ST	R2,-Y
    0524 018A      MOVW	R16,R20
    0525 019B      MOVW	R18,R22
    0526 D301      RCALL	empy32s
    0527 01FE      MOVW	R30,R28
    0528 8304      STD	Z+4,R16
    0529 8315      STD	Z+5,R17
    052A 8326      STD	Z+6,R18
    052B 8337      STD	Z+7,R19
(0128) 		result /=1000;
    052C EE48      LDI	R20,0xE8
    052D E053      LDI	R21,3
    052E E060      LDI	R22,0
    052F E070      LDI	R23,0
    0530 01FE      MOVW	R30,R28
    0531 8024      LDD	R2,Z+4
    0532 8035      LDD	R3,Z+5
    0533 8046      LDD	R4,Z+6
    0534 8057      LDD	R5,Z+7
    0535 937A      ST	R23,-Y
    0536 936A      ST	R22,-Y
    0537 935A      ST	R21,-Y
    0538 934A      ST	R20,-Y
    0539 0181      MOVW	R16,R2
    053A 0192      MOVW	R18,R4
    053B D271      RCALL	div32s
    053C 01FE      MOVW	R30,R28
    053D 8304      STD	Z+4,R16
    053E 8315      STD	Z+5,R17
    053F 8326      STD	Z+6,R18
    0540 8337      STD	Z+7,R19
(0129) 		
(0130) 		K = result;
    0541 01FE      MOVW	R30,R28
    0542 80A4      LDD	R10,Z+4
(0131) 		K = PIDBound(K, Fact_Value);						//计算控制值上限
    0543 0196      MOVW	R18,R12
    0544 2D0A      MOV	R16,R10
    0545 D005      RCALL	_PIDBound
    0546 2EA0      MOV	R10,R16
(0132) 	}
(0133) 		
(0134) 	return K;                              
    0547 2D0A      MOV	R16,R10
    0548 9628      ADIW	R28,0x8
    0549 D30E      RCALL	pop_gset5
    054A 9508      RET
(0135) }   
(0136)  
(0137) byte PIDBound(byte K, word Fact_Value)
(0138) {
(0139) 	//if (K >0x7f )
(0140) 	//{
(0141) 	//	K = 0x7f;
(0142) 	//} 
(0143) 	
(0144) 	return K;
_PIDBound:
  Fact_Value           --> R18
  K                    --> R16
    054B 9508      RET
FILE: D:\bak\新建文件夹\函数库\IIC\IIC.C
(0001) /*****************************************************************
(0002)  *  文件名:      IIC.c
(0003)  *  版本号:      
(0004)  *  创作日期:    2005.7.7
(0005)  *  作者:        fengzm
(0006)  *  功能说明:    IIC数据传输
(0007)  *  其它说明:    使用AVR单片机Atmega48, 晶振:8Mhz
(0008)                   注意:发送START信号之后软件不要清零TWCR的"TWSTA"位。
(0009)  *****************************************************************/
(0010)  
(0011) 
(0012) /*****************************************************************
(0013) 
(0014)  *   修改日期:   2005.7.8  
(0015)  *   修改人:     wangzq
(0016)  *   修改原因:   格式调整
(0017) 
(0018)  说明:
(0019)  FirstData = 0; IicData = 待发数据;START_IIC();开始发送数据。
(0020)  FirstData == 0xff  表示发送结束。
(0021) *******************************************************************/
(0022) 
(0023) 
(0024) //包含文件
(0025) #include "IIC.h"
(0026) 
(0027) 
(0028) 
(0029) // TWI initialize
(0030) // bit rate:32,prescal:1,rate:100Khz;
(0031) void twi_init(void)
(0032) {
(0033) 	TWCR = 0x00;             //disable twi
_twi_init:
    054C 2422      CLR	R2
    054D 922000BC  STS	0xBC,R2
(0034)     TWBR = 0x20;             //set bit rate equal 32
    054F E280      LDI	R24,0x20
    0550 938000B8  STS	0xB8,R24
(0035)     TWSR = 0x00;             //set prescale  clock/1
    0552 922000B9  STS	0xB9,R2
(0036)     TWAR = 0x00;             //set slave address
    0554 922000BA  STS	0xBA,R2
(0037)     TWCR = 0x85;             //enable twi
    0556 E885      LDI	R24,0x85
    0557 938000BC  STS	0xBC,R24
    0559 9508      RET
_twi_isr:
  IicTwsr              --> R16
    055A 922A      ST	R2,-Y
    055B 930A      ST	R16,-Y
    055C 931A      ST	R17,-Y
    055D 938A      ST	R24,-Y
    055E 939A      ST	R25,-Y
    055F 93EA      ST	R30,-Y
    0560 B62F      IN	R2,0x3F
    0561 922A      ST	R2,-Y
(0038) }
(0039) 
(0040) #pragma interrupt_handler twi_isr:25
(0041) void twi_isr(void)
(0042) {
(0043) 	byte  IicTwsr;              
(0044)   
(0045) 	IicTwsr = TWSR & 0xF8;       
    0562 910000B9  LDS	R16,0xB9
    0564 7F08      ANDI	R16,0xF8
(0046) 	switch (IicTwsr)
    0565 2711      CLR	R17
    0566 3200      CPI	R16,0x20
    0567 E0E0      LDI	R30,0
    0568 071E      CPC	R17,R30
    0569 F151      BEQ	0x0594
    056A E280      LDI	R24,0x20
    056B E090      LDI	R25,0
    056C 1780      CP	R24,R16
    056D 0791      CPC	R25,R17
    056E F074      BLT	0x057D
    056F 3008      CPI	R16,0x8
    0570 E0E0      LDI	R30,0
    0571 071E      CPC	R17,R30
    0572 F0B9      BEQ	0x058A
    0573 3008      CPI	R16,0x8
    0574 E0E0      LDI	R30,0
    0575 071E      CPC	R17,R30
    0576 F40C      BGE	0x0578
    0577 C045      RJMP	0x05BD
    0578 3108      CPI	R16,0x18
    0579 E0E0      LDI	R30,0
    057A 071E      CPC	R17,R30
    057B F0C1      BEQ	0x0594
    057C C040      RJMP	0x05BD
    057D 3208      CPI	R16,0x28
    057E E0E0      LDI	R30,0
    057F 071E      CPC	R17,R30
    0580 F109      BEQ	0x05A2
    0581 3208      CPI	R16,0x28
    0582 E0E0      LDI	R30,0
    0583 071E      CPC	R17,R30
    0584 F1C4      BLT	0x05BD
    0585 3300      CPI	R16,0x30
    0586 E0E0      LDI	R30,0
    0587 071E      CPC	R17,R30
    0588 F0C9      BEQ	0x05A2
    0589 C033      RJMP	0x05BD
(0047) 	{
(0048) 		case 0x08:
(0049)         TWDR = 0x58;			//发送命令;
    058A E588      LDI	R24,0x58
    058B 938000BB  STS	0xBB,R24
(0050)         START_IIC();			//开始发送
    058D E885      LDI	R24,0x85
    058E 938000BC  STS	0xBC,R24
(0051)         g_FirstData = 0;
    0590 2422      CLR	R2
    0591 9220013D  STS	g_FirstData,R2
(0052)         break;
    0593 C031      RJMP	0x05C5
(0053) 	  
(0054) 		case 0x18:
(0055) 		case 0x20:
(0056) 		if (g_FirstData == 0)
    0594 9020013D  LDS	R2,g_FirstData
    0596 2022      TST	R2
    0597 F569      BNE	0x05C5
(0057) 		{
(0058) 			TWDR=0x00;			//发送命令;
    0598 2422      CLR	R2
    0599 922000BB  STS	0xBB,R2
(0059)         	START_IIC();		//开始发送
    059B E885      LDI	R24,0x85
    059C 938000BC  STS	0xBC,R24
(0060)         	g_FirstData = 1;
    059E E081      LDI	R24,1
    059F 9380013D  STS	g_FirstData,R24
(0061) 		}	  
(0062) 		break;
    05A1 C023      RJMP	0x05C5
(0063) 	  
(0064) 		case 0x28:
(0065) 		case 0x30:
(0066)         if (g_FirstData == 2)
    05A2 9180013D  LDS	R24,g_FirstData
    05A4 3082      CPI	R24,2
    05A5 F441      BNE	0x05AE
(0067) 	    {
(0068) 	    	TWCR |= 0x10;			//发出停止位,停止发送;
    05A6 918000BC  LDS	R24,0xBC
    05A8 6180      ORI	R24,0x10
    05A9 938000BC  STS	0xBC,R24
(0069) 	        g_FirstData = 0xff;		//发送完成;
    05AB EF8F      LDI	R24,0xFF
    05AC 9380013D  STS	g_FirstData,R24
(0070) 		}	  
(0071) 		if (g_FirstData == 1)
    05AE 9180013D  LDS	R24,g_FirstData
    05B0 3081      CPI	R24,1
    05B1 F499      BNE	0x05C5
(0072) 		{
(0073) 			TWDR = g_IicData;			//发送数据;
    05B2 9020013C  LDS	R2,g_IicData
    05B4 922000BB  STS	0xBB,R2
(0074)             START_IIC();			//开始发送
    05B6 E885      LDI	R24,0x85
    05B7 938000BC  STS	0xBC,R24
(0075) 	        g_FirstData = 2; 
    05B9 E082      LDI	R24,2
    05BA 9380013D  STS	g_FirstData,R24
(0076) 	     }
(0077) 		 break;  
    05BC C008      RJMP	0x05C5
(0078) 	  
(0079) 		default:
(0080)         TWCR |= 0x10;			//发出停止位,停止发送;
    05BD 918000BC  LDS	R24,0xBC
    05BF 6180      ORI	R24,0x10
    05C0 938000BC  STS	0xBC,R24
(0081) 	    g_FirstData = 0xff;			//发送完成;
    05C2 EF8F      LDI	R24,0xFF
    05C3 9380013D  STS	g_FirstData,R24
(0082) 		break;
    05C5 9029      LD	R2,Y+
    05C6 BE2F      OUT	0x3F,R2
    05C7 91E9      LD	R30,Y+
    05C8 9199      LD	R25,Y+
    05C9 9189      LD	R24,Y+
    05CA 9119      LD	R17,Y+
    05CB 9109      LD	R16,Y+
    05CC 9029      LD	R2,Y+
    05CD 9518      RETI
FILE: D:\bak\新建文件夹\minid0712.c
(0001) /*****************************************************************
(0002)  *  文件名:      main.c
(0003)  *  版本号:      
(0004)  *  创作日期:    2005.7.12
(0005)  *  作者:        fengzm
(0006)  *  功能说明:    主函数
(0007)  *  其它说明:    使用AVR单片机Atmega48, 晶振:8Mhz
(0008)                   
(0009)  *****************************************************************/
(0010)  
(0011) 
(0012) /*****************************************************************
(0013) 
(0014)  *   修改日期:   
(0015)  *   修改人:     
(0016)  *   修改原因

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -