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

📄 diy0206_4.lst

📁 双龙的积木式智能机器人C源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    054C E090      LDI	R25,0
    054D 91000060  LDS	R16,0x60
    054F 91100061  LDS	R17,0x61
    0551 0F08      ADD	R16,R24
    0552 1F19      ADC	R17,R25
    0553 D3BD      RCALL	_EEPROMread
    0554 93000073  STS	_temp1,R16
(0393) 		}
(0394)       }
(0395)    }
(0396) }
    0556 D353      RCALL	pop_gset1
    0557 D38E      RCALL	pop_lset
    0558 9518      RETI
(0397) 
(0398) void stop_timer0()
(0399) {
(0400) 	CLI();
_stop_timer0:
    0559 94F8      BCLR	7
(0401) 	TCCR0 = 0x00;//停止timer0
    055A 2422      CLR	R2
    055B BE23      OUT	P33,R2
(0402) 	MCUCR = 0x00;
    055C BE25      OUT	P35,R2
(0403)     GIMSK = 0x00;
    055D BE2B      OUT	P3B,R2
(0404)     TIMSK = 0x00;
    055E BE29      OUT	P39,R2
(0405)     SEI();
    055F 9478      BSET	7
(0406) }
    0560 9508      RET
_timer1_ovf_isr:
    0561 922A      ST	R2,-Y
    0562 923A      ST	R3,-Y
    0563 938A      ST	R24,-Y
    0564 B62F      IN	R2,P3F
    0565 922A      ST	R2,-Y
(0407) 
(0408) /*******************************************/
(0409) /*              电子音乐演示程序           */
(0410) /*******************************************/
(0411) //使用说明:音乐输出端口:PORTC.0,音乐数据存放
(0412) //于AT90S8515 的EEPROM存贮器中。
(0413) // 可以用并口下载软件写入新的音乐文件
(0414) 
(0415) //声控起动音乐机器人程序,未起动时,PA口的8 LED 呈广告灯效果(霓虹灯)
(0416) //声控起动后,机器人开始演奏音乐
(0417) //按遥控器上不同的键后可改变机器人演奏的乐曲。
(0418) 
(0419) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0420) void timer1_ovf_isr(void)
(0421) 	 {
(0422) 	  TCNT1=toneconst;
    0566 90200077  LDS	R2,_toneconst
    0568 90300078  LDS	R3,_toneconst+1
    056A 9230004D  STS	0x4D,R3
    056C 9220004C  STS	0x4C,R2
(0423) 	  PORTC^=1;
    056E E081      LDI	R24,1
    056F B225      IN	R2,P15
    0570 2628      EOR	R2,R24
    0571 BA25      OUT	P15,R2
(0424) 	 }	 	 
    0572 9029      LD	R2,Y+
    0573 BE2F      OUT	P3F,R2
    0574 9189      LD	R24,Y+
    0575 9039      LD	R3,Y+
    0576 9029      LD	R2,Y+
    0577 9518      RETI
(0425) 
(0426) void music_car(void)
(0427)  	 {
(0428) 	  TCCR1A = 0x00;
_music_car:
    0578 2422      CLR	R2
    0579 BC2F      OUT	P2F,R2
(0429) 	  TCCR1B =(1<<CS11);//8分频
    057A E082      LDI	R24,2
    057B BD8E      OUT	P2E,R24
(0430) 	  temp1=EEPROMread((int)&sound[sound_add]);
    057C E081      LDI	R24,1
    057D E090      LDI	R25,0
    057E 91000060  LDS	R16,0x60
    0580 91100061  LDS	R17,0x61
    0582 0F08      ADD	R16,R24
    0583 1F19      ADC	R17,R25
    0584 D38C      RCALL	_EEPROMread
    0585 93000073  STS	_temp1,R16
    0587 C04F      RJMP	0x05D7
(0431) 	  while(temp1!=0)
(0432)  	  		{
(0433) 			temp=temp1; 
    0588 90200073  LDS	R2,_temp1
    058A 92200074  STS	_temp,R2
(0434) 			temp&=0x0f;
    058C 2D82      MOV	R24,R2
    058D 708F      ANDI	R24,0xF
    058E 93800074  STS	_temp,R24
(0435) 			if(temp!=0)
    0590 2E28      MOV	R2,R24
    0591 2388      TST	R24
    0592 F0D9      BEQ	0x05AE
(0436) 			  {
(0437) 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    0593 B789      IN	R24,P39
    0594 6880      ORI	R24,0x80
    0595 BF89      OUT	P39,R24
(0438) 			   temp--;			   
    0596 2D82      MOV	R24,R2
    0597 5081      SUBI	R24,1
    0598 93800074  STS	_temp,R24
(0439)         	   toneconst=TONETABLE[temp];
    059A E18A      LDI	R24,0x1A
    059B E090      LDI	R25,0
    059C 91000074  LDS	R16,_temp
    059E 2711      CLR	R17
    059F 0F00      LSL	R16
    05A0 1F11      ROL	R17
    05A1 0F08      ADD	R16,R24
    05A2 1F19      ADC	R17,R25
    05A3 D31D      RCALL	lpm16
    05A4 93100078  STS	_toneconst+1,R17
    05A6 93000077  STS	_toneconst,R16
(0440) 			   TCNT1=toneconst;
    05A8 2E20      MOV	R2,R16
    05A9 2E31      MOV	R3,R17
    05AA 9230004D  STS	0x4D,R3
    05AC 9220004C  STS	0x4C,R2
(0441)  			  }
(0442) 			temp=temp1;
    05AE 90200073  LDS	R2,_temp1
    05B0 92200074  STS	_temp,R2
(0443) 			temp>>=4;
    05B2 2D82      MOV	R24,R2
    05B3 9582      SWAP	R24
    05B4 708F      ANDI	R24,0xF
    05B5 93800074  STS	_temp,R24
(0444) 			temp&=0x0f;
    05B7 708F      ANDI	R24,0xF
    05B8 93800074  STS	_temp,R24
(0445) 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    05BA 2F28      MOV	R18,R24
    05BB 2733      CLR	R19
    05BC E801      LDI	R16,0x81
    05BD E010      LDI	R17,0
    05BE D33E      RCALL	mpy16s
    05BF DC1F      RCALL	_delay_ms
(0446) 			TIMSK&=~(1<<TOIE1);
    05C0 B789      IN	R24,P39
    05C1 778F      ANDI	R24,0x7F
    05C2 BF89      OUT	P39,R24
(0447) 			sound_add++;
    05C3 91800060  LDS	R24,0x60
    05C5 91900061  LDS	R25,0x61
    05C7 9601      ADIW	R24,1
    05C8 93900061  STS	0x61,R25
    05CA 93800060  STS	0x60,R24
(0448) 			temp1=EEPROMread((int)&sound[sound_add]); 
    05CC E081      LDI	R24,1
    05CD E090      LDI	R25,0
    05CE 91000060  LDS	R16,0x60
    05D0 91100061  LDS	R17,0x61
    05D2 0F08      ADD	R16,R24
    05D3 1F19      ADC	R17,R25
    05D4 D33C      RCALL	_EEPROMread
    05D5 93000073  STS	_temp1,R16
    05D7 90200073  LDS	R2,_temp1
    05D9 2022      TST	R2
    05DA F009      BEQ	0x05DC
    05DB CFAC      RJMP	0x0588
(0449) 			}
(0450) 		delay_ms(1000);	                                         	
    05DC EE08      LDI	R16,0xE8
    05DD E013      LDI	R17,3
(0451) 	 }	 	 	 	 
    05DE CC00      RJMP	_delay_ms
(0452) 	  
(0453) //  电机驱动信号                       led灯指示电机状态 
(0454) //PORTD = 0xA0;//前行    //1010 0000//PORTA = 0xC3;//1100,0011
(0455) //PORTD = 0x60;//快速左转//0110 0000//PORTA = 0x33;//0011,0011
(0456) //PORTD = 0x20;//慢速左转//0010 0000//PORTA = 0xF3;//1111,0011
(0457) //PORTD = 0x90;//快速右转//1001 0000//PORTA = 0xCC;//1100,1100
(0458) //PORTD = 0x80;//慢速右转//1000 0000//PORTA = 0xCF;//1100,1111
(0459) //PORTD = 0x50;//后退    //0101 0000//PORTA = 0x3C;//0011,1100
(0460) 
(0461) //PB2声控启动
(0462) //  用PD7~PD4来作为电机驱动端
(0463) 
(0464) void xuanya_car(void)
(0465) {
(0466)  port_init();         //PA,PB,PC,PD 初始化
_xuanya_car:
    05DF DBE8      RCALL	_port_init
(0467)  PORTA = 0xa5;//1010,0101
    05E0 EA85      LDI	R24,0xA5
    05E1 BB8B      OUT	P1B,R24
(0468)  delay_ms(1000);
    05E2 EE08      LDI	R16,0xE8
    05E3 E013      LDI	R17,3
    05E4 DBFA      RCALL	_delay_ms
(0469)  work_status = 0x20;//置对应的工作状态标志
    05E5 E280      LDI	R24,0x20
    05E6 9380007D  STS	_work_status,R24
(0470) 
(0471) 
(0472)   gzsl=0x88;timers=0;t0_times=0;
    05E8 E888      LDI	R24,0x88
    05E9 93800067  STS	_gzsl,R24
    05EB 2422      CLR	R2
    05EC 9220006D  STS	_timers,R2
    05EE 92200066  STS	_t0_times,R2
(0473)   CLI(); //disable all interrupts
    05F0 94F8      BCLR	7
(0474)   timer0_init();
    05F1 DD03      RCALL	_timer0_init
(0475) 
(0476)   MCUCR = 0x00;
    05F2 2422      CLR	R2
    05F3 BE25      OUT	P35,R2
(0477)   GIMSK = 0x00;
    05F4 BE2B      OUT	P3B,R2
(0478)   TIMSK|=(1<<TOIE0);
    05F5 B789      IN	R24,P39
    05F6 6082      ORI	R24,2
    05F7 BF89      OUT	P39,R24
(0479)   SEI(); //re-enable interrupts
    05F8 9478      BSET	7
(0480)  
(0481)  mic_startup();//等待声控启动函数
    05F9 DC75      RCALL	_mic_startup
(0482) 
(0483)   	  gzsl=0x44;t0_times=0;
    05FA E484      LDI	R24,0x44
    05FB 93800067  STS	_gzsl,R24
    05FD 2422      CLR	R2
    05FE 92200066  STS	_t0_times,R2
(0484) 	  TCCR1A = 0x00;
    0600 BC2F      OUT	P2F,R2
(0485) 	  TCCR1B =(1<<CS11);//8分频
    0601 E082      LDI	R24,2
    0602 BD8E      OUT	P2E,R24
(0486) xuanya_car_rst: 
(0487)     temp=temp1 = 0;
    0603 2422      CLR	R2
    0604 92200073  STS	_temp1,R2
    0606 92200074  STS	_temp,R2
(0488)     sound_add = 0;	  
    0608 2433      CLR	R3
    0609 92300061  STS	0x61,R3
    060B 92200060  STS	0x60,R2
    060D C044      RJMP	0x0652
(0489) 	  while(temp1!=0)
(0490)   	    {
(0491) 			temp=temp1; 
    060E 90200073  LDS	R2,_temp1
    0610 92200074  STS	_temp,R2
(0492) 			temp&=0x0f;
    0612 2D82      MOV	R24,R2
    0613 708F      ANDI	R24,0xF
    0614 93800074  STS	_temp,R24
(0493) 			if(temp!=0)
    0616 2E28      MOV	R2,R24
    0617 2388      TST	R24
    0618 F0D9      BEQ	0x0634
(0494) 			  {
(0495) 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    0619 B789      IN	R24,P39
    061A 6880      ORI	R24,0x80
    061B BF89      OUT	P39,R24
(0496) 			   temp--;			   
    061C 2D82      MOV	R24,R2
    061D 5081      SUBI	R24,1
    061E 93800074  STS	_temp,R24
(0497)         	   toneconst=TONETABLE[temp];
    0620 E18A      LDI	R24,0x1A
    0621 E090      LDI	R25,0
    0622 91000074  LDS	R16,_temp
    0624 2711      CLR	R17
    0625 0F00      LSL	R16
    0626 1F11      ROL	R17
    0627 0F08      ADD	R16,R24
    0628 1F19      ADC	R17,R25
    0629 D297      RCALL	lpm16
    062A 93100078  STS	_toneconst+1,R17
    062C 93000077  STS	_toneconst,R16
(0498) 			   TCNT1=toneconst;
    062E 2E20      MOV	R2,R16
    062F 2E31      MOV	R3,R17
    0630 9230004D  STS	0x4D,R3
    0632 9220004C  STS	0x4C,R2
(0499)  			  }
(0500) 			temp=temp1;
    0634 90200073  LDS	R2,_temp1
    0636 92200074  STS	_temp,R2
(0501) 			temp>>=4;
    0638 2D82      MOV	R24,R2
    0639 9582      SWAP	R24
    063A 708F      ANDI	R24,0xF
    063B 93800074  STS	_temp,R24
(0502) 			temp&=0x0f;
    063D 708F      ANDI	R24,0xF
    063E 93800074  STS	_temp,R24
(0503) 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    0640 2F28      MOV	R18,R24
    0641 2733      CLR	R19
    0642 E801      LDI	R16,0x81
    0643 E010      LDI	R17,0
    0644 D2B8      RCALL	mpy16s
    0645 DB99      RCALL	_delay_ms
(0504) 			TIMSK&=~(1<<TOIE1);
    0646 B789      IN	R24,P39
    0647 778F      ANDI	R24,0x7F
    0648 BF89      OUT	P39,R24
(0505) 			sound_add++;
    0649 91800060  LDS	R24,0x60
    064B 91900061  LDS	R25,0x61
    064D 9601      ADIW	R24,1
    064E 93900061  STS	0x61,R25
    0650 93800060  STS	0x60,R24
    0652 90200073  LDS	R2,_temp1
    0654 2022      TST	R2
    0655 F009      BEQ	0x0657
    0656 CFB7      RJMP	0x060E
(0506) 		}
(0507) 	goto xuanya_car_rst;
    0657 CFAB      RJMP	0x0603
    0658 9508      RET
(0508) }
(0509) 
(0510) void remote_car()
(0511) {//遥控车程序
(0512)  
(0513)  port_init();//调用端口初始化函数
_remote_car:
    0659 DB6E      RCALL	_port_init
(0514)  
(0515)  work_status = 0x60;//置对应的工作状态标志
    065A E680      LDI	R24,0x60
    065B 9380007D  STS	_work_status,R24
(0516) 
(0517) remote_rst: 
(0518)  PORTA = 0x0F;
    065D E08F      LDI	R24,0xF
    065E BB8B      OUT	P1B,R24
(0519)  delay_ms(1000);
    065F EE08      LDI	R16,0xE8
    0660 E013      LDI	R17,3
    0661 DB7D      RCALL	_delay_ms
(0520) 
(0521)   gzsl=0x88;timers=0;t0_times=0;
    0662 E888      LDI	R24,0x88
    0663 93800067  STS	_gzsl,R24
    0665 2422      CLR	R2
    0666 9220006D  STS	_timers,R2
    0668 92200066  STS	_t0_times,R2
(0522)   CLI(); //disable all interrupts
    066A 94F8      BCLR	7
(0523)   timer0_init();
    066B DC89      RCALL	_timer0_init
(0524) 
(0525)   MCUCR = 0x00;
    066C 2422      CLR	R2
    066D BE25      OUT	P35,R2
(0526)   GIMSK = 0x00;
    066E BE2B      OUT	P3B,R2
(0527)   TIMSK|=(1<<TOIE0);
    066F B789      IN	R24,P39
  

⌨️ 快捷键说明

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