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