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

📄 steper.lss

📁 步近电机控制代码
💻 LSS
📖 第 1 页 / 共 3 页
字号:
	DDRB=0X00;   //配置为输入,内部上拉
 494:	17 ba       	out	0x17, r1	; 23
	PORTB=0XFF;
 496:	8f ef       	ldi	r24, 0xFF	; 255
 498:	88 bb       	out	0x18, r24	; 24
	
	DDRC=(1<<PC2|1<<PC3); //PC2,PC3 LED Out
 49a:	8c e0       	ldi	r24, 0x0C	; 12
 49c:	84 bb       	out	0x14, r24	; 20
	PORTC=0x00;
 49e:	15 ba       	out	0x15, r1	; 21
	
	DDRD=(1<<PD3|1<<PD4|1<<PD5|1<<PD6|1<<PD7);
 4a0:	88 ef       	ldi	r24, 0xF8	; 248
 4a2:	81 bb       	out	0x11, r24	; 17
	PORTD=0X00;
 4a4:	12 ba       	out	0x12, r1	; 18
	
	MCUCR=(1<<ISC01);
 4a6:	82 e0       	ldi	r24, 0x02	; 2
 4a8:	85 bf       	out	0x35, r24	; 53
	GICR=1<<INT0;
 4aa:	80 e4       	ldi	r24, 0x40	; 64
 4ac:	8b bf       	out	0x3b, r24	; 59
	
//初始化变量
	Direction=0;
 4ae:	10 92 6a 00 	sts	0x006A, r1
	eeprom_is_ready();
 4b2:	8c b3       	in	r24, 0x1c	; 28
/** \ingroup avr_eeprom
    Read one byte from EEPROM address \a __p.
 */
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
    do {} while (!eeprom_is_ready ());
 4b4:	e1 99       	sbic	0x1c, 1	; 28
 4b6:	fe cf       	rjmp	.-4      	; 0x4b4 <avr_init+0x20>
#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
 4b8:	1f ba       	out	0x1f, r1	; 31
 4ba:	1e ba       	out	0x1e, r1	; 30
#endif
    EECR |= (1 << EERE);
 4bc:	e0 9a       	sbi	0x1c, 0	; 28
    return EEDR;
 4be:	8d b3       	in	r24, 0x1d	; 29
	if(eeprom_read_byte(0x00)==0xFF)
 4c0:	8f 3f       	cpi	r24, 0xFF	; 255
 4c2:	21 f5       	brne	.+72     	; 0x50c <avr_init+0x78>
	{
		eeprom_is_ready();
 4c4:	8c b3       	in	r24, 0x1c	; 28
/** \ingroup avr_eeprom
    Write a byte \a __value to EEPROM address \a __p.
 */
static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value)
{
    do {} while (!eeprom_is_ready ());
 4c6:	e1 99       	sbic	0x1c, 1	; 28
 4c8:	fe cf       	rjmp	.-4      	; 0x4c6 <avr_init+0x32>
#endif

#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
 4ca:	1f ba       	out	0x1f, r1	; 31
 4cc:	1e ba       	out	0x1e, r1	; 30
#endif
    EEDR = __value;
 4ce:	1d ba       	out	0x1d, r1	; 29

    __asm__ __volatile__ (
 4d0:	0f b6       	in	r0, 0x3f	; 63
 4d2:	f8 94       	cli
 4d4:	e2 9a       	sbi	0x1c, 2	; 28
 4d6:	e1 9a       	sbi	0x1c, 1	; 28
 4d8:	0f be       	out	0x3f, r0	; 63
		eeprom_write_byte(0x00,0x00);
		eeprom_is_ready();
 4da:	8c b3       	in	r24, 0x1c	; 28
/** \ingroup avr_eeprom
    Write a word \a __value to EEPROM address \a __p.
 */
static __inline__ void eeprom_write_word (uint16_t *__p, uint16_t __value)
{
    __eewr_word (__p, __value, eeprom_write_byte);
 4dc:	41 eb       	ldi	r20, 0xB1	; 177
 4de:	50 e0       	ldi	r21, 0x00	; 0
 4e0:	60 e0       	ldi	r22, 0x00	; 0
 4e2:	70 e0       	ldi	r23, 0x00	; 0
 4e4:	81 e0       	ldi	r24, 0x01	; 1
 4e6:	90 e0       	ldi	r25, 0x00	; 0
 4e8:	95 d0       	rcall	.+298    	; 0x614 <__eewr_word>
		eeprom_write_word(0x01,0x0000);
		eeprom_is_ready();
 4ea:	8c b3       	in	r24, 0x1c	; 28
 4ec:	41 eb       	ldi	r20, 0xB1	; 177
 4ee:	50 e0       	ldi	r21, 0x00	; 0
 4f0:	60 e0       	ldi	r22, 0x00	; 0
 4f2:	70 e0       	ldi	r23, 0x00	; 0
 4f4:	83 e0       	ldi	r24, 0x03	; 3
 4f6:	90 e0       	ldi	r25, 0x00	; 0
 4f8:	8d d0       	rcall	.+282    	; 0x614 <__eewr_word>
		eeprom_write_word(0x03,0x0000);
		Position[0]=0;
 4fa:	10 92 71 00 	sts	0x0071, r1
 4fe:	10 92 70 00 	sts	0x0070, r1
		Position[1]=0;
 502:	10 92 73 00 	sts	0x0073, r1
 506:	10 92 72 00 	sts	0x0072, r1
 50a:	12 c0       	rjmp	.+36     	; 0x530 <avr_init+0x9c>
/** \ingroup avr_eeprom
    Read one 16-bit word (little endian) from EEPROM address \a __p.
 */
__ATTR_PURE__ static __inline__ uint16_t eeprom_read_word (const uint16_t *__p)
{
    return __eerd_word (__p, eeprom_read_byte);
 50c:	69 ea       	ldi	r22, 0xA9	; 169
 50e:	70 e0       	ldi	r23, 0x00	; 0
 510:	81 e0       	ldi	r24, 0x01	; 1
 512:	90 e0       	ldi	r25, 0x00	; 0
 514:	69 d0       	rcall	.+210    	; 0x5e8 <__eerd_word>
	}
	else
	{
		Position[0]=eeprom_read_word(0x01);
 516:	90 93 71 00 	sts	0x0071, r25
 51a:	80 93 70 00 	sts	0x0070, r24
 51e:	69 ea       	ldi	r22, 0xA9	; 169
 520:	70 e0       	ldi	r23, 0x00	; 0
 522:	83 e0       	ldi	r24, 0x03	; 3
 524:	90 e0       	ldi	r25, 0x00	; 0
 526:	60 d0       	rcall	.+192    	; 0x5e8 <__eerd_word>
		Position[1]=eeprom_read_word(0x03);
 528:	90 93 73 00 	sts	0x0073, r25
 52c:	80 93 72 00 	sts	0x0072, r24

}

void Timer0_init()
{
	TCCR0=0x00;
 530:	13 be       	out	0x33, r1	; 51
	TCNT0=0x64;        //10mS
 532:	84 e6       	ldi	r24, 0x64	; 100
 534:	82 bf       	out	0x32, r24	; 50
	TCCR0=(1<<CS02|1<<CS00);	//1024预分频
 536:	85 e0       	ldi	r24, 0x05	; 5
 538:	83 bf       	out	0x33, r24	; 51
	TIMSK|=1<<TOIE0;	
 53a:	89 b7       	in	r24, 0x39	; 57
 53c:	81 60       	ori	r24, 0x01	; 1
 53e:	89 bf       	out	0x39, r24	; 57
}

void Timer1_init()
{
	TCCR1B=0x00;//停止定时器
 540:	1e bc       	out	0x2e, r1	; 46
	TCNT1H=0xF1;
 542:	81 ef       	ldi	r24, 0xF1	; 241
 544:	8d bd       	out	0x2d, r24	; 45
	TCNT1L=0x5B;//初始值
 546:	8b e5       	ldi	r24, 0x5B	; 91
 548:	8c bd       	out	0x2c, r24	; 44
	TCCR1A=0x00;
 54a:	1f bc       	out	0x2f, r1	; 47
	//TCCR1B=(1<<CS11|1<<CS10);//启动定时器
	TIMSK|=1<<TOIE1;
 54c:	89 b7       	in	r24, 0x39	; 57
 54e:	84 60       	ori	r24, 0x04	; 4
 550:	89 bf       	out	0x39, r24	; 57
	}
	
	Timer0_init();
    Timer1_init();
	
}
 552:	08 95       	ret

00000554 <main>:

int main()
{
	cli();
 554:	f8 94       	cli
	avr_init();
 556:	9e df       	rcall	.-196    	; 0x494 <avr_init>
	sei();
 558:	78 94       	sei
			case 0x8B:   //连续微调+
				TuneFlag=3;
				Pflag=0;
				break;
			case 0x87:  //连续微调-
				TuneFlag=4;
 55a:	74 e0       	ldi	r23, 0x04	; 4
				break;
			case 0x8D:
				
				break;
			case 0x8B:   //连续微调+
				TuneFlag=3;
 55c:	63 e0       	ldi	r22, 0x03	; 3
			case 0x4E:   //正转
				Direction=0;     //旋转方向,0为顺时针,1为逆时针
				SlowSpeed=0;  //速度标志,为1时慢速
				Pflag=0;      		//限位标志,为1时限位开关作用
				TuneFlag=0;    //微调标志,0为正常运转,1为位置微调
				StepperStart();
 55e:	95 e0       	ldi	r25, 0x05	; 5
				TuneFlag=1;
				Pflag=0;
				StepperStart();
				break;
			case 0x47:  //微调-
				Direction=1;
 560:	21 e0       	ldi	r18, 0x01	; 1
				SlowSpeed=1;
 562:	41 e0       	ldi	r20, 0x01	; 1
 564:	50 e0       	ldi	r21, 0x00	; 0
				TuneFlag=2;
 566:	32 e0       	ldi	r19, 0x02	; 2
	cli();
	avr_init();
	sei();
	while(1)
	{
		switch(keycode)
 568:	80 91 74 00 	lds	r24, 0x0074
 56c:	8d 34       	cpi	r24, 0x4D	; 77
 56e:	81 f0       	breq	.+32     	; 0x590 <main+0x3c>
 570:	8e 34       	cpi	r24, 0x4E	; 78
 572:	28 f4       	brcc	.+10     	; 0x57e <main+0x2a>
 574:	87 34       	cpi	r24, 0x47	; 71
 576:	01 f1       	breq	.+64     	; 0x5b8 <main+0x64>
 578:	8b 34       	cpi	r24, 0x4B	; 75
 57a:	b1 f7       	brne	.-20     	; 0x568 <main+0x14>
 57c:	14 c0       	rjmp	.+40     	; 0x5a6 <main+0x52>
 57e:	87 38       	cpi	r24, 0x87	; 135
 580:	71 f1       	breq	.+92     	; 0x5de <main+0x8a>
 582:	8b 38       	cpi	r24, 0x8B	; 139
 584:	49 f1       	breq	.+82     	; 0x5d8 <main+0x84>
 586:	8e 34       	cpi	r24, 0x4E	; 78
 588:	79 f7       	brne	.-34     	; 0x568 <main+0x14>
		{
			case 0x4E:   //正转
				Direction=0;     //旋转方向,0为顺时针,1为逆时针
 58a:	10 92 6a 00 	sts	0x006A, r1
 58e:	02 c0       	rjmp	.+4      	; 0x594 <main+0x40>
				Pflag=0;      		//限位标志,为1时限位开关作用
				TuneFlag=0;    //微调标志,0为正常运转,1为位置微调
				StepperStart();
				break;
			case 0x4D:   //反转
				Direction=1;
 590:	20 93 6a 00 	sts	0x006A, r18
				SlowSpeed=0;
 594:	10 92 6f 00 	sts	0x006F, r1
 598:	10 92 6e 00 	sts	0x006E, r1
				Pflag=0;
 59c:	10 92 6c 00 	sts	0x006C, r1
				TuneFlag=0;
 5a0:	10 92 6d 00 	sts	0x006D, r1
 5a4:	13 c0       	rjmp	.+38     	; 0x5cc <main+0x78>
				StepperStart();
				break;
			case 0x4B:   //微调+
				Direction=0;
 5a6:	10 92 6a 00 	sts	0x006A, r1
				SlowSpeed=1;
 5aa:	50 93 6f 00 	sts	0x006F, r21
 5ae:	40 93 6e 00 	sts	0x006E, r20
				TuneFlag=1;
 5b2:	20 93 6d 00 	sts	0x006D, r18
 5b6:	08 c0       	rjmp	.+16     	; 0x5c8 <main+0x74>
				Pflag=0;
				StepperStart();
				break;
			case 0x47:  //微调-
				Direction=1;
 5b8:	20 93 6a 00 	sts	0x006A, r18
				SlowSpeed=1;
 5bc:	50 93 6f 00 	sts	0x006F, r21
 5c0:	40 93 6e 00 	sts	0x006E, r20
				TuneFlag=2;
 5c4:	30 93 6d 00 	sts	0x006D, r19
				Pflag=0;
 5c8:	10 92 6c 00 	sts	0x006C, r1
				StepperStart();
 5cc:	93 9a       	sbi	0x12, 3	; 18
 5ce:	9e bd       	out	0x2e, r25	; 46
 5d0:	89 b7       	in	r24, 0x39	; 57
 5d2:	84 60       	ori	r24, 0x04	; 4
 5d4:	89 bf       	out	0x39, r24	; 57
 5d6:	c8 cf       	rjmp	.-112    	; 0x568 <main+0x14>
				break;
			case 0x8D:
				
				break;
			case 0x8B:   //连续微调+
				TuneFlag=3;
 5d8:	60 93 6d 00 	sts	0x006D, r22
 5dc:	02 c0       	rjmp	.+4      	; 0x5e2 <main+0x8e>
				Pflag=0;
				break;
			case 0x87:  //连续微调-
				TuneFlag=4;
 5de:	70 93 6d 00 	sts	0x006D, r23
				Pflag=0;
 5e2:	10 92 6c 00 	sts	0x006C, r1
 5e6:	c0 cf       	rjmp	.-128    	; 0x568 <main+0x14>

000005e8 <__eerd_word>:
 5e8:	df 92       	push	r13
 5ea:	ef 92       	push	r14
 5ec:	ff 92       	push	r15
 5ee:	0f 93       	push	r16
 5f0:	1f 93       	push	r17
 5f2:	7b 01       	movw	r14, r22
 5f4:	8c 01       	movw	r16, r24
 5f6:	fb 01       	movw	r30, r22
 5f8:	09 95       	icall
 5fa:	d8 2e       	mov	r13, r24
 5fc:	c8 01       	movw	r24, r16
 5fe:	01 96       	adiw	r24, 0x01	; 1
 600:	f7 01       	movw	r30, r14
 602:	09 95       	icall
 604:	98 2f       	mov	r25, r24
 606:	8d 2d       	mov	r24, r13
 608:	1f 91       	pop	r17
 60a:	0f 91       	pop	r16
 60c:	ff 90       	pop	r15
 60e:	ef 90       	pop	r14
 610:	df 90       	pop	r13
 612:	08 95       	ret

00000614 <__eewr_word>:
 614:	df 92       	push	r13
 616:	ef 92       	push	r14
 618:	ff 92       	push	r15
 61a:	0f 93       	push	r16
 61c:	1f 93       	push	r17
 61e:	d7 2e       	mov	r13, r23
 620:	7a 01       	movw	r14, r20
 622:	8c 01       	movw	r16, r24
 624:	fa 01       	movw	r30, r20
 626:	09 95       	icall
 628:	6d 2d       	mov	r22, r13
 62a:	c8 01       	movw	r24, r16
 62c:	01 96       	adiw	r24, 0x01	; 1
 62e:	f7 01       	movw	r30, r14
 630:	09 95       	icall
 632:	1f 91       	pop	r17
 634:	0f 91       	pop	r16
 636:	ff 90       	pop	r15
 638:	ef 90       	pop	r14
 63a:	df 90       	pop	r13
 63c:	08 95       	ret

0000063e <__udivmodqi4>:
 63e:	99 1b       	sub	r25, r25
 640:	79 e0       	ldi	r23, 0x09	; 9
 642:	04 c0       	rjmp	.+8      	; 0x64c <__udivmodqi4_ep>

00000644 <__udivmodqi4_loop>:
 644:	99 1f       	adc	r25, r25
 646:	96 17       	cp	r25, r22
 648:	08 f0       	brcs	.+2      	; 0x64c <__udivmodqi4_ep>
 64a:	96 1b       	sub	r25, r22

0000064c <__udivmodqi4_ep>:
 64c:	88 1f       	adc	r24, r24
 64e:	7a 95       	dec	r23
 650:	c9 f7       	brne	.-14     	; 0x644 <__udivmodqi4_loop>
 652:	80 95       	com	r24
 654:	08 95       	ret

00000656 <_exit>:
 656:	f8 94       	cli

00000658 <__stop_program>:
 658:	ff cf       	rjmp	.-2      	; 0x658 <__stop_program>

⌨️ 快捷键说明

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