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

📄 camel.lss

📁 一个出口非洲的骑骆驼机器人的控制程序。采用工业手机模块作为通讯模块;AVR单片机作为控制中心;工业用马达作为骆驼机器人驱动动力。通过控制中心通过AT指令集连接通讯模块
💻 LSS
📖 第 1 页 / 共 3 页
字号:
//测试GSM模块是否已经在线
void GSMConnectTest(void)
{
 4ae:	cf 93       	push	r28
 4b0:	df 93       	push	r29
 4b2:	cd b7       	in	r28, 0x3d	; 61
 4b4:	de b7       	in	r29, 0x3e	; 62
 4b6:	c4 56       	subi	r28, 0x64	; 100
 4b8:	d0 40       	sbci	r29, 0x00	; 0
 4ba:	0f b6       	in	r0, 0x3f	; 63
 4bc:	f8 94       	cli
 4be:	de bf       	out	0x3e, r29	; 62
 4c0:	0f be       	out	0x3f, r0	; 63
 4c2:	cd bf       	out	0x3d, r28	; 61
	uchar GSMConnectTestBuffer[100];
	uchar connectTestTemp=0;
	//发送一个测试字符串
	sendData(GSMATOnLineTest,9);
 4c4:	69 e0       	ldi	r22, 0x09	; 9
 4c6:	80 e7       	ldi	r24, 0x70	; 112
 4c8:	90 e0       	ldi	r25, 0x00	; 0
 4ca:	9c de       	rcall	.-712    	; 0x204 <sendData>
	//延时一段时间
	GSMTimerCounter=0;
 4cc:	10 92 89 00 	sts	0x0089, r1
 4d0:	05 c0       	rjmp	.+10     	; 0x4dc <GSMConnectTest+0x2e>
	while(GSMTimerCounter<2)
	{
		GSMtemp++;
 4d2:	80 91 8a 00 	lds	r24, 0x008A
 4d6:	8f 5f       	subi	r24, 0xFF	; 255
 4d8:	80 93 8a 00 	sts	0x008A, r24
 4dc:	80 91 89 00 	lds	r24, 0x0089
 4e0:	82 30       	cpi	r24, 0x02	; 2
 4e2:	b8 f3       	brcs	.-18     	; 0x4d2 <GSMConnectTest+0x24>
 4e4:	fe 01       	movw	r30, r28
 4e6:	31 96       	adiw	r30, 0x01	; 1
 4e8:	ce 01       	movw	r24, r28
 4ea:	8b 59       	subi	r24, 0x9B	; 155
 4ec:	9f 4f       	sbci	r25, 0xFF	; 255
	}
	for(connectTestTemp=0;connectTestTemp<100;connectTestTemp++)
	{
		GSMConnectTestBuffer[connectTestTemp]=0;
 4ee:	11 92       	st	Z+, r1
 4f0:	e8 17       	cp	r30, r24
 4f2:	f9 07       	cpc	r31, r25
 4f4:	e1 f7       	brne	.-8      	; 0x4ee <GSMConnectTest+0x40>
	}
	receiveData(GSMConnectTestBuffer,100);
 4f6:	64 e6       	ldi	r22, 0x64	; 100
 4f8:	ce 01       	movw	r24, r28
 4fa:	01 96       	adiw	r24, 0x01	; 1
 4fc:	c1 de       	rcall	.-638    	; 0x280 <receiveData>
	if(GSMConnectTestBuffer[17]=='4')
 4fe:	8a 89       	ldd	r24, Y+18	; 0x12
 500:	84 33       	cpi	r24, 0x34	; 52
 502:	21 f4       	brne	.+8      	; 0x50c <GSMConnectTest+0x5e>
	{
		//正常在线状态
		GSMTalkingFlag=GSMTalkingYes;
 504:	81 e0       	ldi	r24, 0x01	; 1
 506:	80 93 8b 00 	sts	0x008B, r24
 50a:	02 c0       	rjmp	.+4      	; 0x510 <GSMConnectTest+0x62>
	}
	else 
	{
		//离线状态
		GSMTalkingFlag=GSMTalkingNo;
 50c:	10 92 8b 00 	sts	0x008B, r1
 510:	cc 59       	subi	r28, 0x9C	; 156
 512:	df 4f       	sbci	r29, 0xFF	; 255
 514:	0f b6       	in	r0, 0x3f	; 63
 516:	f8 94       	cli
 518:	de bf       	out	0x3e, r29	; 62
 51a:	0f be       	out	0x3f, r0	; 63
 51c:	cd bf       	out	0x3d, r28	; 61
 51e:	df 91       	pop	r29
 520:	cf 91       	pop	r28
 522:	08 95       	ret

00000524 <init_devices>:
	}
}
	

//call this routine to initialise all peripherals
void init_devices(void)
{
 524:	f8 94       	cli
	//stop errant interrupts until set up
	clear_interrupt(); //disable all interrupts
////////////////////硬件端口定义//////////////////////////////////////////////////////////////////////////////
//			0			1			2			3			4			5			6			7			//
//----------------------------------------------------------------------------------------------------------//
//PORTA		X			X			X			A1			A2			A3			A4			RING		//
//			0			0			0			1			1			1			1			0			//
//DDRA		0			0			0			0			0			0			0			1			//
//----------------------------------------------------------------------------------------------------------//
//PORTB		X			X			X			X			X			X			SPEAKER		MOTO		//
//			0			0			0			0			0			0			0			0			//
//DDRB		0			0			0			0			0			0			1			1			//
//----------------------------------------------------------------------------------------------------------//
//PORTC		X			X			X			X			X			X			RINGCHECK	KEYCHECK	//
//			0			0			0			0			0			0			1			1			//
//DDRC		1			1			1			1			1			1			0			0			//
//----------------------------------------------------------------------------------------------------------//
//PORTD		X			X			X			X			X			X			X			X			//
//			0			0			0			0			0			0			0			0			//
//DDRC		0			0			0			0			0			0			0			0			//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
	DDRD=0x00;
 526:	11 ba       	out	0x11, r1	; 17
	PORTD=0xFF;
 528:	8f ef       	ldi	r24, 0xFF	; 255
 52a:	82 bb       	out	0x12, r24	; 18
	//按键键值检测端口
	DDRC &=0xF0;
 52c:	84 b3       	in	r24, 0x14	; 20
 52e:	80 7f       	andi	r24, 0xF0	; 240
 530:	84 bb       	out	0x14, r24	; 20
	PORTC |=0x0F;
 532:	85 b3       	in	r24, 0x15	; 21
 534:	8f 60       	ori	r24, 0x0F	; 15
 536:	85 bb       	out	0x15, r24	; 21
	//按键中断端口
	DDRD &=0xEF;
 538:	8c 98       	cbi	0x11, 4	; 17
	PORTD |=0x10;
 53a:	94 9a       	sbi	0x12, 4	; 18
	//指示灯端口
	DDRC |=1<<4;
 53c:	a4 9a       	sbi	0x14, 4	; 20
	PORTC |=1<<4;
 53e:	ac 9a       	sbi	0x15, 4	; 21
	//开机控制端口
	DDRC |=1<<5;
 540:	a5 9a       	sbi	0x14, 5	; 20
	PORTC |=1<<5;
 542:	ad 9a       	sbi	0x15, 5	; 21
	//马达控制端口
	DDRD |=1<<5;
 544:	8d 9a       	sbi	0x11, 5	; 17
	PORTD |=1<<5;
 546:	95 9a       	sbi	0x12, 5	; 18
	//喇叭控制接口
	DDRB |=0x3E;
 548:	87 b3       	in	r24, 0x17	; 23
 54a:	8e 63       	ori	r24, 0x3E	; 62
 54c:	87 bb       	out	0x17, r24	; 23
	PORTB |=0x3E;
 54e:	88 b3       	in	r24, 0x18	; 24
 550:	8e 63       	ori	r24, 0x3E	; 62
 552:	88 bb       	out	0x18, r24	; 24


	//定时T1初始化,100ms
	TCCR1B = 0x00; //stop
 554:	1e bc       	out	0x2e, r1	; 46
	TCNT1H = 0xCF; //setup
 556:	8f ec       	ldi	r24, 0xCF	; 207
 558:	8d bd       	out	0x2d, r24	; 45
	TCNT1L = 0x2C;
 55a:	8c e2       	ldi	r24, 0x2C	; 44
 55c:	8c bd       	out	0x2c, r24	; 44
	OCR1AH = 0x30;
 55e:	90 e3       	ldi	r25, 0x30	; 48
 560:	9b bd       	out	0x2b, r25	; 43
	OCR1AL = 0xD4;
 562:	84 ed       	ldi	r24, 0xD4	; 212
 564:	8a bd       	out	0x2a, r24	; 42
	OCR1BH = 0x30;
 566:	99 bd       	out	0x29, r25	; 41
	OCR1BL = 0xD4;
 568:	88 bd       	out	0x28, r24	; 40
	ICR1H  = 0x30;
 56a:	97 bd       	out	0x27, r25	; 39
	ICR1L  = 0xD4;
 56c:	86 bd       	out	0x26, r24	; 38
	TCCR1A = 0x00;
 56e:	1f bc       	out	0x2f, r1	; 47
	TCCR1B = 0x03; //start Timer
 570:	83 e0       	ldi	r24, 0x03	; 3
 572:	8e bd       	out	0x2e, r24	; 46
	TIMSK  = 0x04;//中断允许
 574:	84 e0       	ldi	r24, 0x04	; 4
 576:	89 bf       	out	0x39, r24	; 57


	//串口通信初始化
	 UCSRB = 0x00; //disable while setting baud rate
 578:	1a b8       	out	0x0a, r1	; 10
	 UCSRA = 0x00;
 57a:	1b b8       	out	0x0b, r1	; 11
	 UCSRC = (1<<URSEL) | 0x06;
 57c:	86 e8       	ldi	r24, 0x86	; 134
 57e:	80 bd       	out	0x20, r24	; 32
	 UBRRL = 0x33; //set baud rate lo
 580:	83 e3       	ldi	r24, 0x33	; 51
 582:	89 b9       	out	0x09, r24	; 9
	 UBRRH = 0x00; //set baud rate hi
 584:	10 bc       	out	0x20, r1	; 32
	 UCSRB = 0xD8;
 586:	88 ed       	ldi	r24, 0xD8	; 216
 588:	8a b9       	out	0x0a, r24	; 10


	//MCUCR = 0x03;
	//GICR  = 0x40;s
	MCUCR = 0x00;
 58a:	15 be       	out	0x35, r1	; 53
	GICR  = 0x00;
 58c:	1b be       	out	0x3b, r1	; 59

	set_interrupt(); //re-enable interrupts
 58e:	78 94       	sei
 590:	08 95       	ret

00000592 <main>:
	//all peripherals are now initialised

}





//===========================================================//
//===========================================================//
int main(void)
{  
 592:	c8 df       	rcall	.-112    	; 0x524 <init_devices>
	init_devices();
	//sendData(GSMATConnectTest,4);
	
	//UDR=0x55;
	//while(1);
	
	//test
	//statusLedOn();

	//test
	statusLedOn();
 594:	ac 98       	cbi	0x15, 4	; 21
	//连接模块
	GSMConnect();
 596:	de de       	rcall	.-580    	; 0x354 <GSMConnect>

	//test
	statusLedOff();
 598:	ac 9a       	sbi	0x15, 4	; 21

	//控制数据初始化
	KeyFlag=0;
 59a:	10 92 7b 00 	sts	0x007B, r1
	
	//初始化定时计数
	GSMTalkingCounter=0;
 59e:	10 92 8c 00 	sts	0x008C, r1
	
	/////////////////////////////////////////////////////////////////
	while(1)
	{
		SpeakerPlay();
 5a2:	5d dd       	rcall	.-1350   	; 0x5e <SpeakerPlay>
		SpeakerRec();
 5a4:	88 dd       	rcall	.-1264   	; 0xb6 <SpeakerRec>
	
		//检查系统是否正常运作
		//周期检查是否处于通话状态
	  	if(GSMTalkingCounter>50)
 5a6:	80 91 8c 00 	lds	r24, 0x008C
 5aa:	83 33       	cpi	r24, 0x33	; 51
 5ac:	08 f4       	brcc	.+2      	; 0x5b0 <main+0x1e>
 5ae:	4f c0       	rjmp	.+158    	; 0x64e <main+0xbc>
	  	{
			GSMTalkingCounter=0;
 5b0:	10 92 8c 00 	sts	0x008C, r1

			//检查系统是否处于通话状态
			GSMConnectTest();
 5b4:	7c df       	rcall	.-264    	; 0x4ae <GSMConnectTest>
			if(GSMTalkingFlag==GSMTalkingYes)
 5b6:	80 91 8b 00 	lds	r24, 0x008B
 5ba:	81 30       	cpi	r24, 0x01	; 1
 5bc:	11 f4       	brne	.+4      	; 0x5c2 <main+0x30>
			{statusLedOn();}
 5be:	ac 98       	cbi	0x15, 4	; 21
 5c0:	01 c0       	rjmp	.+2      	; 0x5c4 <main+0x32>
			else 
			{statusLedOff();}
 5c2:	ac 9a       	sbi	0x15, 4	; 21

			//测试AT通讯是否正常
			for(GSMtemp=0;GSMtemp<100;GSMtemp++)
 5c4:	10 92 8a 00 	sts	0x008A, r1
 5c8:	0b c0       	rjmp	.+22     	; 0x5e0 <main+0x4e>
			{
				GSMReceiveTemp[GSMtemp]=0;
 5ca:	e0 91 8a 00 	lds	r30, 0x008A
 5ce:	ff 27       	eor	r31, r31
 5d0:	ef 56       	subi	r30, 0x6F	; 111
 5d2:	ff 4f       	sbci	r31, 0xFF	; 255
 5d4:	10 82       	st	Z, r1
 5d6:	80 91 8a 00 	lds	r24, 0x008A
 5da:	8f 5f       	subi	r24, 0xFF	; 255
 5dc:	80 93 8a 00 	sts	0x008A, r24
 5e0:	80 91 8a 00 	lds	r24, 0x008A
 5e4:	84 36       	cpi	r24, 0x64	; 100
 5e6:	88 f3       	brcs	.-30     	; 0x5ca <main+0x38>
			}
			//首先清除掉所有的数据
			receiveData(GSMReceiveTemp,100);
 5e8:	64 e6       	ldi	r22, 0x64	; 100
 5ea:	81 e9       	ldi	r24, 0x91	; 145
 5ec:	90 e0       	ldi	r25, 0x00	; 0
 5ee:	48 de       	rcall	.-880    	; 0x280 <receiveData>
			//发送一个测试字符串
			sendData(GSMATConnectTest,4);
 5f0:	64 e0       	ldi	r22, 0x04	; 4
 5f2:	80 e6       	ldi	r24, 0x60	; 96
 5f4:	90 e0       	ldi	r25, 0x00	; 0
 5f6:	06 de       	rcall	.-1012   	; 0x204 <sendData>
			//延时一段时间
			GSMTimerCounter=0;
 5f8:	10 92 89 00 	sts	0x0089, r1
 5fc:	05 c0       	rjmp	.+10     	; 0x608 <main+0x76>
			while(GSMTimerCounter<2)
			{
				GSMtemp++;
 5fe:	80 91 8a 00 	lds	r24, 0x008A
 602:	8f 5f       	subi	r24, 0xFF	; 255
 604:	80 93 8a 00 	sts	0x008A, r24
 608:	80 91 89 00 	lds	r24, 0x0089
 60c:	82 30       	cpi	r24, 0x02	; 2
 60e:	b8 f3       	brcs	.-18     	; 0x5fe <main+0x6c>
			}
			for(GSMtemp=0;GSMtemp<100;GSMtemp++)
 610:	10 92 8a 00 	sts	0x008A, r1
 614:	0b c0       	rjmp	.+22     	; 0x62c <main+0x9a>
			{
				GSMReceiveTemp[GSMtemp]=0;
 616:	e0 91 8a 00 	lds	r30, 0x008A
 61a:	ff 27       	eor	r31, r31
 61c:	ef 56       	subi	r30, 0x6F	; 111
 61e:	ff 4f       	sbci	r31, 0xFF	; 255
 620:	10 82       	st	Z, r1
 622:	80 91 8a 00 	lds	r24, 0x008A
 626:	8f 5f       	subi	r24, 0xFF	; 255
 628:	80 93 8a 00 	sts	0x008A, r24
 62c:	80 91 8a 00 	lds	r24, 0x008A
 630:	84 36       	cpi	r24, 0x64	; 100
 632:	88 f3       	brcs	.-30     	; 0x616 <main+0x84>
			}
			receiveData(GSMReceiveTemp,100);
 634:	64 e6       	ldi	r22, 0x64	; 100
 636:	81 e9       	ldi	r24, 0x91	; 145
 638:	90 e0       	ldi	r25, 0x00	; 0
 63a:	22 de       	rcall	.-956    	; 0x280 <receiveData>
			//不能够能够正常通讯
			//重新启动系统
			if((GSMReceiveTemp[5]!='O')&&(GSMReceiveTemp[6]!='K'))
 63c:	80 91 96 00 	lds	r24, 0x0096
 640:	8f 34       	cpi	r24, 0x4F	; 79
 642:	29 f0       	breq	.+10     	; 0x64e <main+0xbc>
 644:	80 91 97 00 	lds	r24, 0x0097
 648:	8b 34       	cpi	r24, 0x4B	; 75
 64a:	09 f0       	breq	.+2      	; 0x64e <main+0xbc>
			{
				//连接模块
				GSMConnect();				
 64c:	83 de       	rcall	.-762    	; 0x354 <GSMConnect>
			}
		}
		



		//检查是否有按键按下
		checkKey();
 64e:	5f dd       	rcall	.-1346   	; 0x10e <checkKey>
		if(KeyFlag>0)
 650:	80 91 7b 00 	lds	r24, 0x007B
 654:	88 23       	and	r24, r24
 656:	09 f4       	brne	.+2      	; 0x65a <main+0xc8>
 658:	a4 cf       	rjmp	.-184    	; 0x5a2 <main+0x10>
		{
			//检测是否在线
			//GSMConnectTest();
			if(GSMTalkingFlag==GSMTalkingYes)
 65a:	80 91 8b 00 	lds	r24, 0x008B
 65e:	81 30       	cpi	r24, 0x01	; 1
 660:	f1 f4       	brne	.+60     	; 0x69e <main+0x10c>
			{
				//动作控制状态
				switch(KeyNum)
 662:	80 91 7c 00 	lds	r24, 0x007C
 666:	84 30       	cpi	r24, 0x04	; 4
 668:	91 f0       	breq	.+36     	; 0x68e <main+0xfc>
 66a:	85 30       	cpi	r24, 0x05	; 5
 66c:	28 f4       	brcc	.+10     	; 0x678 <main+0xe6>
 66e:	81 30       	cpi	r24, 0x01	; 1
 670:	41 f0       	breq	.+16     	; 0x682 <main+0xf0>
 672:	82 30       	cpi	r24, 0x02	; 2
 674:	a1 f4       	brne	.+40     	; 0x69e <main+0x10c>
 676:	07 c0       	rjmp	.+14     	; 0x686 <main+0xf4>
 678:	89 30       	cpi	r24, 0x09	; 9
 67a:	69 f0       	breq	.+26     	; 0x696 <main+0x104>
 67c:	8c 30       	cpi	r24, 0x0C	; 12
 67e:	79 f4       	brne	.+30     	; 0x69e <main+0x10c>
 680:	0c c0       	rjmp	.+24     	; 0x69a <main+0x108>
 682:	85 e0       	ldi	r24, 0x05	; 5
 684:	01 c0       	rjmp	.+2      	; 0x688 <main+0xf6>
 686:	84 e1       	ldi	r24, 0x14	; 20
 688:	80 93 7d 00 	sts	0x007D, r24
 68c:	08 c0       	rjmp	.+16     	; 0x69e <main+0x10c>
 68e:	88 b3       	in	r24, 0x18	; 24
 690:	87 7c       	andi	r24, 0xC7	; 199
 692:	88 bb       	out	0x18, r24	; 24
 694:	04 c0       	rjmp	.+8      	; 0x69e <main+0x10c>
 696:	95 98       	cbi	0x12, 5	; 18
 698:	02 c0       	rjmp	.+4      	; 0x69e <main+0x10c>
 69a:	10 92 80 00 	sts	0x0080, r1
				{
					//按一下键甩打一下皮鞭
					case 1:
						hit1();                 	
						break;
					//按一下键甩打几下皮鞭
					case 2:
						hit2();                 	
						break;
					case 3: 
						break;
					//按一下键播一下声音
					case 4:
						voice1();               	
						break;
					//按一下键连续播出录音芯片的声音
					case 5:
											     	
						break;
					//远程放声
					case 6:
						voice3();               	
						break;
					//关闭电机,扬声器,但是机器人仍然受控
					case 9:
					    stopAll();               	
						break;
					//修改密码
					case 10:
						
						break;
					case 11:
									           		//修改密码
						break;	
					//录音
					case 12:
						voiceRecord();			           		
						break;
							
					default:
						break;
				}
			}
			KeyFlag=0;
 69e:	10 92 7b 00 	sts	0x007B, r1
 6a2:	7f cf       	rjmp	.-258    	; 0x5a2 <main+0x10>

000006a4 <_exit>:
 6a4:	ff cf       	rjmp	.-2      	; 0x6a4 <_exit>

⌨️ 快捷键说明

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