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

📄 camel.lss

📁 一个出口非洲的骑骆驼机器人的控制程序。采用工业手机模块作为通讯模块;AVR单片机作为控制中心;工业用马达作为骆驼机器人驱动动力。通过控制中心通过AT指令集连接通讯模块
💻 LSS
📖 第 1 页 / 共 3 页
字号:
 248:	ef 93       	push	r30
 24a:	ff 93       	push	r31
		receiveBuffer[receiveBufferCounter++]=UDR;
 24c:	80 91 90 00 	lds	r24, 0x0090
 250:	e8 2f       	mov	r30, r24
 252:	ff 27       	eor	r31, r31
 254:	9c b1       	in	r25, 0x0c	; 12
 256:	e6 5a       	subi	r30, 0xA6	; 166
 258:	fe 4f       	sbci	r31, 0xFE	; 254
 25a:	90 83       	st	Z, r25
 25c:	8f 5f       	subi	r24, 0xFF	; 255
 25e:	80 93 90 00 	sts	0x0090, r24
   	if (receiveBufferCounter >= receiveBufferSize) receiveBufferCounter=0;
 262:	80 91 90 00 	lds	r24, 0x0090
 266:	84 36       	cpi	r24, 0x64	; 100
 268:	10 f0       	brcs	.+4      	; 0x26e <__vector_11+0x34>
 26a:	10 92 90 00 	sts	0x0090, r1
 26e:	ff 91       	pop	r31
 270:	ef 91       	pop	r30
 272:	9f 91       	pop	r25
 274:	8f 91       	pop	r24
 276:	0f 90       	pop	r0
 278:	0f be       	out	0x3f, r0	; 63
 27a:	0f 90       	pop	r0
 27c:	1f 90       	pop	r1
 27e:	18 95       	reti

00000280 <receiveData>:
}


//接收程序,参数为要放置数据的地址,最大的接收量
void receiveData(uchar *receivePtr,uchar receiveCounter)
{
 280:	dc 01       	movw	r26, r24
 282:	40 e0       	ldi	r20, 0x00	; 0
 284:	50 e0       	ldi	r21, 0x00	; 0
 286:	1a c0       	rjmp	.+52     	; 0x2bc <receiveData+0x3c>
	uchar receiveTemp=0;
	while(receiveBufferWriter!=receiveBufferCounter)
	{
		*(receivePtr+receiveTemp)=receiveBuffer[receiveBufferWriter];
 288:	e0 91 8f 00 	lds	r30, 0x008F
 28c:	ff 27       	eor	r31, r31
 28e:	e6 5a       	subi	r30, 0xA6	; 166
 290:	fe 4f       	sbci	r31, 0xFE	; 254
 292:	80 81       	ld	r24, Z
 294:	fd 01       	movw	r30, r26
 296:	e2 0f       	add	r30, r18
 298:	f1 1d       	adc	r31, r1
 29a:	80 83       	st	Z, r24
		receiveTemp++;
		if(receiveTemp>=receiveCounter)
 29c:	2f 5f       	subi	r18, 0xFF	; 255
 29e:	26 17       	cp	r18, r22
 2a0:	a0 f4       	brcc	.+40     	; 0x2ca <receiveData+0x4a>
			{break;}
		receiveBufferWriter++;
 2a2:	80 91 8f 00 	lds	r24, 0x008F
 2a6:	8f 5f       	subi	r24, 0xFF	; 255
 2a8:	80 93 8f 00 	sts	0x008F, r24
		if (receiveBufferWriter >= receiveBufferSize) 
 2ac:	80 91 8f 00 	lds	r24, 0x008F
 2b0:	84 36       	cpi	r24, 0x64	; 100
 2b2:	10 f0       	brcs	.+4      	; 0x2b8 <receiveData+0x38>
			{receiveBufferWriter=0;}
 2b4:	10 92 8f 00 	sts	0x008F, r1
 2b8:	4f 5f       	subi	r20, 0xFF	; 255
 2ba:	5f 4f       	sbci	r21, 0xFF	; 255
 2bc:	24 2f       	mov	r18, r20
 2be:	90 91 8f 00 	lds	r25, 0x008F
 2c2:	80 91 90 00 	lds	r24, 0x0090
 2c6:	98 17       	cp	r25, r24
 2c8:	f9 f6       	brne	.-66     	; 0x288 <receiveData+0x8>
 2ca:	08 95       	ret

000002cc <__vector_8>:
	}
}


SIGNAL(SIG_OVERFLOW1)
{
 2cc:	1f 92       	push	r1
 2ce:	0f 92       	push	r0
 2d0:	0f b6       	in	r0, 0x3f	; 63
 2d2:	0f 92       	push	r0
 2d4:	11 24       	eor	r1, r1
 2d6:	8f 93       	push	r24
 2d8:	9f 93       	push	r25
	 //TIMER1 has overflowed
	TCNT1H = 0xCF;
 2da:	8f ec       	ldi	r24, 0xCF	; 207
 2dc:	8d bd       	out	0x2d, r24	; 45
	TCNT1L = 0x2C;//初始值
 2de:	8c e2       	ldi	r24, 0x2C	; 44
 2e0:	8c bd       	out	0x2c, r24	; 44


	//手机时钟计数器	
	 GSMTimerCounter++;
 2e2:	80 91 89 00 	lds	r24, 0x0089
 2e6:	8f 5f       	subi	r24, 0xFF	; 255
 2e8:	80 93 89 00 	sts	0x0089, r24
	//通话检测定时器
	GSMTalkingCounter++;
 2ec:	80 91 8c 00 	lds	r24, 0x008C
 2f0:	8f 5f       	subi	r24, 0xFF	; 255
 2f2:	80 93 8c 00 	sts	0x008C, r24

	/*
	//声音控制程序
	if(VoiceCounter>0)
    { 
	  VoiceTime++;
	  if(VoiceTime<VoiceTime1)                //VoiceTime1是脉冲从高电平到低电平的转折点
		{
		   SpeakerSignalUp();
		}
	   else if(VoiceTime<VoiceTime2)          // VoiceTime2是脉冲周期
		{
			SpeakerSignalDown();
		}
		else 
		{
			VoiceTime=0;
			VoiceCounter--;
		}
	}
	*/
	
	//马达控制程序
	if(MotorCounter>0)
 2f6:	90 91 7d 00 	lds	r25, 0x007D
 2fa:	99 23       	and	r25, r25
 2fc:	91 f0       	breq	.+36     	; 0x322 <__vector_8+0x56>
	{ 
		motortime++;
 2fe:	80 91 7e 00 	lds	r24, 0x007E
 302:	8f 5f       	subi	r24, 0xFF	; 255
 304:	80 93 7e 00 	sts	0x007E, r24
		if(motortime<motortime1)                 //motortime1是电机开启到关闭的时间点
 308:	82 30       	cpi	r24, 0x02	; 2
 30a:	10 f4       	brcc	.+4      	; 0x310 <__vector_8+0x44>
		{
			MotorStart();
 30c:	95 9a       	sbi	0x12, 5	; 18
 30e:	09 c0       	rjmp	.+18     	; 0x322 <__vector_8+0x56>
		}
		 else if(motortime<motortime2)           // motortime2是时间周期
 310:	84 30       	cpi	r24, 0x04	; 4
 312:	10 f4       	brcc	.+4      	; 0x318 <__vector_8+0x4c>
		{
			MotorStop();
 314:	95 98       	cbi	0x12, 5	; 18
 316:	05 c0       	rjmp	.+10     	; 0x322 <__vector_8+0x56>
		}
		else 
		{
			motortime=0;
 318:	10 92 7e 00 	sts	0x007E, r1
			MotorCounter--;
 31c:	91 50       	subi	r25, 0x01	; 1
 31e:	90 93 7d 00 	sts	0x007D, r25
 322:	9f 91       	pop	r25
 324:	8f 91       	pop	r24
 326:	0f 90       	pop	r0
 328:	0f be       	out	0x3f, r0	; 63
 32a:	0f 90       	pop	r0
 32c:	1f 90       	pop	r1
 32e:	18 95       	reti

00000330 <hit1>:
		}
	}
	
}


//按键按一下机器人甩一甩鞭子
void hit1(void)
{  
 330:	85 e0       	ldi	r24, 0x05	; 5
 332:	80 93 7d 00 	sts	0x007D, r24
 336:	08 95       	ret

00000338 <hit2>:
    MotorCounter=5;                // 计数值确定甩鞭子的时间长短
} 


//按键按一下机器人甩几下鞭子
void hit2(void)
{  
 338:	84 e1       	ldi	r24, 0x14	; 20
 33a:	80 93 7d 00 	sts	0x007D, r24
 33e:	08 95       	ret

00000340 <voice1>:
    MotorCounter=20;               // 计数值确定甩鞭子的时间长短
}

//放出录音芯片内声音,按一下键放一次声
void voice1(void)
{  
 340:	88 b3       	in	r24, 0x18	; 24
 342:	87 7c       	andi	r24, 0xC7	; 199
 344:	88 bb       	out	0x18, r24	; 24
 346:	08 95       	ret

00000348 <voice3>:
    //VoiceCounter=1;
    speak_Sound1();
}

//放出远程控制人员的语音信号
void voice3(void)
{    
 348:	08 95       	ret

0000034a <voiceRecord>:
  	//SpeakerToMan();       //切换到人机直接扬声模式	
}

void voiceRecord(void)
{    
 34a:	10 92 80 00 	sts	0x0080, r1
 34e:	08 95       	ret

00000350 <stopAll>:
  	//SpeakerToMan();       //切换到人机直接扬声模式
  	speakerRecInitSet=0;
  	
}

//关闭声音,电机,但是机器人还是属于受控状态
void stopAll(void)
{  
 350:	95 98       	cbi	0x12, 5	; 18
 352:	08 95       	ret

00000354 <GSMConnect>:
    MotorStop();
	//SpeakerSignalDown();
}


//测试手机状态,保证系统能够进入
void GSMConnect(void)
{
 354:	1f 93       	push	r17
	uchar connectCounter;
	//上电后软件开机
	GSMPressOn();
 356:	ad 9a       	sbi	0x15, 5	; 21
	//延时一段时间
	GSMTimerCounter=0;
 358:	10 92 89 00 	sts	0x0089, r1
 35c:	05 c0       	rjmp	.+10     	; 0x368 <GSMConnect+0x14>
	while(GSMTimerCounter<10)
	{
		GSMtemp++;
 35e:	80 91 8a 00 	lds	r24, 0x008A
 362:	8f 5f       	subi	r24, 0xFF	; 255
 364:	80 93 8a 00 	sts	0x008A, r24
 368:	80 91 89 00 	lds	r24, 0x0089
 36c:	8a 30       	cpi	r24, 0x0A	; 10
 36e:	b8 f3       	brcs	.-18     	; 0x35e <GSMConnect+0xa>
	}
	GSMPressOff();
 370:	ad 98       	cbi	0x15, 5	; 21

	//statusLedOn();
	//延时一段时间,等待系统稳定
	GSMTimerCounter=0;
 372:	10 92 89 00 	sts	0x0089, r1
 376:	05 c0       	rjmp	.+10     	; 0x382 <GSMConnect+0x2e>
	while(GSMTimerCounter<100)
	{
		GSMtemp++;
 378:	80 91 8a 00 	lds	r24, 0x008A
 37c:	8f 5f       	subi	r24, 0xFF	; 255
 37e:	80 93 8a 00 	sts	0x008A, r24
 382:	80 91 89 00 	lds	r24, 0x0089
 386:	84 36       	cpi	r24, 0x64	; 100
 388:	b8 f3       	brcs	.-18     	; 0x378 <GSMConnect+0x24>
 38a:	14 e0       	ldi	r17, 0x04	; 4
	}

	//statusLedOff();
	

	//测试AT通讯是否正常
	//首先清掉串口接收的数据
	connectCounter=5;
	while(connectCounter--)
	{
		for(GSMtemp=0;GSMtemp<100;GSMtemp++)
 38c:	10 92 8a 00 	sts	0x008A, r1
 390:	0b c0       	rjmp	.+22     	; 0x3a8 <GSMConnect+0x54>
		{
			GSMReceiveTemp[GSMtemp]=0;
 392:	e0 91 8a 00 	lds	r30, 0x008A
 396:	ff 27       	eor	r31, r31
 398:	ef 56       	subi	r30, 0x6F	; 111
 39a:	ff 4f       	sbci	r31, 0xFF	; 255
 39c:	10 82       	st	Z, r1
 39e:	80 91 8a 00 	lds	r24, 0x008A
 3a2:	8f 5f       	subi	r24, 0xFF	; 255
 3a4:	80 93 8a 00 	sts	0x008A, r24
 3a8:	80 91 8a 00 	lds	r24, 0x008A
 3ac:	84 36       	cpi	r24, 0x64	; 100
 3ae:	88 f3       	brcs	.-30     	; 0x392 <GSMConnect+0x3e>
		}
		//首先清除掉所有的数据
		receiveData(GSMReceiveTemp,100);
 3b0:	64 e6       	ldi	r22, 0x64	; 100
 3b2:	81 e9       	ldi	r24, 0x91	; 145
 3b4:	90 e0       	ldi	r25, 0x00	; 0
 3b6:	64 df       	rcall	.-312    	; 0x280 <receiveData>
		//发送一个测试字符串
		sendData(GSMATConnectTest,4);
 3b8:	64 e0       	ldi	r22, 0x04	; 4
 3ba:	80 e6       	ldi	r24, 0x60	; 96
 3bc:	90 e0       	ldi	r25, 0x00	; 0
 3be:	22 df       	rcall	.-444    	; 0x204 <sendData>
		//延时一段时间
		GSMTimerCounter=0;
 3c0:	10 92 89 00 	sts	0x0089, r1
 3c4:	05 c0       	rjmp	.+10     	; 0x3d0 <GSMConnect+0x7c>
		while(GSMTimerCounter<2)
		{
			GSMtemp++;
 3c6:	80 91 8a 00 	lds	r24, 0x008A
 3ca:	8f 5f       	subi	r24, 0xFF	; 255
 3cc:	80 93 8a 00 	sts	0x008A, r24
 3d0:	80 91 89 00 	lds	r24, 0x0089
 3d4:	82 30       	cpi	r24, 0x02	; 2
 3d6:	b8 f3       	brcs	.-18     	; 0x3c6 <GSMConnect+0x72>
		}
		for(GSMtemp=0;GSMtemp<100;GSMtemp++)
 3d8:	10 92 8a 00 	sts	0x008A, r1
 3dc:	0b c0       	rjmp	.+22     	; 0x3f4 <GSMConnect+0xa0>
		{
			GSMReceiveTemp[GSMtemp]=0;
 3de:	e0 91 8a 00 	lds	r30, 0x008A
 3e2:	ff 27       	eor	r31, r31
 3e4:	ef 56       	subi	r30, 0x6F	; 111
 3e6:	ff 4f       	sbci	r31, 0xFF	; 255
 3e8:	10 82       	st	Z, r1
 3ea:	80 91 8a 00 	lds	r24, 0x008A
 3ee:	8f 5f       	subi	r24, 0xFF	; 255
 3f0:	80 93 8a 00 	sts	0x008A, r24
 3f4:	80 91 8a 00 	lds	r24, 0x008A
 3f8:	84 36       	cpi	r24, 0x64	; 100
 3fa:	88 f3       	brcs	.-30     	; 0x3de <GSMConnect+0x8a>
		}
		receiveData(GSMReceiveTemp,100);
 3fc:	64 e6       	ldi	r22, 0x64	; 100
 3fe:	81 e9       	ldi	r24, 0x91	; 145
 400:	90 e0       	ldi	r25, 0x00	; 0
 402:	3e df       	rcall	.-388    	; 0x280 <receiveData>
		if((GSMReceiveTemp[5]=='O')&&(GSMReceiveTemp[6]=='K'))
 404:	80 91 96 00 	lds	r24, 0x0096
 408:	8f 34       	cpi	r24, 0x4F	; 79
 40a:	21 f4       	brne	.+8      	; 0x414 <GSMConnect+0xc0>
 40c:	80 91 97 00 	lds	r24, 0x0097
 410:	8b 34       	cpi	r24, 0x4B	; 75
 412:	19 f0       	breq	.+6      	; 0x41a <GSMConnect+0xc6>
 414:	11 50       	subi	r17, 0x01	; 1
 416:	08 f0       	brcs	.+2      	; 0x41a <GSMConnect+0xc6>
 418:	b9 cf       	rjmp	.-142    	; 0x38c <GSMConnect+0x38>
 41a:	14 e0       	ldi	r17, 0x04	; 4
		{
			//能够正常通讯
			break;
		}
	}
	

	//设置系统为自动接听
	connectCounter=5;
	while(connectCounter--)
	{
		for(GSMtemp=0;GSMtemp<100;GSMtemp++)
 41c:	10 92 8a 00 	sts	0x008A, r1
 420:	0b c0       	rjmp	.+22     	; 0x438 <GSMConnect+0xe4>
		{
			GSMReceiveTemp[GSMtemp]=0;
 422:	e0 91 8a 00 	lds	r30, 0x008A
 426:	ff 27       	eor	r31, r31
 428:	ef 56       	subi	r30, 0x6F	; 111
 42a:	ff 4f       	sbci	r31, 0xFF	; 255
 42c:	10 82       	st	Z, r1
 42e:	80 91 8a 00 	lds	r24, 0x008A
 432:	8f 5f       	subi	r24, 0xFF	; 255
 434:	80 93 8a 00 	sts	0x008A, r24
 438:	80 91 8a 00 	lds	r24, 0x008A
 43c:	84 36       	cpi	r24, 0x64	; 100
 43e:	88 f3       	brcs	.-30     	; 0x422 <GSMConnect+0xce>
		}		
		//首先清除掉所有的数据
		receiveData(GSMReceiveTemp,100);
 440:	64 e6       	ldi	r22, 0x64	; 100
 442:	81 e9       	ldi	r24, 0x91	; 145
 444:	90 e0       	ldi	r25, 0x00	; 0
 446:	1c df       	rcall	.-456    	; 0x280 <receiveData>
		//发送一个测试字符串
		sendData(GSMATAcceceptMode,8);
 448:	68 e0       	ldi	r22, 0x08	; 8
 44a:	88 e6       	ldi	r24, 0x68	; 104
 44c:	90 e0       	ldi	r25, 0x00	; 0
 44e:	da de       	rcall	.-588    	; 0x204 <sendData>
		//延时一段时间
		GSMTimerCounter=0;
 450:	10 92 89 00 	sts	0x0089, r1
 454:	05 c0       	rjmp	.+10     	; 0x460 <__stack+0x1>
		while(GSMTimerCounter<2)
		{
			GSMtemp++;
 456:	80 91 8a 00 	lds	r24, 0x008A
 45a:	8f 5f       	subi	r24, 0xFF	; 255
 45c:	80 93 8a 00 	sts	0x008A, r24
 460:	80 91 89 00 	lds	r24, 0x0089
 464:	82 30       	cpi	r24, 0x02	; 2
 466:	b8 f3       	brcs	.-18     	; 0x456 <GSMConnect+0x102>
		}
		for(GSMtemp=0;GSMtemp<100;GSMtemp++)
 468:	10 92 8a 00 	sts	0x008A, r1
 46c:	0b c0       	rjmp	.+22     	; 0x484 <__stack+0x25>
		{
			GSMReceiveTemp[GSMtemp]=0;
 46e:	e0 91 8a 00 	lds	r30, 0x008A
 472:	ff 27       	eor	r31, r31
 474:	ef 56       	subi	r30, 0x6F	; 111
 476:	ff 4f       	sbci	r31, 0xFF	; 255
 478:	10 82       	st	Z, r1
 47a:	80 91 8a 00 	lds	r24, 0x008A
 47e:	8f 5f       	subi	r24, 0xFF	; 255
 480:	80 93 8a 00 	sts	0x008A, r24
 484:	80 91 8a 00 	lds	r24, 0x008A
 488:	84 36       	cpi	r24, 0x64	; 100
 48a:	88 f3       	brcs	.-30     	; 0x46e <__stack+0xf>
		}		
		receiveData(GSMReceiveTemp,100);
 48c:	64 e6       	ldi	r22, 0x64	; 100
 48e:	81 e9       	ldi	r24, 0x91	; 145
 490:	90 e0       	ldi	r25, 0x00	; 0
 492:	f6 de       	rcall	.-532    	; 0x280 <receiveData>
		if((GSMReceiveTemp[9]=='O')&&(GSMReceiveTemp[10]=='K'))
 494:	80 91 9a 00 	lds	r24, 0x009A
 498:	8f 34       	cpi	r24, 0x4F	; 79
 49a:	21 f4       	brne	.+8      	; 0x4a4 <__stack+0x45>
 49c:	80 91 9b 00 	lds	r24, 0x009B
 4a0:	8b 34       	cpi	r24, 0x4B	; 75
 4a2:	19 f0       	breq	.+6      	; 0x4aa <__stack+0x4b>
 4a4:	11 50       	subi	r17, 0x01	; 1
 4a6:	08 f0       	brcs	.+2      	; 0x4aa <__stack+0x4b>
 4a8:	b9 cf       	rjmp	.-142    	; 0x41c <GSMConnect+0xc8>
 4aa:	1f 91       	pop	r17
 4ac:	08 95       	ret

000004ae <GSMConnectTest>:
		{
			//成功设置自动接听
			break;
		}
	}
		//test
	//statusLedOn();

}

⌨️ 快捷键说明

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