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

📄 8.lst

📁 mega8 对电机控制。采用mega8对电机控制。然后再用mega16 来控制mega8
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0510 C008      RJMP	0x0519
(0222)    {case 'g':PORTD|=0x40;PORTD|=0x80;break;
    0511 9A96      SBI	0x12,6
    0512 9A97      SBI	0x12,7
    0513 C005      RJMP	0x0519
(0223)     case 'b':PORTD&=~0x40;PORTD|=0x80;break;
    0514 9896      CBI	0x12,6
    0515 9A97      SBI	0x12,7
    0516 C002      RJMP	0x0519
(0224)     case 's': PORTD&=~0x40;PORTD&=~0x80;break;
    0517 9896      CBI	0x12,6
    0518 9897      CBI	0x12,7
(0225)     default:break;
(0226)    }  
(0227)  }
    0519 D236      RCALL	pop_gset1
    051A 9508      RET
_pushmotor1:
  m                    --> R16
    051B D231      RCALL	push_gset1
(0228)  
(0229)  
(0230)  void pushmotor1(unsigned char m)
(0231) {
(0232)       switch(m)
    051C 2F40      MOV	R20,R16
    051D 2755      CLR	R21
    051E 3647      CPI	R20,0x67
    051F E0E0      LDI	R30,0
    0520 075E      CPC	R21,R30
    0521 F049      BEQ	0x052B
    0522 3647      CPI	R20,0x67
    0523 E0E0      LDI	R30,0
    0524 075E      CPC	R21,R30
    0525 F044      BLT	0x052E
    0526 3743      CPI	R20,0x73
    0527 E0E0      LDI	R30,0
    0528 075E      CPC	R21,R30
    0529 F019      BEQ	0x052D
    052A C003      RJMP	0x052E
(0233)    {case 'g':PORTC|=0x20;break;
    052B 9AAD      SBI	0x15,5
    052C C001      RJMP	0x052E
(0234)     case 's': PORTC&=~0x20;break;
    052D 98AD      CBI	0x15,5
(0235)     default:break;
(0236)    }  
(0237)  }
    052E D221      RCALL	pop_gset1
    052F 9508      RET
FILE: E:\李斐机器人\xunxianjiadongzuo\8\TIMEDELAY8.C
(0001) /************************************************************************
(0002) TIMEDELAY.C实现了六个级别的软件延时,分别为:
(0003) void delay_us();			               微秒级延时程序
(0004) void delay_10us(unsigned int M);           10微秒级延时程序
(0005) void delay_100us(unsigned int M);          100微秒级延时程序
(0006) void delay_ms(unsigned int M);	           毫秒级延时程序
(0007) void delay_10ms(unsigned int M);           10毫秒级延时程序
(0008) void delay_100ms(unsigned char M);         100毫秒级延时程序
(0009) void delay_s(unsigned char M);	           秒级延时程序
(0010) 
(0011)  TIMEDELAY.C中使用AVRStudio仿真,void delay_us()函数中定时为1us;
(0012)  后续微秒级延时函数调用此函数实现定时。函数形参M用法如下:
(0013)  如延时50us,调用delay_10us(5).注释部分为误差分析,M取值100,1000,5000时, 
(0014)  AVRStudio仿真中实际运行时间为TIME,ERROR为计算所得误差。
(0015) ************************************************************************/
(0016) 
(0017) #include <iom8v.h>
(0018) #include <macros.h>
(0019) 
(0020) 
(0021) /*********************************delay_us()************************************
(0022)  ERROR=0
(0023) ********************************************************************************/
(0024) void delay_us()                    
(0025) 
(0026) {
(0027)  	NOP();
_delay_us:
    0530 0000      NOP
(0028) }
    0531 9508      RET
_delay_10us:
  i                    --> R22
  i                    --> Y+1
  M                    --> R20
    0532 D231      RCALL	push_gset2
    0533 01A8      MOVW	R20,R16
(0029) 
(0030) /*********************************delay_10us(unsigned int M)******************
(0031) M=1,TIME=17.50,ERROR=75%;  (注意!!!误差较大,请选用其他量级)
(0032) M=10,TIME=107.50,ERROR=7.5%;   (注意!!!误差较大,请选用其他量级)
(0033) M=100,TIME=1007.50,ERROR=0.75%;
(0034) M=1000,TIME=10008.25,ERROR=0.0825%; 
(0035) M=5000,TIME=50012.25,ERROR=0.0245%;
(0036) ******************************************************************************/
(0037) void delay_10us(unsigned int M)   
(0038) {  
    0534 C00F      RJMP	0x0544
(0039)    unsigned int i;
(0040)    while(M--)
(0041)    { 
(0042)    	 unsigned int i=4;
    0535 E064      LDI	R22,4
    0536 E070      LDI	R23,0
    0537 C002      RJMP	0x053A
(0043)      while(i--)
(0044) 	   {
(0045) 		 delay_us();
    0538 DFF7      RCALL	_delay_us
(0046) 		 NOP();
    0539 0000      NOP
    053A 011B      MOVW	R2,R22
    053B 5061      SUBI	R22,1
    053C 4070      SBCI	R23,0
    053D 2022      TST	R2
    053E F7C9      BNE	0x0538
    053F 2033      TST	R3
    0540 F7B9      BNE	0x0538
(0047) 		}
(0048) 	 NOP();
    0541 0000      NOP
(0049) 	 NOP();
    0542 0000      NOP
(0050) 	 NOP();
    0543 0000      NOP
    0544 011A      MOVW	R2,R20
    0545 5041      SUBI	R20,1
    0546 4050      SBCI	R21,0
    0547 2022      TST	R2
    0548 F761      BNE	0x0535
    0549 2033      TST	R3
    054A F751      BNE	0x0535
(0051)    }
(0052) }
    054B D1FB      RCALL	pop_gset2
    054C 9508      RET
_delay_100us:
  i                    --> R22
  i                    --> Y+1
  M                    --> R20
    054D D216      RCALL	push_gset2
    054E 01A8      MOVW	R20,R16
(0053) 
(0054) /*********************************delay_100us(unsigned int M)***********
(0055) M=1,TIME=107.50,ERROR=7.5%;  (注意!!!误差较大,请选用其他量级)
(0056) M=10,TIME=1007.50,ERROR=0.75%;
(0057) M=100,TIME=10007.50,ERROR=0.075%;
(0058) M=1000,TIME=100008.25,ERROR=0.00825%; 
(0059) M=5000,TIME=500012.25,ERROR=0.00245%;
(0060) ************************************************************************/
(0061) 
(0062) void delay_100us(unsigned int M)  
(0063) {   
    054F C00F      RJMP	0x055F
(0064)     unsigned int i;
(0065)     while(M--)
(0066) 	{
(0067) 	  unsigned int i=52;
    0550 E364      LDI	R22,0x34
    0551 E070      LDI	R23,0
    0552 C002      RJMP	0x0555
(0068) 	  while(i--)                
(0069)         {
(0070) 		 delay_us();
    0553 DFDC      RCALL	_delay_us
(0071) 		 NOP();
    0554 0000      NOP
    0555 011B      MOVW	R2,R22
    0556 5061      SUBI	R22,1
    0557 4070      SBCI	R23,0
    0558 2022      TST	R2
    0559 F7C9      BNE	0x0553
    055A 2033      TST	R3
    055B F7B9      BNE	0x0553
(0072) 		}
(0073) 		NOP();
    055C 0000      NOP
(0074) 		NOP();
    055D 0000      NOP
(0075) 		NOP();
    055E 0000      NOP
    055F 011A      MOVW	R2,R20
    0560 5041      SUBI	R20,1
    0561 4050      SBCI	R21,0
    0562 2022      TST	R2
    0563 F761      BNE	0x0550
    0564 2033      TST	R3
    0565 F751      BNE	0x0550
(0076)    }
(0077) }
    0566 D1E0      RCALL	pop_gset2
    0567 9508      RET
_delay_ms:
  i                    --> R22
  i                    --> Y+1
  M                    --> R20
    0568 D1FB      RCALL	push_gset2
    0569 01A8      MOVW	R20,R16
(0078) 
(0079) /*********************************delay_ms(unsigned int M)***************************
(0080) M=1,TIME=1007.50,ERROR=0.75%; 
(0081) M=10,TIME=10007.50,ERROR=0.075%;
(0082) M=100,TIME=100007.50,ERROR=0.0075%;
(0083) M=1000,TIME=1000008.25,ERROR=0.000825%; 
(0084) M=5000,TIME=5000012.25,ERROR=0.000245%;
(0085) ***********************************************************************/
(0086) void delay_ms(unsigned int M) 
(0087) {  unsigned int i;
    056A C01A      RJMP	0x0585
(0088) 	while(M--)
(0089) 	{ unsigned int i=531;
    056B E163      LDI	R22,0x13
    056C E072      LDI	R23,2
    056D C002      RJMP	0x0570
(0090) 		while(i--)                
(0091)         {
(0092) 		 delay_us();
    056E DFC1      RCALL	_delay_us
(0093) 		 NOP();
    056F 0000      NOP
    0570 011B      MOVW	R2,R22
    0571 5061      SUBI	R22,1
    0572 4070      SBCI	R23,0
    0573 2022      TST	R2
    0574 F7C9      BNE	0x056E
    0575 2033      TST	R3
    0576 F7B9      BNE	0x056E
(0094) 		}
(0095) 		NOP();
    0577 0000      NOP
(0096) 		NOP();
    0578 0000      NOP
(0097) 		NOP();
    0579 0000      NOP
(0098) 		NOP();
    057A 0000      NOP
(0099) 		NOP();
    057B 0000      NOP
(0100) 		NOP();
    057C 0000      NOP
(0101) 		NOP();
    057D 0000      NOP
(0102) 		NOP();
    057E 0000      NOP
(0103) 		NOP();
    057F 0000      NOP
(0104) 		NOP();
    0580 0000      NOP
(0105) 		NOP();
    0581 0000      NOP
(0106) 		NOP();
    0582 0000      NOP
(0107) 		NOP();
    0583 0000      NOP
(0108) 		NOP();
    0584 0000      NOP
    0585 011A      MOVW	R2,R20
    0586 5041      SUBI	R20,1
    0587 4050      SBCI	R21,0
    0588 2022      TST	R2
    0589 F709      BNE	0x056B
    058A 2033      TST	R3
    058B F6F9      BNE	0x056B
(0109) 		
(0110)        }
(0111) }
    058C D1BA      RCALL	pop_gset2
    058D 9508      RET
_delay_10ms:
  M                    --> R20
    058E D1BE      RCALL	push_gset1
    058F 01A8      MOVW	R20,R16
(0112) 
(0113) 
(0114) 
(0115) /*********************************delay_10ms(unsigned int M)***************************/
(0116) void delay_10ms(unsigned int  M) 
(0117) {
    0590 C005      RJMP	0x0596
(0118) 	while(M)
(0119) 	{
(0120) 	  delay_ms(10);
    0591 E00A      LDI	R16,0xA
    0592 E010      LDI	R17,0
    0593 DFD4      RCALL	_delay_ms
(0121) 	  M--;
    0594 5041      SUBI	R20,1
    0595 4050      SBCI	R21,0
    0596 3040      CPI	R20,0
    0597 0745      CPC	R20,R21
    0598 F7C1      BNE	0x0591
(0122) 	}
(0123) }
    0599 D1B6      RCALL	pop_gset1
    059A 9508      RET
_delay_100ms:
  M                    --> R20
    059B D1B1      RCALL	push_gset1
    059C 01A8      MOVW	R20,R16
(0124) 
(0125) 
(0126) 
(0127) /*********************************delay_100ms(unsigned int M)***************************/
(0128) void delay_100ms(unsigned int  M) 
(0129) {
    059D C005      RJMP	0x05A3
(0130) 	while(M)
(0131) 	{
(0132) 	 delay_ms(100);
    059E E604      LDI	R16,0x64
    059F E010      LDI	R17,0
    05A0 DFC7      RCALL	_delay_ms
(0133) 	 M--;
    05A1 5041      SUBI	R20,1
    05A2 4050      SBCI	R21,0
    05A3 3040      CPI	R20,0
    05A4 0745      CPC	R20,R21
    05A5 F7C1      BNE	0x059E
(0134) 	}
(0135) }
    05A6 D1A9      RCALL	pop_gset1
    05A7 9508      RET
_delay_s:
  M                    --> R20
    05A8 D1A4      RCALL	push_gset1
    05A9 01A8      MOVW	R20,R16
(0136) 
(0137) 
(0138) 
(0139) /*********************************delay_s(unsigned int M)***************************/
(0140) void delay_s(unsigned int M) 
(0141) {
    05AA C005      RJMP	0x05B0
(0142) while(M)
(0143) 	{
(0144) 		delay_ms(1000);
    05AB EE08      LDI	R16,0xE8
    05AC E013      LDI	R17,3
    05AD DFBA      RCALL	_delay_ms
(0145) 		M--;
    05AE 5041      SUBI	R20,1
    05AF 4050      SBCI	R21,0
    05B0 3040      CPI	R20,0
    05B1 0745      CPC	R20,R21
    05B2 F7C1      BNE	0x05AB
(0146) 	}
(0147) }
    05B3 D19C      RCALL	pop_gset1
    05B4 9508      RET
FILE: E:\李斐机器人\xunxianjiadongzuo\8\xunxiandongzuo8.c
(0001) //ICC-AVR application builder : 2005-12-22 22:30:20
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) #include <iom8v.h>
(0005) #include <macros.h>
(0006) 
(0007) #include "Main8.h"
(0008) 
(0009) 
(0010) #include "L_PID.c"
(0011) #include "Slave_SPI.c"
(0012) #include "TIMEDELAY8.C"
(0013) 
(0014) 
(0015) void port_init(void)
(0016) {
(0017)  PORTB = 0x00;
_port_init:
    05B5 2422      CLR	R2
    05B6 BA28      OUT	0x18,R2
(0018)  DDRB  = 0x00;
    05B7 BA27      OUT	0x17,R2
(0019)  PORTC =  0x00; //m103 output only
    05B8 BA25      OUT	0x15,R2
(0020)  DDRC  = 0x00;
    05B9 BA24      OUT	0x14,R2
(0021)  PORTD =  0x00;
    05BA BA22      OUT	0x12,R2
(0022)  DDRD  = 0x00;
    05BB BA21      OUT	0x11,R2
(0023)  
(0024)  PORTB |= 0x02;	//OC1A output ,high level
    05BC 9AC1      SBI	0x18,1
(0025)  DDRB |= 0x02;	
    05BD 9AB9      SBI	0x17,1
(0026)  
(0027)  PORTC &= ~0x02;
    05BE 98A9      CBI	0x15,1
(0028)  DDRC |= 0x02;
    05BF 9AA1      SBI	0x14,1
(0029)  
(0030)  PORTC |= 0x08;	//PC3 输出,控制电机方向,1->正转,0

⌨️ 快捷键说明

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