📄 camel.lss
字号:
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 + -