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

📄 motor_master.lst

📁 用ICC编写的程序包括SPI
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0148 9508      RET
FILE: F:\IccAvr_Pro\Motor_master.c
(0001) 
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) //#include "Display.h"
(0005) #include "SPI_master.h"
(0006) #include "time_master.h"
(0007) 
(0008) extern unsigned char timeflag,dispflag;
(0009) 
(0010) 
(0011) extern unsigned char SPI_rx_buff[SIZE];  
(0012) extern unsigned char SPI_tx_buff[SIZE];  
(0013) extern unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow;  
(0014) extern unsigned char tx_wr_index,tx_rd_index,tx_counter,SPI_ok,SPI_datain,temp;
(0015) 
(0016) unsigned char pwm[2]={0x7f,0xff};
(0017) unsigned char qep_data1[3],qep_data2[3];
(0018) void port_init(void)
(0019) {
(0020)  PORTA = 0x00;
_port_init:
    0149 2422      CLR	R2
    014A BA2B      OUT	0x1B,R2
(0021)  DDRA  = 0x00;
    014B BA2A      OUT	0x1A,R2
(0022)  PORTB = 0x00;
    014C BA28      OUT	0x18,R2
(0023)  DDRB  = 0x00;
    014D BA27      OUT	0x17,R2
(0024)  PORTC = 0x00; //m103 output only
    014E BA25      OUT	0x15,R2
(0025)  DDRC  = 0x00;
    014F BA24      OUT	0x14,R2
(0026)  PORTD = 0x00;
    0150 BA22      OUT	0x12,R2
(0027)  DDRD  = 0x00;
    0151 BA21      OUT	0x11,R2
    0152 9508      RET
(0028) }
(0029) 
(0030) 
(0031) 
(0032) //call this routine to initialize all peripherals
(0033) void init_devices(void)
(0034) {
(0035)  //stop errant interrupts until set up
(0036)  CLI(); //disable all interrupts
_init_devices:
    0153 94F8      BCLR	7
(0037)  port_init();
    0154 DFF4      RCALL	_port_init
(0038)  timer0_init();
    0155 940E004C  CALL	_timer0_init
(0039)  timer2_init();
    0157 940E0064  CALL	_timer2_init
(0040)  spi_init();
    0159 940E0131  CALL	_spi_init
(0041) 
(0042)  
(0043)  MCUCR = 0x00;
    015B 2422      CLR	R2
    015C BE25      OUT	0x35,R2
(0044)  GICR  = 0x00;
    015D BE2B      OUT	0x3B,R2
(0045)  TIMSK = 0x41; //timer interrupt sources
    015E E481      LDI	R24,0x41
    015F BF89      OUT	0x39,R24
(0046)  SEI(); //re-enable interrupts
    0160 9478      BSET	7
    0161 9508      RET
_main:
  t                    --> R20
  set_pwm              --> R10
  SPI_flag             --> R20
  c                    --> R14
  i                    --> Y+2
  j                    --> Y+0
    0162 9723      SBIW	R28,3
(0047)  //all peripherals are now initialized
(0048) }
(0049) 
(0050) //
(0051) void main(void)
(0052) {
(0053)  	 unsigned char i=0,t=0;
    0163 2400      CLR	R0
    0164 820A      STD	Y+2,R0
    0165 2744      CLR	R20
(0054) 	 int j=0;
    0166 2411      CLR	R1
    0167 8219      STD	Y+1,R1
    0168 8208      STD	Y+0,R0
(0055) 	 unsigned char SPI_flag=1;
    0169 E041      LDI	R20,1
(0056) 	 unsigned char c;
(0057) 	 unsigned char set_pwm=1;
    016A 24AA      CLR	R10
    016B 94A3      INC	R10
(0058) 	 
(0059) 	 //unsigned char aa_flag;
(0060) 	 
(0061) 	 
(0062) 	 init_devices();
    016C DFE6      RCALL	_init_devices
(0063)  	 //insert your functional code here...
(0064) 	 PORTB&=~BIT(SS);
    016D 98C4      CBI	0x18,4
(0065) 	 putSPIchar(0xaa);
    016E EA0A      LDI	R16,0xAA
    016F 940E0104  CALL	_putSPIchar
(0066) 	 getSPIchar();
    0171 940E00E5  CALL	_getSPIchar
(0067) 	 putSPIchar(0x00);
    0173 2700      CLR	R16
    0174 940E0104  CALL	_putSPIchar
(0068) 	 getSPIchar();
    0176 940E00E5  CALL	_getSPIchar
(0069)      putSPIchar(0x00);
    0178 2700      CLR	R16
    0179 940E0104  CALL	_putSPIchar
(0070) 	 getSPIchar();
    017B 940E00E5  CALL	_getSPIchar
(0071) 	 putSPIchar(0x00);
    017D 2700      CLR	R16
    017E 940E0104  CALL	_putSPIchar
(0072) 	 getSPIchar();
    0180 940E00E5  CALL	_getSPIchar
(0073) 	 PORTB|=BIT(SS);
    0182 9AC4      SBI	0x18,4
    0183 C0D3      RJMP	0x0257
(0074) 		  
(0075) 	 
(0076) 	 
(0077) 	  
(0078) 	 while(1)
(0079) 	 {
(0080) 		while(timeflag)
(0081) 		{
(0082) 		  timeflag=0;
    0184 2422      CLR	R2
    0185 92200064  STS	timeflag,R2
(0083) 		  if(SPI_flag)
    0187 2344      TST	R20
    0188 F409      BNE	0x018A
    0189 C0AE      RJMP	0x0238
(0084) 		  {
(0085) 		  PORTB&=~BIT(SS);
    018A 98C4      CBI	0x18,4
(0086) 		  putSPIchar(0xaa);
    018B EA0A      LDI	R16,0xAA
    018C 940E0104  CALL	_putSPIchar
(0087) 		  getSPIchar();
    018E 940E00E5  CALL	_getSPIchar
(0088) 		  putSPIchar(0x01);
    0190 E001      LDI	R16,1
    0191 940E0104  CALL	_putSPIchar
(0089) 		  getSPIchar();
    0193 940E00E5  CALL	_getSPIchar
(0090) 		  putSPIchar(0x00);
    0195 2700      CLR	R16
    0196 940E0104  CALL	_putSPIchar
(0091) 		  for(i=0,j=-1;i<10&j<3;i++)
    0198 2400      CLR	R0
    0199 820A      STD	Y+2,R0
    019A EF8F      LDI	R24,0xFF
    019B EF9F      LDI	R25,0xFF
    019C 8399      STD	Y+1,R25
    019D 8388      STD	Y+0,R24
    019E C01F      RJMP	0x01BE
(0092) 		   {
(0093) 		     if((c=getSPIchar())==0x55)
    019F 940E00E5  CALL	_getSPIchar
    01A1 2EE0      MOV	R14,R16
    01A2 3505      CPI	R16,0x55
    01A3 F421      BNE	0x01A8
(0094) 			  j=0;
    01A4 2400      CLR	R0
    01A5 2411      CLR	R1
    01A6 8219      STD	Y+1,R1
    01A7 8208      STD	Y+0,R0
(0095) 			 putSPIchar(0x44);
    01A8 E404      LDI	R16,0x44
    01A9 940E0104  CALL	_putSPIchar
(0096) 			 if(j>=0)
    01AB 8188      LDD	R24,Y+0
    01AC 8199      LDD	R25,Y+1
    01AD 3080      CPI	R24,0
    01AE E0E0      LDI	R30,0
    01AF 079E      CPC	R25,R30
    01B0 F054      BLT	0x01BB
(0097) 			 qep_data1[j++]=c;
    01B1 011C      MOVW	R2,R24
    01B2 9601      ADIW	R24,1
    01B3 8399      STD	Y+1,R25
    01B4 8388      STD	Y+0,R24
    01B5 E38A      LDI	R24,0x3A
    01B6 E091      LDI	R25,1
    01B7 01F1      MOVW	R30,R2
    01B8 0FE8      ADD	R30,R24
    01B9 1FF9      ADC	R31,R25
    01BA 82E0      STD	Z+0,R14
    01BB 800A      LDD	R0,Y+2
    01BC 9403      INC	R0
    01BD 820A      STD	Y+2,R0
    01BE 818A      LDD	R24,Y+2
    01BF 308A      CPI	R24,0xA
    01C0 F420      BCC	0x01C5
    01C1 E081      LDI	R24,1
    01C2 E090      LDI	R25,0
    01C3 016C      MOVW	R12,R24
    01C4 C002      RJMP	0x01C7
    01C5 24CC      CLR	R12
    01C6 24DD      CLR	R13
    01C7 8188      LDD	R24,Y+0
    01C8 8199      LDD	R25,Y+1
    01C9 3083      CPI	R24,3
    01CA E0E0      LDI	R30,0
    01CB 079E      CPC	R25,R30
    01CC F41C      BGE	0x01D0
    01CD E061      LDI	R22,1
    01CE E070      LDI	R23,0
    01CF C002      RJMP	0x01D2
    01D0 2766      CLR	R22
    01D1 2777      CLR	R23
    01D2 0116      MOVW	R2,R12
    01D3 2226      AND	R2,R22
    01D4 2237      AND	R3,R23
    01D5 2022      TST	R2
    01D6 F009      BEQ	0x01D8
    01D7 CFC7      RJMP	0x019F
    01D8 2033      TST	R3
    01D9 F009      BEQ	0x01DB
    01DA CFC4      RJMP	0x019F
(0098) 			}
(0099) 		  getSPIchar();
    01DB 940E00E5  CALL	_getSPIchar
(0100) 	
(0101) 		  putSPIchar(0x00);
    01DD 2700      CLR	R16
    01DE 940E0104  CALL	_putSPIchar
(0102) 		  getSPIchar();
    01E0 940E00E5  CALL	_getSPIchar
(0103) 		  
(0104) 		  NOP();
    01E2 0000      NOP
(0105) 		  putSPIchar(0xaa);
    01E3 EA0A      LDI	R16,0xAA
    01E4 940E0104  CALL	_putSPIchar
(0106) 		  getSPIchar();
    01E6 940E00E5  CALL	_getSPIchar
(0107) 		  putSPIchar(0x02);
    01E8 E002      LDI	R16,2
    01E9 940E0104  CALL	_putSPIchar
(0108) 		  getSPIchar();
    01EB 940E00E5  CALL	_getSPIchar
(0109) 		  putSPIchar(0x00);
    01ED 2700      CLR	R16
    01EE 940E0104  CALL	_putSPIchar
(0110) 		  for(i=0,j=-1;i<10&j<3;i++)
    01F0 2400      CLR	R0
    01F1 820A      STD	Y+2,R0
    01F2 EF8F      LDI	R24,0xFF
    01F3 EF9F      LDI	R25,0xFF
    01F4 8399      STD	Y+1,R25
    01F5 8388      STD	Y+0,R24
    01F6 C01F      RJMP	0x0216
(0111) 		   {
(0112) 		     if((c=getSPIchar())==0x56)
    01F7 940E00E5  CALL	_getSPIchar
    01F9 2EE0      MOV	R14,R16
    01FA 3506      CPI	R16,0x56
    01FB F421      BNE	0x0200
(0113) 			  j=0;
    01FC 2400      CLR	R0
    01FD 2411      CLR	R1
    01FE 8219      STD	Y+1,R1
    01FF 8208      STD	Y+0,R0
(0114) 			 putSPIchar(0x44);
    0200 E404      LDI	R16,0x44
    0201 940E0104  CALL	_putSPIchar
(0115) 			 if(j>=0)
    0203 8188      LDD	R24,Y+0
    0204 8199      LDD	R25,Y+1
    0205 3080      CPI	R24,0
    0206 E0E0      LDI	R30,0
    0207 079E      CPC	R25,R30
    0208 F054      BLT	0x0213
(0116) 			 qep_data2[j++]=c;
    0209 011C      MOVW	R2,R24
    020A 9601      ADIW	R24,1
    020B 8399      STD	Y+1,R25
    020C 8388      STD	Y+0,R24
    020D E387      LDI	R24,0x37
    020E E091      LDI	R25,1
    020F 01F1      MOVW	R30,R2
    0210 0FE8      ADD	R30,R24
    0211 1FF9      ADC	R31,R25
    0212 82E0      STD	Z+0,R14
    0213 800A      LDD	R0,Y+2
    0214 9403      INC	R0
    0215 820A      STD	Y+2,R0
    0216 818A      LDD	R24,Y+2
    0217 308A      CPI	R24,0xA
    0218 F418      BCC	0x021C
    0219 E061      LDI	R22,1
    021A E070      LDI	R23,0
    021B C002      RJMP	0x021E
    021C 2766      CLR	R22
    021D 2777      CLR	R23
    021E 8188      LDD	R24,Y+0
    021F 8199      LDD	R25,Y+1
    0220 3083      CPI	R24,3
    0221 E0E0      LDI	R30,0
    0222 079E      CPC	R25,R30
    0223 F424      BGE	0x0228
    0224 E081      LDI	R24,1
    0225 E090      LDI	R25,0
    0226 016C      MOVW	R12,R24
    0227 C002      RJMP	0x022A
    0228 24CC      CLR	R12
    0229 24DD      CLR	R13
    022A 011B      MOVW	R2,R22
    022B 202C      AND	R2,R12
    022C 203D      AND	R3,R13
    022D 2022      TST	R2
    022E F009      BEQ	0x0230
    022F CFC7      RJMP	0x01F7
    0230 2033      TST	R3
    0231 F009      BEQ	0x0233
    0232 CFC4      RJMP	0x01F7
(0117) 			}
(0118) 		  getSPIchar();
    0233 940E00E5  CALL	_getSPIchar
(0119) 		  NOP();
    0235 0000      NOP
(0120) 		  PORTB|=BIT(SS);
    0236 9AC4      SBI	0x18,4
(0121) 		  NOP();
    0237 0000      NOP
(0122) 		  }
(0123) 		  if(set_pwm)
    0238 20AA      TST	R10
    0239 F0C1      BEQ	0x0252
(0124) 		  {
(0125) 		  PORTB&=~BIT(SS);
    023A 98C4      CBI	0x18,4
(0126) 	  	  putSPIchar(0x55);
    023B E505      LDI	R16,0x55
    023C 940E0104  CALL	_putSPIchar
(0127) 	 	  getSPIchar();
    023E 940E00E5  CALL	_getSPIchar
(0128) 	 	  putSPIchar(pwm[0]);
    0240 91000060  LDS	R16,pwm
    0242 940E0104  CALL	_putSPIchar
(0129) 	 	  getSPIchar();
    0244 940E00E5  CALL	_getSPIchar
(0130)      	  putSPIchar(pwm[1]);
    0246 91000061  LDS	R16,pwm+1
    0248 940E0104  CALL	_putSPIchar
(0131) 	 	  getSPIchar();
    024A 940E00E5  CALL	_getSPIchar
(0132) 		  putSPIchar(0x00);
    024C 2700      CLR	R16
    024D 940E0104  CALL	_putSPIchar
(0133) 		  getSPIchar();
    024F 940E00E5  CALL	_getSPIchar
(0134) 	 	  PORTB|=BIT(SS);
FILE: <library>
    0251 9AC4      SBI	0x18,4
    0252 90200064  LDS	R2,timeflag
    0254 2022      TST	R2
    0255 F009      BEQ	0x0257
    0256 CF2D      RJMP	0x0184
    0257 CFFA      RJMP	0x0252
    0258 9623      ADIW	R28,3
    0259 9508      RET

⌨️ 快捷键说明

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