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

📄 steper.lss

📁 步近电机控制代码
💻 LSS
📖 第 1 页 / 共 3 页
字号:
 236:	a8 f0       	brcs	.+42     	; 0x262 <__vector_9+0x7a>
		{
			keytimes=101;
 238:	85 e6       	ldi	r24, 0x65	; 101
 23a:	80 93 76 00 	sts	0x0076, r24
			keycode=(LongPush|CurKey);
 23e:	80 91 75 00 	lds	r24, 0x0075
 242:	80 68       	ori	r24, 0x80	; 128
 244:	80 93 74 00 	sts	0x0074, r24
 248:	0c c0       	rjmp	.+24     	; 0x262 <__vector_9+0x7a>
		}
	}
	else if(CurKey!=LastKey)
 24a:	90 91 75 00 	lds	r25, 0x0075
 24e:	80 91 60 00 	lds	r24, 0x0060
 252:	98 17       	cp	r25, r24
 254:	21 f0       	breq	.+8      	; 0x25e <__vector_9+0x76>
	{
		LastKey=CurKey;
 256:	80 91 75 00 	lds	r24, 0x0075
 25a:	80 93 60 00 	sts	0x0060, r24
		keytimes=0x00;
	}
	else //无键按下或已释放
	{
		keytimes=0x00;
 25e:	10 92 76 00 	sts	0x0076, r1
	}

}
 262:	9f 91       	pop	r25
 264:	8f 91       	pop	r24
 266:	7f 91       	pop	r23
 268:	6f 91       	pop	r22
 26a:	0f 90       	pop	r0
 26c:	0f be       	out	0x3f, r0	; 63
 26e:	0f 90       	pop	r0
 270:	1f 90       	pop	r1
 272:	18 95       	reti

00000274 <Timer0_init>:

void Timer0_init()
{
	TCCR0=0x00;
 274:	13 be       	out	0x33, r1	; 51
	TCNT0=0x64;        //10mS
 276:	84 e6       	ldi	r24, 0x64	; 100
 278:	82 bf       	out	0x32, r24	; 50
	TCCR0=(1<<CS02|1<<CS00);	//1024预分频
 27a:	85 e0       	ldi	r24, 0x05	; 5
 27c:	83 bf       	out	0x33, r24	; 51
	TIMSK|=1<<TOIE0;	
 27e:	89 b7       	in	r24, 0x39	; 57
 280:	81 60       	ori	r24, 0x01	; 1
 282:	89 bf       	out	0x39, r24	; 57
}
 284:	08 95       	ret

00000286 <Timer1_init>:

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

0000029a <__vector_8>:

#define StepperStop()  { TCCR1B=0x00;  PORTD&=~(1<<PD3); PORTC&=~(1<<PC2|1<<PC3); }//Disable driver
#define StepperStart() { PORTD|=(1<<PD3); TCCR1B=(1<<CS02|1<<CS00); TIMSK|=1<<TOIE1;}//Enable driver
	
ISR(SIG_OVERFLOW1)
{
 29a:	1f 92       	push	r1
 29c:	0f 92       	push	r0
 29e:	0f b6       	in	r0, 0x3f	; 63
 2a0:	0f 92       	push	r0
 2a2:	11 24       	eor	r1, r1
 2a4:	2f 93       	push	r18
 2a6:	3f 93       	push	r19
 2a8:	4f 93       	push	r20
 2aa:	5f 93       	push	r21
 2ac:	6f 93       	push	r22
 2ae:	7f 93       	push	r23
 2b0:	8f 93       	push	r24
 2b2:	9f 93       	push	r25
 2b4:	af 93       	push	r26
 2b6:	bf 93       	push	r27
 2b8:	ef 93       	push	r30
 2ba:	ff 93       	push	r31
	TCCR1B=0x00;//停止定时器
 2bc:	1e bc       	out	0x2e, r1	; 46
	if(SlowSpeed==1) //60ms
 2be:	80 91 6e 00 	lds	r24, 0x006E
 2c2:	90 91 6f 00 	lds	r25, 0x006F
 2c6:	01 97       	sbiw	r24, 0x01	; 1
 2c8:	21 f4       	brne	.+8      	; 0x2d2 <__vector_8+0x38>
	{
		TCNT1H=0xC5;
 2ca:	85 ec       	ldi	r24, 0xC5	; 197
 2cc:	8d bd       	out	0x2d, r24	; 45
		TCNT1L=0x69;
 2ce:	89 e6       	ldi	r24, 0x69	; 105
 2d0:	09 c0       	rjmp	.+18     	; 0x2e4 <__vector_8+0x4a>
	}
	else if(SlowSpeed==0)  //15ms
 2d2:	80 91 6e 00 	lds	r24, 0x006E
 2d6:	90 91 6f 00 	lds	r25, 0x006F
 2da:	89 2b       	or	r24, r25
 2dc:	21 f4       	brne	.+8      	; 0x2e6 <__vector_8+0x4c>
	{
		TCNT1H=0xF1;
 2de:	81 ef       	ldi	r24, 0xF1	; 241
 2e0:	8d bd       	out	0x2d, r24	; 45
		TCNT1L=0x5B;
 2e2:	8b e5       	ldi	r24, 0x5B	; 91
 2e4:	8c bd       	out	0x2c, r24	; 44
	}
	
	if(Direction==0)
 2e6:	80 91 6a 00 	lds	r24, 0x006A
 2ea:	88 23       	and	r24, r24
 2ec:	c1 f4       	brne	.+48     	; 0x31e <__vector_8+0x84>
	{
		PORTC&=~(1<<PC2|1<<PC3);
 2ee:	85 b3       	in	r24, 0x15	; 21
 2f0:	83 7f       	andi	r24, 0xF3	; 243
 2f2:	85 bb       	out	0x15, r24	; 21
		PORTD=((1<<PD3)|stepper[stepcnt]);
 2f4:	e0 91 78 00 	lds	r30, 0x0078
 2f8:	f0 e0       	ldi	r31, 0x00	; 0
 2fa:	ef 59       	subi	r30, 0x9F	; 159
 2fc:	ff 4f       	sbci	r31, 0xFF	; 255
 2fe:	80 81       	ld	r24, Z
 300:	88 60       	ori	r24, 0x08	; 8
 302:	82 bb       	out	0x12, r24	; 18
		stepcnt++;
 304:	80 91 78 00 	lds	r24, 0x0078
 308:	8f 5f       	subi	r24, 0xFF	; 255
 30a:	80 93 78 00 	sts	0x0078, r24
		if(stepcnt>7)		stepcnt=0;
 30e:	80 91 78 00 	lds	r24, 0x0078
 312:	88 30       	cpi	r24, 0x08	; 8
 314:	10 f0       	brcs	.+4      	; 0x31a <__vector_8+0x80>
 316:	10 92 78 00 	sts	0x0078, r1
		PORTC|=1<<PC2;
 31a:	aa 9a       	sbi	0x15, 2	; 21
 31c:	1c c0       	rjmp	.+56     	; 0x356 <__vector_8+0xbc>
	}
	else if(Direction==1)
 31e:	80 91 6a 00 	lds	r24, 0x006A
 322:	81 30       	cpi	r24, 0x01	; 1
 324:	c1 f4       	brne	.+48     	; 0x356 <__vector_8+0xbc>
	{
		PORTC&=~(1<<PC3|1<<PC2);
 326:	85 b3       	in	r24, 0x15	; 21
 328:	83 7f       	andi	r24, 0xF3	; 243
 32a:	85 bb       	out	0x15, r24	; 21
		PORTD=((1<<PD3)|stepper[stepcnt]);
 32c:	e0 91 78 00 	lds	r30, 0x0078
 330:	f0 e0       	ldi	r31, 0x00	; 0
 332:	ef 59       	subi	r30, 0x9F	; 159
 334:	ff 4f       	sbci	r31, 0xFF	; 255
 336:	80 81       	ld	r24, Z
 338:	88 60       	ori	r24, 0x08	; 8
 33a:	82 bb       	out	0x12, r24	; 18
		stepcnt--;
 33c:	80 91 78 00 	lds	r24, 0x0078
 340:	81 50       	subi	r24, 0x01	; 1
 342:	80 93 78 00 	sts	0x0078, r24
		if(stepcnt==0xFF)	stepcnt=7;
 346:	80 91 78 00 	lds	r24, 0x0078
 34a:	8f 3f       	cpi	r24, 0xFF	; 255
 34c:	19 f4       	brne	.+6      	; 0x354 <__vector_8+0xba>
 34e:	87 e0       	ldi	r24, 0x07	; 7
 350:	80 93 78 00 	sts	0x0078, r24
		PORTC|=1<<PC3;
 354:	ab 9a       	sbi	0x15, 3	; 21
	}
	
	if(TuneFlag!=0)
 356:	80 91 6d 00 	lds	r24, 0x006D
 35a:	88 23       	and	r24, r24
 35c:	09 f4       	brne	.+2      	; 0x360 <__vector_8+0xc6>
 35e:	64 c0       	rjmp	.+200    	; 0x428 <__vector_8+0x18e>
	{
		switch(TuneFlag)
 360:	80 91 6d 00 	lds	r24, 0x006D
 364:	82 30       	cpi	r24, 0x02	; 2
 366:	a9 f0       	breq	.+42     	; 0x392 <__vector_8+0xf8>
 368:	83 30       	cpi	r24, 0x03	; 3
 36a:	18 f4       	brcc	.+6      	; 0x372 <__vector_8+0xd8>
 36c:	81 30       	cpi	r24, 0x01	; 1
 36e:	51 f5       	brne	.+84     	; 0x3c4 <__vector_8+0x12a>
 370:	05 c0       	rjmp	.+10     	; 0x37c <__vector_8+0xe2>
 372:	83 30       	cpi	r24, 0x03	; 3
 374:	19 f0       	breq	.+6      	; 0x37c <__vector_8+0xe2>
 376:	84 30       	cpi	r24, 0x04	; 4
 378:	29 f5       	brne	.+74     	; 0x3c4 <__vector_8+0x12a>
 37a:	0b c0       	rjmp	.+22     	; 0x392 <__vector_8+0xf8>
		{
			case 0x01:
			case 0x03:
				if(Limit==0x00)
 37c:	80 91 6b 00 	lds	r24, 0x006B
 380:	88 23       	and	r24, r24
 382:	01 f5       	brne	.+64     	; 0x3c4 <__vector_8+0x12a>
					if(Pcnt>0) Pcnt--;
 384:	80 91 79 00 	lds	r24, 0x0079
 388:	90 91 7a 00 	lds	r25, 0x007A
 38c:	89 2b       	or	r24, r25
 38e:	29 f0       	breq	.+10     	; 0x39a <__vector_8+0x100>
 390:	10 c0       	rjmp	.+32     	; 0x3b2 <__vector_8+0x118>
				else
					Pcnt++;
				break;
			case 0x02:
			case 0x04:
				if(Limit==0x00)
 392:	80 91 6b 00 	lds	r24, 0x006B
 396:	88 23       	and	r24, r24
 398:	31 f4       	brne	.+12     	; 0x3a6 <__vector_8+0x10c>
					Pcnt++;
 39a:	80 91 79 00 	lds	r24, 0x0079
 39e:	90 91 7a 00 	lds	r25, 0x007A
 3a2:	01 96       	adiw	r24, 0x01	; 1
 3a4:	0b c0       	rjmp	.+22     	; 0x3bc <__vector_8+0x122>
				else
				{
					if(Pcnt>0) Pcnt--;
 3a6:	80 91 79 00 	lds	r24, 0x0079
 3aa:	90 91 7a 00 	lds	r25, 0x007A
 3ae:	89 2b       	or	r24, r25
 3b0:	49 f0       	breq	.+18     	; 0x3c4 <__vector_8+0x12a>
 3b2:	80 91 79 00 	lds	r24, 0x0079
 3b6:	90 91 7a 00 	lds	r25, 0x007A
 3ba:	01 97       	sbiw	r24, 0x01	; 1
 3bc:	90 93 7a 00 	sts	0x007A, r25
 3c0:	80 93 79 00 	sts	0x0079, r24
				}
				break;
			default:
				break;
		}
		Position[Limit]=Pcnt;
 3c4:	e0 91 6b 00 	lds	r30, 0x006B
 3c8:	f0 e0       	ldi	r31, 0x00	; 0
 3ca:	80 91 79 00 	lds	r24, 0x0079
 3ce:	90 91 7a 00 	lds	r25, 0x007A
 3d2:	ee 0f       	add	r30, r30
 3d4:	ff 1f       	adc	r31, r31
 3d6:	e0 59       	subi	r30, 0x90	; 144
 3d8:	ff 4f       	sbci	r31, 0xFF	; 255
 3da:	91 83       	std	Z+1, r25	; 0x01
 3dc:	80 83       	st	Z, r24
		eeprom_is_ready();
 3de:	8c b3       	in	r24, 0x1c	; 28
		eeprom_write_word((Limit==0x00 ? 0x01 : 0x03),Position[Limit]);
 3e0:	e0 91 6b 00 	lds	r30, 0x006B
 3e4:	f0 e0       	ldi	r31, 0x00	; 0
 3e6:	ee 0f       	add	r30, r30
 3e8:	ff 1f       	adc	r31, r31
 3ea:	e0 59       	subi	r30, 0x90	; 144
 3ec:	ff 4f       	sbci	r31, 0xFF	; 255
 3ee:	60 81       	ld	r22, Z
 3f0:	71 81       	ldd	r23, Z+1	; 0x01
 3f2:	80 91 6b 00 	lds	r24, 0x006B
 3f6:	88 23       	and	r24, r24
 3f8:	19 f0       	breq	.+6      	; 0x400 <__vector_8+0x166>
 3fa:	83 e0       	ldi	r24, 0x03	; 3
 3fc:	90 e0       	ldi	r25, 0x00	; 0
 3fe:	02 c0       	rjmp	.+4      	; 0x404 <__vector_8+0x16a>
 400:	81 e0       	ldi	r24, 0x01	; 1
 402:	90 e0       	ldi	r25, 0x00	; 0
/** \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);
 404:	41 eb       	ldi	r20, 0xB1	; 177
 406:	50 e0       	ldi	r21, 0x00	; 0
 408:	05 d1       	rcall	.+522    	; 0x614 <__eewr_word>
		
		if(TuneFlag==1 || TuneFlag==2)
 40a:	80 91 6d 00 	lds	r24, 0x006D
 40e:	81 30       	cpi	r24, 0x01	; 1
 410:	41 f1       	breq	.+80     	; 0x462 <__stack+0x3>
 412:	80 91 6d 00 	lds	r24, 0x006D
 416:	82 30       	cpi	r24, 0x02	; 2
 418:	21 f1       	breq	.+72     	; 0x462 <__stack+0x3>
		{
			StepperStop();
			goto T0End;
		}
		else
			StepperStart();
 41a:	93 9a       	sbi	0x12, 3	; 18
 41c:	85 e0       	ldi	r24, 0x05	; 5
 41e:	8e bd       	out	0x2e, r24	; 46
 420:	89 b7       	in	r24, 0x39	; 57
 422:	84 60       	ori	r24, 0x04	; 4
 424:	89 bf       	out	0x39, r24	; 57
 426:	25 c0       	rjmp	.+74     	; 0x472 <__stack+0x13>
			goto T0End;
	}
	
	if(Pflag==1)
 428:	80 91 6c 00 	lds	r24, 0x006C
 42c:	81 30       	cpi	r24, 0x01	; 1
 42e:	f9 f4       	brne	.+62     	; 0x46e <__stack+0xf>
	{
		Pcnt++;
 430:	80 91 79 00 	lds	r24, 0x0079
 434:	90 91 7a 00 	lds	r25, 0x007A
 438:	01 96       	adiw	r24, 0x01	; 1
 43a:	90 93 7a 00 	sts	0x007A, r25
 43e:	80 93 79 00 	sts	0x0079, r24
		if(Pcnt>=Position[Limit])
 442:	20 91 79 00 	lds	r18, 0x0079
 446:	30 91 7a 00 	lds	r19, 0x007A
 44a:	e0 91 6b 00 	lds	r30, 0x006B
 44e:	f0 e0       	ldi	r31, 0x00	; 0
 450:	ee 0f       	add	r30, r30
 452:	ff 1f       	adc	r31, r31
 454:	e0 59       	subi	r30, 0x90	; 144
 456:	ff 4f       	sbci	r31, 0xFF	; 255
 458:	80 81       	ld	r24, Z
 45a:	91 81       	ldd	r25, Z+1	; 0x01
 45c:	28 17       	cp	r18, r24
 45e:	39 07       	cpc	r19, r25
 460:	30 f0       	brcs	.+12     	; 0x46e <__stack+0xf>
		{
			StepperStop();
 462:	1e bc       	out	0x2e, r1	; 46
 464:	93 98       	cbi	0x12, 3	; 18
 466:	85 b3       	in	r24, 0x15	; 21
 468:	83 7f       	andi	r24, 0xF3	; 243
 46a:	85 bb       	out	0x15, r24	; 21
 46c:	02 c0       	rjmp	.+4      	; 0x472 <__stack+0x13>
		}	
		else
			TCCR1B=(1<<CS11|1<<CS10);//启动定时器
	}
	else
		TCCR1B=(1<<CS11|1<<CS10);//启动定时器
 46e:	83 e0       	ldi	r24, 0x03	; 3
 470:	8e bd       	out	0x2e, r24	; 46
	T0End:
		;
}
 472:	ff 91       	pop	r31
 474:	ef 91       	pop	r30
 476:	bf 91       	pop	r27
 478:	af 91       	pop	r26
 47a:	9f 91       	pop	r25
 47c:	8f 91       	pop	r24
 47e:	7f 91       	pop	r23
 480:	6f 91       	pop	r22
 482:	5f 91       	pop	r21
 484:	4f 91       	pop	r20
 486:	3f 91       	pop	r19
 488:	2f 91       	pop	r18
 48a:	0f 90       	pop	r0
 48c:	0f be       	out	0x3f, r0	; 63
 48e:	0f 90       	pop	r0
 490:	1f 90       	pop	r1
 492:	18 95       	reti

00000494 <avr_init>:
	TIMSK|=1<<TOIE1;
}
void avr_init()
{
//初始化端口

⌨️ 快捷键说明

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