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

📄 multistep.lst

📁 在ATMEGA128单片机上开发的一个机器人控制程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    160E EFCF      LDI	R28,0xFF
    160F E1D0      LDI	R29,0x10
    1610 BFCD      OUT	0x3D,R28
    1611 BFDE      OUT	0x3E,R29
    1612 51C0      SUBI	R28,0x10
    1613 40D0      SBCI	R29,0
    1614 EA0A      LDI	R16,0xAA
    1615 8308      STD	Y+0,R16
    1616 2400      CLR	R0
    1617 E1E8      LDI	R30,0x18
    1618 E0F1      LDI	R31,1
    1619 E011      LDI	R17,1
    161A 31E8      CPI	R30,0x18
    161B 07F1      CPC	R31,R17
    161C F011      BEQ	0x161F
    161D 9201      ST	R0,Z+
    161E CFFB      RJMP	0x161A
    161F 8300      STD	Z+0,R16
    1620 E0E4      LDI	R30,4
    1621 E2FC      LDI	R31,0x2C
    1622 E0A0      LDI	R26,0
    1623 E0B1      LDI	R27,1
    1624 E21C      LDI	R17,0x2C
    1625 31EC      CPI	R30,0x1C
    1626 07F1      CPC	R31,R17
    1627 F021      BEQ	0x162C
    1628 95C8      LPM
    1629 9631      ADIW	R30,1
    162A 920D      ST	R0,X+
    162B CFF9      RJMP	0x1625
    162C 940E206A  CALL	_main
_exit:
    162E CFFF      RJMP	_exit
FILE: D:\multistep\multistep.c
(0001) //************************************************************
(0002) //12路PWM波程序
(0003) //王超炎2005-05-05
(0004) //********************************************************
(0005) #include <iom128v.h>
(0006) #include <macros.h>
(0007) #include "data.h"
(0008) unsigned int N1=4;
(0009) unsigned int N2=20;
(0010) unsigned int N3=20;
(0011) unsigned int N4=10;
(0012) unsigned int cycle_start1=192;
(0013) unsigned int cycle_start2=3;
(0014) unsigned int cycle_start3=2;
(0015) unsigned int cycle_start4=2;
(0016) unsigned int totalstep1=392;
(0017) unsigned int totalstep2=11;
(0018) unsigned int totalstep3=6;
(0019) unsigned int totalstep4=7;
(0020) void port_init(void)
(0021) { 
(0022)  DDRA  = 0xFF;
_port_init:
    162F EF8F      LDI	R24,0xFF
    1630 BB8A      OUT	0x1A,R24
(0023)  PORTA = 0x00;
    1631 2422      CLR	R2
    1632 BA2B      OUT	0x1B,R2
(0024)  DDRC  = 0xFF;
    1633 BB84      OUT	0x14,R24
(0025)  PORTC = 0x00;
    1634 BA25      OUT	0x15,R2
(0026)  }
    1635 9508      RET
(0027) 
(0028) void timer1_init(void)
(0029) {
(0030)  TCCR1A = 0x00;
_timer1_init:
    1636 2422      CLR	R2
    1637 BC2F      OUT	0x2F,R2
(0031)  TCNT1= 0x00; 
    1638 2433      CLR	R3
    1639 BC3D      OUT	0x2D,R3
    163A BC2C      OUT	0x2C,R2
(0032) 
(0033)  
(0034) }
    163B 9508      RET
(0035) void ClrAll(void)
(0036) { 
(0037)  PORTA = 0x00;
_ClrAll:
    163C 2422      CLR	R2
    163D BA2B      OUT	0x1B,R2
(0038)  PORTC = 0x00;
    163E BA25      OUT	0x15,R2
(0039)  }
    163F 9508      RET
_Motion_init:
  i                    --> R20
  t                    --> R20
  temp2                --> R14
  temp1                --> R12
  j                    --> R10
  temp                 --> R22
    1640 940E20EF  CALL	push_gset5
(0040) 
(0041) 
(0042) 
(0043) 
(0044) //*******************************************************************************
(0045) //函数名: Motion_init(void) 
(0046) //参  数:无
(0047) //功  能:初始化动作
(0048) //******************************************************************************* 
(0049) void Motion_init(void)  
(0050)   { int i=0,j=0,t=0,temp=0,temp1,temp2;
    1642 2744      CLR	R20
    1643 2755      CLR	R21
    1644 24AA      CLR	R10
    1645 24BB      CLR	R11
    1646 2766      CLR	R22
    1647 2777      CLR	R23
(0051)     for(t=0;t<50;t++)    
(0052)       { for(j=1;j<9;j++)	
    1648 E081      LDI	R24,1
    1649 E090      LDI	R25,0
    164A 015C      MOVW	R10,R24
(0053)  	    {  
(0054) 		if(j<5)
    164B 01C5      MOVW	R24,R10
    164C 3085      CPI	R24,5
    164D E0E0      LDI	R30,0
    164E 079E      CPC	R25,R30
    164F F4BC      BGE	0x1667
(0055) 		{PORTA|=(1<<(j-1));	
    1650 019C      MOVW	R18,R24
    1651 5021      SUBI	R18,1
    1652 4030      SBCI	R19,0
    1653 E001      LDI	R16,1
    1654 E010      LDI	R17,0
    1655 940E20F3  CALL	lsl16
    1657 B22B      IN	R2,0x1B
    1658 2433      CLR	R3
    1659 2A20      OR	R2,R16
    165A 2A31      OR	R3,R17
    165B BA2B      OUT	0x1B,R2
(0056)         temp2=2250+(j-1)*3750;
    165C EA06      LDI	R16,0xA6
    165D E01E      LDI	R17,0xE
    165E 0195      MOVW	R18,R10
    165F 940E20B9  CALL	empy16s
    1661 01C8      MOVW	R24,R16
    1662 5A86      SUBI	R24,0xA6
    1663 409E      SBCI	R25,0xE
    1664 5386      SUBI	R24,0x36
    1665 4F97      SBCI	R25,0xF7
    1666 017C      MOVW	R14,R24
(0057) 		}
(0058) 		PORTC|=(1<<(j-1));	
    1667 0195      MOVW	R18,R10
    1668 5021      SUBI	R18,1
    1669 4030      SBCI	R19,0
    166A E001      LDI	R16,1
    166B E010      LDI	R17,0
    166C 940E20F3  CALL	lsl16
    166E B225      IN	R2,0x15
    166F 2433      CLR	R3
    1670 2A20      OR	R2,R16
    1671 2A31      OR	R3,R17
    1672 BA25      OUT	0x15,R2
(0059)         temp1=2250+(j-1)*3750;	
    1673 EA06      LDI	R16,0xA6
    1674 E01E      LDI	R17,0xE
    1675 0195      MOVW	R18,R10
    1676 940E20B9  CALL	empy16s
    1678 01C8      MOVW	R24,R16
    1679 5A86      SUBI	R24,0xA6
    167A 409E      SBCI	R25,0xE
    167B 5386      SUBI	R24,0x36
    167C 4F97      SBCI	R25,0xF7
    167D 016C      MOVW	R12,R24
(0060)         do{ temp=TCNT1;	
    167E B56C      IN	R22,0x2C
    167F B57D      IN	R23,0x2D
(0061)  	    if(temp>temp1)PORTC&=~(1<<(j-1));	
    1680 16C6      CP	R12,R22
    1681 06D7      CPC	R13,R23
    1682 F47C      BGE	0x1692
    1683 0195      MOVW	R18,R10
    1684 5021      SUBI	R18,1
    1685 4030      SBCI	R19,0
    1686 E001      LDI	R16,1
    1687 E010      LDI	R17,0
    1688 940E20F3  CALL	lsl16
    168A 0118      MOVW	R2,R16
    168B 9420      COM	R2
    168C 9430      COM	R3
    168D B245      IN	R4,0x15
    168E 2455      CLR	R5
    168F 2042      AND	R4,R2
    1690 2053      AND	R5,R3
    1691 BA45      OUT	0x15,R4
(0062)   		if(temp>temp2)PORTA&=~(1<<(j-1));
    1692 16E6      CP	R14,R22
    1693 06F7      CPC	R15,R23
    1694 F47C      BGE	0x16A4
    1695 0195      MOVW	R18,R10
    1696 5021      SUBI	R18,1
    1697 4030      SBCI	R19,0
    1698 E001      LDI	R16,1
    1699 E010      LDI	R17,0
    169A 940E20F3  CALL	lsl16
    169C 0118      MOVW	R2,R16
    169D 9420      COM	R2
    169E 9430      COM	R3
    169F B24B      IN	R4,0x1B
    16A0 2455      CLR	R5
    16A1 2042      AND	R4,R2
    16A2 2053      AND	R5,R3
    16A3 BA4B      OUT	0x1B,R4
(0063)   	      }while(temp<j*3750);        
    16A4 EA06      LDI	R16,0xA6
    16A5 E01E      LDI	R17,0xE
    16A6 0195      MOVW	R18,R10
    16A7 940E20B9  CALL	empy16s
    16A9 1760      CP	R22,R16
    16AA 0771      CPC	R23,R17
    16AB F294      BLT	0x167E
    16AC 01C5      MOVW	R24,R10
    16AD 9601      ADIW	R24,1
    16AE 015C      MOVW	R10,R24
    16AF 3089      CPI	R24,0x9
    16B0 E0E0      LDI	R30,0
    16B1 079E      CPC	R25,R30
    16B2 F40C      BGE	0x16B4
    16B3 CF97      RJMP	0x164B
(0064)   	   }
(0065)      TCNT1=0;  
    16B4 2422      CLR	R2
    16B5 2433      CLR	R3
    16B6 BC3D      OUT	0x2D,R3
    16B7 BC2C      OUT	0x2C,R2
    16B8 5F4F      SUBI	R20,0xFF
    16B9 4F5F      SBCI	R21,0xFF
    16BA 3342      CPI	R20,0x32
    16BB E0E0      LDI	R30,0
    16BC 075E      CPC	R21,R30
    16BD F40C      BGE	0x16BF
    16BE CF89      RJMP	0x1648
(0066)   }    
(0067)   }  
    16BF 940E20C9  CALL	pop_gset5
    16C1 9508      RET
_Motion_excute:
  t                    --> R20
  i                    --> R6
  temp2                --> R10
  temp1                --> R12
  j                    --> R14
  temp                 --> R22
  p                    --> R8
    16C2 940E20EF  CALL	push_gset5
    16C4 0148      MOVW	R8,R16
(0068)   //*******************************************************************************
(0069) //函数名: Motion() 
(0070) //参  数:
(0071) //功  能:
(0072) //******************************************************************************* 
(0073)   
(0074)   void Motion_excute(unsigned int p)
(0075)   { 
(0076)   unsigned int i=0,t=0,j=0;
    16C5 2466      CLR	R6
    16C6 2477      CLR	R7
    16C7 2744      CLR	R20
    16C8 2755      CLR	R21
    16C9 24EE      CLR	R14
    16CA 24FF      CLR	R15
(0077)   unsigned int temp1=0,temp2=0,temp=0;   
    16CB 24CC      CLR	R12
    16CC 24DD      CLR	R13
    16CD 24AA      CLR	R10
    16CE 24BB      CLR	R11
    16CF 2766      CLR	R22
    16D0 2777      CLR	R23
(0078)   if(p==1)
    16D1 01C4      MOVW	R24,R8
    16D2 3081      CPI	R24,1
    16D3 E0E0      LDI	R30,0
    16D4 079E      CPC	R25,R30
    16D5 F009      BEQ	0x16D7
    16D6 C293      RJMP	0x196A
(0079)  { for(i=0;i<cycle_start1;i++)
    16D7 C0CB      RJMP	0x17A3
(0080)   for(t=angle1[i][0];t>0;t--)    
    16D8 E10A      LDI	R16,0x1A
    16D9 E010      LDI	R17,0
    16DA 0193      MOVW	R18,R6
    16DB 940E20B9  CALL	empy16s
    16DD 01F8      MOVW	R30,R16
    16DE E88C      LDI	R24,0x8C
    16DF E090      LDI	R25,0
    16E0 0FE8      ADD	R30,R24
    16E1 1FF9      ADC	R31,R25
    16E2 9145      LPM	R20,Z+
    16E3 9154      LPM	R21,0(Z)
    16E4 C0B7      RJMP	0x179C
(0081)   { TCNT1=0x00;
    16E5 2422      CLR	R2
    16E6 2433      CLR	R3
    16E7 BC3D      OUT	0x2D,R3
    16E8 BC2C      OUT	0x2C,R2
(0082) 	for(j=1;j<9;j++)	
    16E9 E081      LDI	R24,1
    16EA E090      LDI	R25,0
    16EB 017C      MOVW	R14,R24
    16EC C0A3      RJMP	0x1790
(0083)    {if(j<5)
    16ED 01C7      MOVW	R24,R14
    16EE 3085      CPI	R24,5
    16EF E0E0      LDI	R30,0
    16F0 079E      CPC	R25,R30
    16F1 F008      BCS	0x16F3
    16F2 C037      RJMP	0x172A
(0084)    {PORTA|=(1<<(j-1));	
    16F3 019C      MOVW	R18,R24
    16F4 5021      SUBI	R18,1
    16F5 4030      SBCI	R19,0
    16F6 E001      LDI	R16,1
    16F7 E010      LDI	R17,0
    16F8 940E20F3  CALL	lsl16
    16FA B22B      IN	R2,0x1B
    16FB 2433      CLR	R3
    16FC 2A20      OR	R2,R16
    16FD 2A31      OR	R3,R17
    16FE BA2B      OUT	0x1B,R2
(0085)     temp2=(50*angle1[i][j+8]/3+750)+(j-1)*3750;}
    16FF E10A      LDI	R16,0x1A
    1700 E010      LDI	R17,0
    1701 0193      MOVW	R18,R6
    1702 940E20B9  CALL	empy16s
    1704 0118      MOVW	R2,R16
    1705 E88C      LDI	R24,0x8C
    1706 E090      LDI	R25,0
    1707 0E28      ADD	R2,R24
    1708 1E39      ADC	R3,R25
    1709 0197      MOVW	R18,R14
    170A 5F28      SUBI	R18,0xF8
    170B 4F3F      SBCI	R19,0xFF
    170C E002      LDI	R16,2
    170D E010      LDI	R17,0
    170E 940E20B9  CALL	empy16s
    1710 01F8      MOVW	R30,R16
    1711 0DE2      ADD	R30,R2
    1712 1DF3      ADC	R31,R3
    1713 9125      LPM	R18,Z+
    1714 9134      LPM	R19,0(Z)
    1715 E302      LDI	R16,0x32
    1716 E010      LDI	R17,0
    1717 940E20B9  CALL	empy16s
    1719 E023      LDI	R18,3
    171A E030      LDI	R19,0
    171B 940E209F  CALL	div16u
    171D 01C8      MOVW	R24,R16
    171E 5182      SUBI	R24,0x12
    171F 4F9D      SBCI	R25,0xFD
    1720 0197      MOVW	R18,R14
    1721 5021      SUBI	R18,1
    1722 4030      SBCI	R19,0
    1723 EA06      LDI	R16,0xA6
    1724 E01E      LDI	R17,0xE
    1725 940E20B9  CALL	empy16s
    1727 015C      MOVW	R10,R24
    1728 0EA0      ADD	R10,R16
    1729 1EB1      ADC	R11,R17
(0086) 	PORTC|=(1<<(j-1));	
    172A 0197      MOVW	R18,R14
    172B 5021      SUBI	R18,1
    172C 4030      SBCI	R19,0
    172D E001      LDI	R16,1
    172E E010      LDI	R17,0
    172F 940E20F3  CALL	lsl16
    1731 B225      IN	R2,0x15
    1732 2433      CLR	R3
    1733 2A20      OR	R2,R16
    1734 2A31      OR	R3,R17
    1735 BA25      OUT	0x15,R2
(0087)     temp1=(50*angle1[i][j]/3+750)+(j-1)*3750;	
    1736 E10A      LDI	R16,0x1A
    1737 E010      LDI	R17,0
    1738 0193      MOVW	R18,R6
    1739 940E20B9  CALL	empy16s
    173B 0118      MOVW	R2,R16
    173C E88C      LDI	R24,0x8C
    173D E090      LDI	R25,0
    173E 0E28      ADD	R2,R24
    173F 1E39      ADC	R3,R25
    1740 E002      LDI	R16,2
    1741 E010      LDI	R17,0
    1742 0197      MOVW	R18,R14
    1743 940E20B9  CALL	empy16s
    1745 01F8      MOVW	R30,R16
    1746 0DE2      ADD	R30,R2
    1747 1DF3      ADC	R31,R3
    1748 9125      LPM	R18,Z+
    1749 9134      LPM	R19,0(Z)
    174A E302      LDI	R16,0x32
    174B E010      LDI	R17,0
    174C 940E20B9  CALL	empy16s
    174E E023      LDI	R18,3
    174F E030      LDI	R19,0
    1750 940E209F  CALL	div16u
    1752 01C8      MOVW	R24,R16
    1753 5182      SUBI	R24,0x12
    1754 4F9D      SBCI	R25,0xFD
    1755 0197      MOVW	R18,R14
    1756 5021      SUBI	R18,1
    1757 4030      SBCI	R19,0
    1758 EA06      LDI	R16,0xA6
    1759 E01E      LDI	R17,0xE
    175A 940E20B9  CALL	empy16s
    175C 016C      MOVW	R12,R24

⌨️ 快捷键说明

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