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

📄 diy0206_4.lst

📁 双龙的积木式智能机器人C源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0550 E090      LDI	R25,0
    0551 91000060  LDS	R16,0x60
    0553 91100061  LDS	R17,0x61
    0555 0F08      ADD	R16,R24
    0556 1F19      ADC	R17,R25
    0557 D3BD      RCALL	_EEPROMread
    0558 93000073  STS	_temp1,R16
(0393) 		}
(0394)       }
(0395)    }
(0396) }
    055A D353      RCALL	pop_gset1
    055B D38E      RCALL	pop_lset
    055C 9518      RETI
(0397) 
(0398) void stop_timer0()
(0399) {
(0400) 	CLI();
_stop_timer0:
    055D 94F8      BCLR	7
(0401) 	TCCR0 = 0x00;//停止timer0
    055E 2422      CLR	R2
    055F BE23      OUT	P33,R2
(0402) 	MCUCR = 0x00;
    0560 BE25      OUT	P35,R2
(0403)     GIMSK = 0x00;
    0561 BE2B      OUT	P3B,R2
(0404)     TIMSK = 0x00;
    0562 BE29      OUT	P39,R2
(0405)     SEI();
    0563 9478      BSET	7
(0406) }
    0564 9508      RET
_timer1_ovf_isr:
    0565 922A      ST	R2,-Y
    0566 923A      ST	R3,-Y
    0567 938A      ST	R24,-Y
    0568 B62F      IN	R2,P3F
    0569 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;
    056A 90200077  LDS	R2,_toneconst
    056C 90300078  LDS	R3,_toneconst+1
    056E 9230004D  STS	0x4D,R3
    0570 9220004C  STS	0x4C,R2
(0423) 	  PORTC^=1;
    0572 E081      LDI	R24,1
    0573 B225      IN	R2,P15
    0574 2628      EOR	R2,R24
    0575 BA25      OUT	P15,R2
(0424) 	 }	 	 
    0576 9029      LD	R2,Y+
    0577 BE2F      OUT	P3F,R2
    0578 9189      LD	R24,Y+
    0579 9039      LD	R3,Y+
    057A 9029      LD	R2,Y+
    057B 9518      RETI
(0425) 
(0426) void music_car(void)
(0427)  	 {
(0428) 	  TCCR1A = 0x00;
_music_car:
    057C 2422      CLR	R2
    057D BC2F      OUT	P2F,R2
(0429) 	  TCCR1B =(1<<CS11);//8分频
    057E E082      LDI	R24,2
    057F BD8E      OUT	P2E,R24
(0430) 	  temp1=EEPROMread((int)&sound[sound_add]);
    0580 E081      LDI	R24,1
    0581 E090      LDI	R25,0
    0582 91000060  LDS	R16,0x60
    0584 91100061  LDS	R17,0x61
    0586 0F08      ADD	R16,R24
    0587 1F19      ADC	R17,R25
    0588 D38C      RCALL	_EEPROMread
    0589 93000073  STS	_temp1,R16
    058B C04F      RJMP	0x05DB
(0431) 	  while(temp1!=0)
(0432)  	  		{
(0433) 			temp=temp1; 
    058C 90200073  LDS	R2,_temp1
    058E 92200074  STS	_temp,R2
(0434) 			temp&=0x0f;
    0590 2D82      MOV	R24,R2
    0591 708F      ANDI	R24,0xF
    0592 93800074  STS	_temp,R24
(0435) 			if(temp!=0)
    0594 2E28      MOV	R2,R24
    0595 2388      TST	R24
    0596 F0D9      BEQ	0x05B2
(0436) 			  {
(0437) 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    0597 B789      IN	R24,P39
    0598 6084      ORI	R24,4
    0599 BF89      OUT	P39,R24
(0438) 			   temp--;			   
    059A 2D82      MOV	R24,R2
    059B 5081      SUBI	R24,1
    059C 93800074  STS	_temp,R24
(0439)         	   toneconst=TONETABLE[temp];
    059E E282      LDI	R24,0x22
    059F E090      LDI	R25,0
    05A0 91000074  LDS	R16,_temp
    05A2 2711      CLR	R17
    05A3 0F00      LSL	R16
    05A4 1F11      ROL	R17
    05A5 0F08      ADD	R16,R24
    05A6 1F19      ADC	R17,R25
    05A7 D31D      RCALL	lpm16
    05A8 93100078  STS	_toneconst+1,R17
    05AA 93000077  STS	_toneconst,R16
(0440) 			   TCNT1=toneconst;
    05AC 2E20      MOV	R2,R16
    05AD 2E31      MOV	R3,R17
    05AE 9230004D  STS	0x4D,R3
    05B0 9220004C  STS	0x4C,R2
(0441)  			  }
(0442) 			temp=temp1;
    05B2 90200073  LDS	R2,_temp1
    05B4 92200074  STS	_temp,R2
(0443) 			temp>>=4;
    05B6 2D82      MOV	R24,R2
    05B7 9582      SWAP	R24
    05B8 708F      ANDI	R24,0xF
    05B9 93800074  STS	_temp,R24
(0444) 			temp&=0x0f;
    05BB 708F      ANDI	R24,0xF
    05BC 93800074  STS	_temp,R24
(0445) 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    05BE 2F28      MOV	R18,R24
    05BF 2733      CLR	R19
    05C0 E801      LDI	R16,0x81
    05C1 E010      LDI	R17,0
    05C2 D33E      RCALL	mpy16s
    05C3 DC1F      RCALL	_delay_ms
(0446) 			TIMSK&=~(1<<TOIE1);
    05C4 B789      IN	R24,P39
    05C5 7F8B      ANDI	R24,0xFB
    05C6 BF89      OUT	P39,R24
(0447) 			sound_add++;
    05C7 91800060  LDS	R24,0x60
    05C9 91900061  LDS	R25,0x61
    05CB 9601      ADIW	R24,1
    05CC 93900061  STS	0x61,R25
    05CE 93800060  STS	0x60,R24
(0448) 			temp1=EEPROMread((int)&sound[sound_add]); 
    05D0 E081      LDI	R24,1
    05D1 E090      LDI	R25,0
    05D2 91000060  LDS	R16,0x60
    05D4 91100061  LDS	R17,0x61
    05D6 0F08      ADD	R16,R24
    05D7 1F19      ADC	R17,R25
    05D8 D33C      RCALL	_EEPROMread
    05D9 93000073  STS	_temp1,R16
    05DB 90200073  LDS	R2,_temp1
    05DD 2022      TST	R2
    05DE F009      BEQ	0x05E0
    05DF CFAC      RJMP	0x058C
(0449) 			}
(0450) 		delay_ms(1000);	                                         	
    05E0 EE08      LDI	R16,0xE8
    05E1 E013      LDI	R17,3
(0451) 	 }	 	 	 	 
    05E2 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:
    05E3 DBE8      RCALL	_port_init
(0467)  PORTA = 0xa5;//1010,0101
    05E4 EA85      LDI	R24,0xA5
    05E5 BB8B      OUT	P1B,R24
(0468)  delay_ms(1000);
    05E6 EE08      LDI	R16,0xE8
    05E7 E013      LDI	R17,3
    05E8 DBFA      RCALL	_delay_ms
(0469)  work_status = 0x20;//置对应的工作状态标志
    05E9 E280      LDI	R24,0x20
    05EA 9380007D  STS	_work_status,R24
(0470) 
(0471) 
(0472)   gzsl=0x88;timers=0;t0_times=0;
    05EC E888      LDI	R24,0x88
    05ED 93800067  STS	_gzsl,R24
    05EF 2422      CLR	R2
    05F0 9220006D  STS	_timers,R2
    05F2 92200066  STS	_t0_times,R2
(0473)   CLI(); //disable all interrupts
    05F4 94F8      BCLR	7
(0474)   timer0_init();
    05F5 DD03      RCALL	_timer0_init
(0475) 
(0476)   MCUCR = 0x00;
    05F6 2422      CLR	R2
    05F7 BE25      OUT	P35,R2
(0477)   GIMSK = 0x00;
    05F8 BE2B      OUT	P3B,R2
(0478)   TIMSK|=(1<<TOIE0);
    05F9 B789      IN	R24,P39
    05FA 6081      ORI	R24,1
    05FB BF89      OUT	P39,R24
(0479)   SEI(); //re-enable interrupts
    05FC 9478      BSET	7
(0480)  
(0481)  mic_startup();//等待声控启动函数
    05FD DC75      RCALL	_mic_startup
(0482) 
(0483)   	  gzsl=0x44;t0_times=0;
    05FE E484      LDI	R24,0x44
    05FF 93800067  STS	_gzsl,R24
    0601 2422      CLR	R2
    0602 92200066  STS	_t0_times,R2
(0484) 	  TCCR1A = 0x00;
    0604 BC2F      OUT	P2F,R2
(0485) 	  TCCR1B =(1<<CS11);//8分频
    0605 E082      LDI	R24,2
    0606 BD8E      OUT	P2E,R24
(0486) xuanya_car_rst: 
(0487)     temp=temp1 = 0;
    0607 2422      CLR	R2
    0608 92200073  STS	_temp1,R2
    060A 92200074  STS	_temp,R2
(0488)     sound_add = 0;	  
    060C 2433      CLR	R3
    060D 92300061  STS	0x61,R3
    060F 92200060  STS	0x60,R2
    0611 C044      RJMP	0x0656
(0489) 	  while(temp1!=0)
(0490)   	    {
(0491) 			temp=temp1; 
    0612 90200073  LDS	R2,_temp1
    0614 92200074  STS	_temp,R2
(0492) 			temp&=0x0f;
    0616 2D82      MOV	R24,R2
    0617 708F      ANDI	R24,0xF
    0618 93800074  STS	_temp,R24
(0493) 			if(temp!=0)
    061A 2E28      MOV	R2,R24
    061B 2388      TST	R24
    061C F0D9      BEQ	0x0638
(0494) 			  {
(0495) 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    061D B789      IN	R24,P39
    061E 6084      ORI	R24,4
    061F BF89      OUT	P39,R24
(0496) 			   temp--;			   
    0620 2D82      MOV	R24,R2
    0621 5081      SUBI	R24,1
    0622 93800074  STS	_temp,R24
(0497)         	   toneconst=TONETABLE[temp];
    0624 E282      LDI	R24,0x22
    0625 E090      LDI	R25,0
    0626 91000074  LDS	R16,_temp
    0628 2711      CLR	R17
    0629 0F00      LSL	R16
    062A 1F11      ROL	R17
    062B 0F08      ADD	R16,R24
    062C 1F19      ADC	R17,R25
    062D D297      RCALL	lpm16
    062E 93100078  STS	_toneconst+1,R17
    0630 93000077  STS	_toneconst,R16
(0498) 			   TCNT1=toneconst;
    0632 2E20      MOV	R2,R16
    0633 2E31      MOV	R3,R17
    0634 9230004D  STS	0x4D,R3
    0636 9220004C  STS	0x4C,R2
(0499)  			  }
(0500) 			temp=temp1;
    0638 90200073  LDS	R2,_temp1
    063A 92200074  STS	_temp,R2
(0501) 			temp>>=4;
    063C 2D82      MOV	R24,R2
    063D 9582      SWAP	R24
    063E 708F      ANDI	R24,0xF
    063F 93800074  STS	_temp,R24
(0502) 			temp&=0x0f;
    0641 708F      ANDI	R24,0xF
    0642 93800074  STS	_temp,R24
(0503) 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    0644 2F28      MOV	R18,R24
    0645 2733      CLR	R19
    0646 E801      LDI	R16,0x81
    0647 E010      LDI	R17,0
    0648 D2B8      RCALL	mpy16s
    0649 DB99      RCALL	_delay_ms
(0504) 			TIMSK&=~(1<<TOIE1);
    064A B789      IN	R24,P39
    064B 7F8B      ANDI	R24,0xFB
    064C BF89      OUT	P39,R24
(0505) 			sound_add++;
    064D 91800060  LDS	R24,0x60
    064F 91900061  LDS	R25,0x61
    0651 9601      ADIW	R24,1
    0652 93900061  STS	0x61,R25
    0654 93800060  STS	0x60,R24
    0656 90200073  LDS	R2,_temp1
    0658 2022      TST	R2
    0659 F009      BEQ	0x065B
    065A CFB7      RJMP	0x0612
(0506) 		}
(0507) 	goto xuanya_car_rst;
    065B CFAB      RJMP	0x0607
    065C 9508      RET
(0508) }
(0509) 
(0510) void remote_car()
(0511) {//遥控车程序
(0512)  
(0513)  port_init();//调用端口初始化函数
_remote_car:
    065D DB6E      RCALL	_port_init
(0514)  
(0515)  work_status = 0x60;//置对应的工作状态标志
    065E E680      LDI	R24,0x60
    065F 9380007D  STS	_work_status,R24
(0516) 
(0517) remote_rst: 
(0518)  PORTA = 0x0F;
    0661 E08F      LDI	R24,0xF
    0662 BB8B      OUT	P1B,R24
(0519)  delay_ms(1000);
    0663 EE08      LDI	R16,0xE8
    0664 E013      LDI	R17,3
    0665 DB7D      RCALL	_delay_ms
(0520) 
(0521)   gzsl=0x88;timers=0;t0_times=0;
    0666 E888      LDI	R24,0x88
    0667 93800067  STS	_gzsl,R24
    0669 2422      CLR	R2
    066A 9220006D  STS	_timers,R2
    066C 92200066  STS	_t0_times,R2
(0522)   CLI(); //disable all interrupts
    066E 94F8      BCLR	7
(0523)   timer0_init();
    066F DC89      RCALL	_timer0_init
(0524) 
(0525)   MCUCR = 0x00;
    0670 2422      CLR	R2
    0671 BE25      OUT	P35,R2
(0526)   GIMSK = 0x00;
    0672 BE2B      OUT	P3B,R2
(0527)   TIMSK|=(1<<TOIE0);
    0673 B789      IN	R24,P39
  

⌨️ 快捷键说明

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