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

📄 motor.lst

📁 电机控制程,用于电机控制,可用于需要的系统中
💻 LST
字号:
__text_start:
__start:
    0046 EFCF      LDI	R28,0xFF
    0047 E1D0      LDI	R29,0x10
    0048 BFCD      OUT	0x3D,R28
    0049 BFDE      OUT	0x3E,R29
    004A 51C0      SUBI	R28,0x10
    004B 40D0      SBCI	R29,0
    004C EA0A      LDI	R16,0xAA
    004D 8308      STD	Y+0,R16
    004E 2400      CLR	R0
    004F E0E0      LDI	R30,0
    0050 E0F1      LDI	R31,1
    0051 E011      LDI	R17,1
    0052 30E5      CPI	R30,5
    0053 07F1      CPC	R31,R17
    0054 F011      BEQ	0x0057
    0055 9201      ST	R0,Z+
    0056 CFFB      RJMP	0x0052
    0057 8300      STD	Z+0,R16
    0058 E8EC      LDI	R30,0x8C
    0059 E0F0      LDI	R31,0
    005A E0A0      LDI	R26,0
    005B E0B1      LDI	R27,1
    005C E010      LDI	R17,0
    005D 38EC      CPI	R30,0x8C
    005E 07F1      CPC	R31,R17
    005F F021      BEQ	0x0064
    0060 95C8      LPM
    0061 9631      ADIW	R30,1
    0062 920D      ST	R0,X+
    0063 CFF9      RJMP	0x005D
    0064 940E0082  CALL	_main
_exit:
    0066 CFFF      RJMP	_exit
FILE: D:\NEWWOR~1\motor\main.c
(0001) #include <iom64v.h>
(0002) #include <macros.h>
(0003) #include "head.h"
(0004) #include "uart.h"
(0005) #include "time.h"
(0006) ////
(0007) U8 g_ucKeyData;
(0008) U8 g_ucMomeyData;
(0009) U8 g_ucMotorData;
(0010) U8 g_ucLedStatus;
(0011) U8 temp;
(0012) void InitData()
(0013) {
(0014) 	g_ucKeyData=0x00;
_InitData:
    0067 2422      CLR	R2
    0068 92200104  STS	g_ucKeyData,R2
(0015) 	g_ucMomeyData=0x00;
    006A 92200103  STS	g_ucMomeyData,R2
(0016) 	g_ucMotorData=0x00;
    006C 92200102  STS	g_ucMotorData,R2
(0017) 	g_ucLedStatus=0xff;
    006E EF8F      LDI	R24,0xFF
    006F 93800101  STS	g_ucLedStatus,R24
(0018) 	temp=1;
    0071 E081      LDI	R24,1
    0072 93800100  STS	temp,R24
    0074 9508      RET
(0019) }
(0020) 
(0021) void InitTarget()
(0022) {
(0023) 	Time1Init();
_InitTarget:
    0075 940E008A  CALL	_Time1Init
(0024) 	//Uart1Init(19200);
(0025) 	// moneydriver
(0026) 	DDRA=0XFF;
    0077 EF8F      LDI	R24,0xFF
    0078 BB8A      OUT	0x1A,R24
(0027) 	PORTA=0x00;
    0079 2422      CLR	R2
    007A BA2B      OUT	0x1B,R2
(0028) 	// motordriver
(0029) 	DDRC=0XFF;
    007B BB84      OUT	0x14,R24
(0030) 	PORTC=0X00;
    007C BA25      OUT	0x15,R2
(0031) 	// turn on the first LED
(0032) 	DDRF=0xFF;
    007D 93800061  STS	0x61,R24
(0033) 	PORTF=0x00;
    007F 92200062  STS	0x62,R2
    0081 9508      RET
(0034) 	
(0035) }
(0036) void main()
(0037) {
(0038) 	InitTarget();//
_main:
    0082 DFF2      RCALL	_InitTarget
(0039) 	InitData();
    0083 DFE3      RCALL	_InitData
(0040) 	PORTF=g_ucLedStatus;
    0084 90200101  LDS	R2,g_ucLedStatus
    0086 92200062  STS	0x62,R2
(0041) 	while(true){
    0088 CFFF      RJMP	0x0088
    0089 9508      RET
FILE: D:\NEWWOR~1\motor\time.c
(0001) #include <iom64v.h>
(0002) #include <macros.h>
(0003) #include "head.h"
(0004) 
(0005) 
(0006) /*-----------------------------------------------------------------
(0007) 函数名称: void Timer1Init(void)
(0008) 函数功能: 定时器1初始化  256预分频 定时一秒 
(0009) 参    数: 
(0010) 返 回 值: 无
(0011) -----------------------------------------------------------------*/
(0012) void Time1Init()
(0013) {
(0014) 	CLI(); 			   					//关全部中断		 	   					 //开中断
_Time1Init:
    008A 94F8      BCLR	7
(0015)  	TCCR1B = 0x00; 	 			  //关定时器
    008B 2422      CLR	R2
    008C BC2E      OUT	0x2E,R2
(0016)  	TCNT1H = 0xF0; 				  //设置定时初值
    008D EF80      LDI	R24,0xF0
    008E BD8D      OUT	0x2D,R24
(0017)  	TCNT1L = 0xBE;
    008F EB8E      LDI	R24,0xBE
    0090 BD8C      OUT	0x2C,R24
(0018)  	OCR1AH = 0x0F;
    0091 E08F      LDI	R24,0xF
    0092 BD8B      OUT	0x2B,R24
(0019)  	OCR1AL = 0x42;
    0093 E482      LDI	R24,0x42
    0094 BD8A      OUT	0x2A,R24
(0020)  	OCR1BH = 0x0F;
    0095 E08F      LDI	R24,0xF
    0096 BD89      OUT	0x29,R24
(0021)  	OCR1BL = 0x42;
    0097 E482      LDI	R24,0x42
    0098 BD88      OUT	0x28,R24
(0022)  	ICR1H  = 0x0F;
    0099 E08F      LDI	R24,0xF
    009A BD87      OUT	0x27,R24
(0023)  	ICR1L  = 0x42;
    009B E482      LDI	R24,0x42
    009C BD86      OUT	0x26,R24
(0024)  	TCCR1A = 0x00;
    009D BC2F      OUT	0x2F,R2
(0025)  	TCCR1B = 0x04; 		  		  //开始计数
    009E E084      LDI	R24,4
    009F BD8E      OUT	0x2E,R24
(0026) 	
(0027) 	TIMSK = 0x04; 				  		 //timer interrupt sources
    00A0 BF87      OUT	0x37,R24
(0028)  	SEI(); 
    00A1 9478      BSET	7
    00A2 9508      RET
_timer1_ovf_isr:
    00A3 922A      ST	R2,-Y
    00A4 938A      ST	R24,-Y
    00A5 B62F      IN	R2,0x3F
    00A6 922A      ST	R2,-Y
(0029) }
(0030) 
(0031) #pragma interrupt_handler timer1_ovf_isr:15
(0032) void timer1_ovf_isr(void)
(0033) {
(0034)   
(0035)  	TCNT1H = 0xF0; 		  		  //重新装载计数值
    00A7 EF80      LDI	R24,0xF0
    00A8 BD8D      OUT	0x2D,R24
(0036)  	TCNT1L = 0xBE; 
    00A9 EB8E      LDI	R24,0xBE
    00AA BD8C      OUT	0x2C,R24
(0037) 	if(temp){
    00AB 90200100  LDS	R2,temp
    00AD 2022      TST	R2
    00AE F041      BEQ	0x00B7
(0038) 		g_ucLedStatus=0x00;
    00AF 2422      CLR	R2
    00B0 92200101  STS	g_ucLedStatus,R2
(0039) 	    PORTF = g_ucLedStatus;
    00B2 92200062  STS	0x62,R2
(0040) 		temp=0;
    00B4 92200100  STS	temp,R2
(0041) 	}else{
    00B6 C009      RJMP	0x00C0
(0042) 		 g_ucLedStatus=0xff;
    00B7 EF8F      LDI	R24,0xFF
    00B8 93800101  STS	g_ucLedStatus,R24
(0043) 		 PORTF = g_ucLedStatus;
    00BA 2E28      MOV	R2,R24
    00BB 92200062  STS	0x62,R2
(0044) 		 temp=1;
    00BD E081      LDI	R24,1
    00BE 93800100  STS	temp,R24
(0045) 	}
    00C0 9029      LD	R2,Y+
    00C1 BE2F      OUT	0x3F,R2
    00C2 9189      LD	R24,Y+
    00C3 9029      LD	R2,Y+
    00C4 9518      RETI
_baudselect:
  bauddata             --> R20
  baud                 --> R16
    00C5 940E0134  CALL	push_gset1
FILE: D:\NEWWOR~1\motor\uart.c
(0001) #include <iom64v.h>
(0002) #include <macros.h>
(0003) #include "head.h"
(0004) 
(0005) uint baudselect(uint baud)//baud的选择
(0006) {
(0007)  uint bauddata=0;
    00C7 2744      CLR	R20
    00C8 2755      CLR	R21
(0008)  if(baud==9600) bauddata=0x47;       //baud=9600
    00C9 3800      CPI	R16,0x80
    00CA E2E5      LDI	R30,0x25
    00CB 071E      CPC	R17,R30
    00CC F411      BNE	0x00CF
    00CD E447      LDI	R20,0x47
    00CE C00D      RJMP	0x00DC
(0009)  else if(baud==19200) bauddata=0x23;  //baud=19200
    00CF 3000      CPI	R16,0
    00D0 E4EB      LDI	R30,0x4B
    00D1 071E      CPC	R17,R30
    00D2 F419      BNE	0x00D6
    00D3 E243      LDI	R20,0x23
    00D4 E050      LDI	R21,0
    00D5 C006      RJMP	0x00DC
(0010)  else if(baud==57600) bauddata=0x0B;  //baud=57600
    00D6 3000      CPI	R16,0
    00D7 EEE1      LDI	R30,0xE1
    00D8 071E      CPC	R17,R30
    00D9 F411      BNE	0x00DC
    00DA E04B      LDI	R20,0xB
    00DB E050      LDI	R21,0
(0011)  return(bauddata);
    00DC 018A      MOVW	R16,R20
    00DD 940E0137  CALL	pop_gset1
    00DF 9508      RET
_Uart1Init:
  baud                 --> R20
    00E0 940E0134  CALL	push_gset1
    00E2 01A8      MOVW	R20,R16
(0012) }
(0013) void Uart1Init(uint baud)
(0014) {
(0015)  CLI(); //disable all interrupts
    00E3 94F8      BCLR	7
(0016)  UCSR1B = 0x00; //disable while setting baud rate
    00E4 2422      CLR	R2
    00E5 9220009A  STS	0x9A,R2
(0017)  UCSR1A=0x00;
    00E7 9220009B  STS	0x9B,R2
(0018)  UBRR1H=((baudselect(baud))>>8)&0x00ff;
    00E9 018A      MOVW	R16,R20
    00EA DFDA      RCALL	_baudselect
    00EB 01C8      MOVW	R24,R16
    00EC 2F89      MOV	R24,R25
    00ED 2799      CLR	R25
    00EE 7090      ANDI	R25,0
    00EF 93800098  STS	0x98,R24
(0019)  UBRR1L=(baudselect(baud))&0x00ff;
    00F1 018A      MOVW	R16,R20
    00F2 DFD2      RCALL	_baudselect
    00F3 01C8      MOVW	R24,R16
    00F4 7090      ANDI	R25,0
    00F5 93800099  STS	0x99,R24
(0020)  UCSR1B=(1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);//接收器与发送器使能
    00F7 E988      LDI	R24,0x98
    00F8 9380009A  STS	0x9A,R24
(0021)  UCSR1C=(3<<UCSZ10);//设计浈格式:8位数据位,1位停止位,无效验位,异步模式
    00FA E086      LDI	R24,6
    00FB 9380009D  STS	0x9D,R24
(0022)  SEI(); //re-enable interrupts
    00FD 9478      BSET	7
    00FE 940E0137  CALL	pop_gset1
    0100 9508      RET
(0023) } 
(0024) 
(0025) void USART_Transmit_byte(uchar bytedata)
(0026) {
(0027)  while(!(UCSR1A&(1<<UDRE1)));
_USART_Transmit_byte:
  bytedata             --> R16
    0101 9020009B  LDS	R2,0x9B
    0103 FE25      SBRS	R2,5
    0104 CFFC      RJMP	_USART_Transmit_byte
(0028)  	UDR1=bytedata;
    0105 9300009C  STS	0x9C,R16
    0107 9508      RET
_USART_Transmit_arraydata:
  i                    --> R20
  arraydata            --> R22
  lenght               --> R10
    0108 940E0130  CALL	push_gset3
    010A 01B9      MOVW	R22,R18
    010B 2EA0      MOV	R10,R16
(0029) }
(0030) 
(0031) /***send array_byte data**********/
(0032) 
(0033) void USART_Transmit_arraydata(uchar lenght,uchar arraydata[])
(0034) {
(0035)  uchar i;
(0036)  for(i=0;i<lenght;i++)
    010C 2744      CLR	R20
    010D C007      RJMP	0x0115
(0037)  		USART_Transmit_byte(arraydata[i]);
    010E 2FE4      MOV	R30,R20
    010F 27FF      CLR	R31
    0110 0FE6      ADD	R30,R22
    0111 1FF7      ADC	R31,R23
    0112 8100      LDD	R16,Z+0
    0113 DFED      RCALL	_USART_Transmit_byte
    0114 9543      INC	R20
    0115 154A      CP	R20,R10
    0116 F3B8      BCS	0x010E
    0117 940E0129  CALL	pop_gset3
    0119 9508      RET
(0038) }
(0039) 
(0040) uchar USART_Flush( void ) 
(0041) { 
_USART_Flush:
  dummy                --> R16
    011A C002      RJMP	0x011D
(0042) unsigned char dummy; 
(0043) while ( UCSR1A & (1<<RXC1) ) dummy = UDR1;        //读UDR会使RXC清零 ]
    011B 9100009C  LDS	R16,0x9C
    011D 9020009B  LDS	R2,0x9B
    011F FC27      SBRC	R2,7
    0120 CFFA      RJMP	0x011B
(0044) return dummy;
    0121 9508      RET
(0045) } 
(0046) 
(0047) /*interrupt process***************/
(0048) 
(0049) #pragma interrupt_handler uart1_rx_isr:31
(0050) void uart1_rx_isr(void) //uart has received a character in UDR
(0051) {
_uart1_rx_isr:
    0122 9518      RETI
FILE: D:\NEWWOR~1\motor\motorprocess.c
(0001) #include <iom64v.h>
(0002) #include <macros.h>
(0003) #include "head.h"
(0004) void ActionMoneyDrive(U8 ucData,U8 ucSeg)
(0005) {
_ActionMoneyDrive:
  ucSeg                --> Y+2
  ucData               --> Y+0
    0123 9508      RET
(0006) 	//控制电机
(0007) 	//do something
(0008) 	//电机是否正确动作
(0009) 	//return something
(0010) 	//return true;
(0011) }
(0012) void ActionMotorDrive(U8 ucData,U8 ucSeg)
(0013) {
_ActionMotorDrive:
  ucSeg                --> Y+2
  ucData               --> Y+0
    0124 9508      RET
(0014) 	
(0015) 	//控制电机
(0016) 	//do something
(0017) 	//电机是否正确动作
(0018) 	//return something
(0019) 	//return true;
(0020) }
(0021) 
(0022) void ProcessMoneyDrive()
(0023) {
(0024) 	U8 ucData;
(0025) 	U8 ucSeg;
(0026) 	ucData=ucSeg=0;
_ProcessMoneyDrive:
  ucSeg                --> R16
  ucData               --> R16
    0125 2700      CLR	R16
    0126 9508      RET
(0027) 	///1.第一步
(0028) 	///2.第二步
(0029) 	///
(0030) 	//return true;
(0031) }
(0032) void ProcessMotorDrive()
(0033) {
(0034) 	U8 ucData;
(0035) 	U8 ucSeg;
(0036) 	ucData=ucSeg=0;
FILE: <library>
_ProcessMotorDrive:
  ucSeg                --> R16
  ucData               --> R16
    0127 2700      CLR	R16
    0128 9508      RET
pop_gset3:
    0129 E0E4      LDI	R30,4
    012A 940C0138  JMP	pop
push_gset5:
    012C 92FA      ST	R15,-Y
    012D 92EA      ST	R14,-Y
push_gset4:
    012E 92DA      ST	R13,-Y
    012F 92CA      ST	R12,-Y
push_gset3:
    0130 92BA      ST	R11,-Y
    0131 92AA      ST	R10,-Y
push_gset2:
    0132 937A      ST	R23,-Y
    0133 936A      ST	R22,-Y
push_gset1:
    0134 935A      ST	R21,-Y
    0135 934A      ST	R20,-Y
    0136 9508      RET
pop_gset1:
    0137 E0E1      LDI	R30,1
pop:
    0138 9149      LD	R20,Y+
    0139 9159      LD	R21,Y+
    013A FDE0      SBRC	R30,0
    013B 9508      RET
    013C 9169      LD	R22,Y+
    013D 9179      LD	R23,Y+
    013E FDE1      SBRC	R30,1
    013F 9508      RET
    0140 90A9      LD	R10,Y+
    0141 90B9      LD	R11,Y+
    0142 FDE2      SBRC	R30,2
    0143 9508      RET
    0144 90C9      LD	R12,Y+
    0145 90D9      LD	R13,Y+
    0146 FDE3      SBRC	R30,3
    0147 9508      RET
    0148 90E9      LD	R14,Y+
    0149 90F9      LD	R15,Y+
    014A 9508      RET

⌨️ 快捷键说明

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