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

📄 sl3010_3.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0132 9508      RET
(0240) 
(0241) //                #       
(0242) //                #
(0243) //                #
(0244) //                #
(0245) //                #    //  delay_time1  转弯时间
(0246) //        # # # # #    //  delay_time2  直行时间
(0247) //      # X       #    //<A>  0x04  delay_time2-50
(0248) //      #   B  C  #    //<B>  0x02  delay_time1+50
(0249) //      #  D  A   #    //<C>  0x08  delay_time1-50
(0250) //      #         #    //<D>  0x01  delay_time2+50
(0251) //        # # # #      // max: 2000   min: 200 
(0252) 
(0253) void remote_auto_time()
(0254) {
(0255)  	  remote_in = PINB & 0x0F;
_remote_auto_time:
    0133 B386      IN	R24,0x16
    0134 708F      ANDI	R24,0xF
    0135 9380007A  STS	_remote_in,R24
(0256)       switch (remote_in)
    0137 2F08      MOV	R16,R24
    0138 2711      CLR	R17
    0139 3000      CPI	R16,0
    013A 0701      CPC	R16,R17
    013B F409      BNE	0x013D
    013C C062      RJMP	0x019F
    013D 3001      CPI	R16,1
    013E E0E0      LDI	R30,0
    013F 071E      CPC	R17,R30
    0140 F409      BNE	0x0142
    0141 C04A      RJMP	0x018C
    0142 3002      CPI	R16,2
    0143 E0E0      LDI	R30,0
    0144 071E      CPC	R17,R30
    0145 F0F1      BEQ	0x0164
    0146 3004      CPI	R16,4
    0147 E0E0      LDI	R30,0
    0148 071E      CPC	R17,R30
    0149 F029      BEQ	0x014F
    014A 3008      CPI	R16,0x8
    014B E0E0      LDI	R30,0
    014C 071E      CPC	R17,R30
    014D F151      BEQ	0x0178
    014E C050      RJMP	0x019F
(0257)       	{//检测遥控器是否有键按下
(0258)       case 0x04:  // < A >
(0259) 		 delay_time2 = delay_time2 - 50;
    014F 91800075  LDS	R24,_delay_time2
    0151 91900076  LDS	R25,_delay_time2+1
    0153 97C2      SBIW	R24,0x32
    0154 93900076  STS	_delay_time2+1,R25
    0156 93800075  STS	_delay_time2,R24
(0260) 	     if(delay_time2 == 50)
    0158 3382      CPI	R24,0x32
    0159 E0E0      LDI	R30,0
    015A 079E      CPC	R25,R30
    015B F009      BEQ	0x015D
    015C C042      RJMP	0x019F
(0261) 		   {delay_time2 = 100;}	 
    015D E684      LDI	R24,0x64
    015E E090      LDI	R25,0
    015F 93900076  STS	_delay_time2+1,R25
    0161 93800075  STS	_delay_time2,R24
(0262)       	break;
    0163 C03B      RJMP	0x019F
(0263)       case 0x02:  // < B >
(0264) 		 delay_time1 = delay_time1 + 50;
    0164 91800077  LDS	R24,_delay_time1
    0166 91900078  LDS	R25,_delay_time1+1
    0168 96C2      ADIW	R24,0x32
    0169 93900078  STS	_delay_time1+1,R25
    016B 93800077  STS	_delay_time1,R24
(0265) 	     if(delay_time1 == 2050)
    016D 3082      CPI	R24,2
    016E E0E8      LDI	R30,0x8
    016F 079E      CPC	R25,R30
    0170 F571      BNE	0x019F
(0266) 		   {delay_time1 = 2000;}	 
    0171 ED80      LDI	R24,0xD0
    0172 E097      LDI	R25,7
    0173 93900078  STS	_delay_time1+1,R25
    0175 93800077  STS	_delay_time1,R24
(0267)       	break;
    0177 C027      RJMP	0x019F
(0268)       case 0x08:  // < C >
(0269) 		 delay_time1 = delay_time1 - 50;
    0178 91800077  LDS	R24,_delay_time1
    017A 91900078  LDS	R25,_delay_time1+1
    017C 97C2      SBIW	R24,0x32
    017D 93900078  STS	_delay_time1+1,R25
    017F 93800077  STS	_delay_time1,R24
(0270) 	     if(delay_time1 == 50)
    0181 3382      CPI	R24,0x32
    0182 E0E0      LDI	R30,0
    0183 079E      CPC	R25,R30
    0184 F4D1      BNE	0x019F
(0271) 		   {delay_time1 = 100;}	 
    0185 E684      LDI	R24,0x64
    0186 E090      LDI	R25,0
    0187 93900078  STS	_delay_time1+1,R25
    0189 93800077  STS	_delay_time1,R24
(0272)       	break;
    018B C013      RJMP	0x019F
(0273)       case 0x01:  // < D >
(0274)          delay_time2 = delay_time2 + 50;
    018C 91800075  LDS	R24,_delay_time2
    018E 91900076  LDS	R25,_delay_time2+1
    0190 96C2      ADIW	R24,0x32
    0191 93900076  STS	_delay_time2+1,R25
    0193 93800075  STS	_delay_time2,R24
(0275) 	     if(delay_time2 == 2050)
    0195 3082      CPI	R24,2
    0196 E0E8      LDI	R30,0x8
    0197 079E      CPC	R25,R30
    0198 F431      BNE	0x019F
(0276) 		   {delay_time2 = 2000;}	 
    0199 ED80      LDI	R24,0xD0
    019A E097      LDI	R25,7
    019B 93900076  STS	_delay_time2+1,R25
    019D 93800075  STS	_delay_time2,R24
(0277)       	break;
(0278)       case 0x00:  // 无按键
(0279) 	     break;
(0280) 		} 
(0281) }
    019F 9508      RET
FILE: E:\icc\iccavr\sl3010\sl3010_3\sl3010_3.c
(0001) /*******************************************/
(0002) /*            广州天河双龙电子公司         */
(0003) /*            http://www.sl.com.cn         */
(0004) /*     020-85510191,87578852,87578872      */
(0005) /*              nikko@sl.com.cn            */
(0006) /*******************************************/
(0007) 
(0008) //遥控器没有按键或者 pd3,pd2,pd1,pd0 短路块全部不接上,全为高电平
(0009) //机器人运行霓虹灯程序。     
(0010) 
(0011) //将 pd0 接低电平,pd3,pd2,pd1 保持高电平,只连接pd0的短路块
(0012) //       或按下遥控器<A>(保持 0.5s)        进入遥控机器人运行环境 
(0013) 
(0014) //将 pd1 接低电平,pd3,pd2,pd0 保持高电平,只连接pd1的短路块
(0015) //       或按下遥控器<B>(保持 0.5s)        寻迹机器人,探测白底黑线,沿黑线行进 
(0016) 
(0017) //将 pd2 接低电平,pd3,pd1,pd0 保持高电平,只连接pd2的短路块
(0018) //       或按下遥控器<C>(保持 0.5s)        机器人避障碍、避悬崖行进 
(0019) 
(0020) //将 pd3 接低电平,pd2,pd1,pd0 保持高电平,只连接pd3的短路块
(0021) //       或按下遥控器<D>(保持 0.5s)        机器人按程序设定路线行走,走四方形,同时演奏音乐 
(0022) 
(0023) //程序等待声控起动运行。
(0024) 
(0025) //将 sl3010.c 文件拷贝到 icc avr 安装目录的<include>文件夹
(0026) //sl3010.c 是sl3010机器人板的子函数库
(0027) //程序中调用此文件后 #include <sl3010.c>
(0028) //可直接调用里面的函数和变量
(0029) 
(0030) #include <io8515v.h>
(0031) #include <macros.h>
(0032) #include <sl3010.c>
(0033) #include <eeprom.h>
(0034) 
(0035) #define xuanya_delayms  300
(0036) #define cny_delayms 50
(0037) #define light_delay 100
(0038) 
(0039) /* 		  音乐数据  	  */
(0040) /* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
(0041) /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
(0042) /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
(0043) /* 高1-F*/								  	
(0044) #pragma data:eeprom
(0045) unsigned char sound[]={ 
(0046) //走进新时代
(0047) 0x68,0x26,0x25,0x23,0x22,0x13,0x12,0x41,0x41,0x41,0x23,0x25,
(0048) 0x28,0x48,0x28,0x29,0x2a,0x29,0x26,0x45,0x45,0x45,0x45,0x68,
(0049) 0x29,0x29,0x28,0x26,0x25,0x46,0x46,0x46,0x25,0x26,0x29,0x43,
(0050) 0x25,0x22,0x23,0x22,0x21,0x42,0x42,0x42,0x42,0x63,0x25,0x26,
(0051) 0x25,0x26,0x25,0x23,0x22,0x13,0x12,0x41,0x23,0x25,0x28,0x28,
(0052) 0x28,0x28,0x29,0x2a,0x2a,0x29,0x46,0x46,0x46,0x46,0x46,0x29,
(0053) 0x2a,0x28,0x28,0x26,0x25,0x26,0x26,0x25,0x43,0x43,0x22,0x42,
(0054) 0x26,0x25,0x23,0x22,0x13,0x12,0x41,0x41,0x41,0x41,
(0055) 						
(0056) 			0x00,0x00
(0057) 					  };
(0058) #pragma data:data							  		  						  
(0059) /*	  		    音阶表				*/	
(0060) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0061) 			    	 	RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0062) /*			  音阶重装常数			*/						
(0063) unsigned int toneconst;								  							   						 				 	 	 
(0064) unsigned int sound_add=0;
(0065) unsigned int delay_time1,delay_time2,led_delayms=600;
(0066) unsigned char temp,temp1;
(0067) unsigned char pa,pb,pc,pd,remote_in,timers,cny_in,cny_times,rst_time,cds,pd_select,remote_select;
(0068) unsigned char gzsl,t0_times;
(0069) const unsigned char led_data[]=
(0070)     {//设置LED广告灯数据表
(0071)      0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0072)      0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0073)      0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0074)      0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0075)      0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0076)      0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0077)      0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0078)      0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0079)      0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0080)      0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0081)      0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,
(0082) 	 
(0083)      0x0a,0x0a
(0084)     };
(0085) 
(0086) //TIMER0 initialisation - prescale:1024
(0087) // desired value: 25mSec
(0088) // actual value: 24.960mSec (0.2%)
(0089) void timer0_init(void)
(0090) {
(0091)  TCCR0 = 0x00; //stop timer
_timer0_init:
    01A0 2422      CLR	R2
    01A1 BE23      OUT	0x33,R2
(0092)  TCNT0 = 0x3D; //set count value
    01A2 E38D      LDI	R24,0x3D
    01A3 BF82      OUT	0x32,R24
(0093)  TCCR0 = 0x05; //start timer
    01A4 E085      LDI	R24,5
    01A5 BF83      OUT	0x33,R24
(0094) }
    01A6 9508      RET
_timer0_ovf_isr:
    01A7 D2C9      RCALL	push_lset
(0095) 
(0096) #pragma interrupt_handler timer0_ovf_isr:8
(0097) void timer0_ovf_isr(void)
(0098) {
(0099)  TCNT0 = 0x3D; //reload counter value
    01A8 E38D      LDI	R24,0x3D
    01A9 BF82      OUT	0x32,R24
(0100)  t0_times++;
    01AA 91800064  LDS	R24,_t0_times
    01AC 5F8F      SUBI	R24,0xFF
    01AD 93800064  STS	_t0_times,R24
(0101)  if(gzsl == 0x88)
    01AF 91800065  LDS	R24,_gzsl
    01B1 3888      CPI	R24,0x88
    01B2 F461      BNE	0x01BF
(0102)    {
(0103)     if(t0_times == 10)
    01B3 91800064  LDS	R24,_t0_times
    01B5 308A      CPI	R24,0xA
    01B6 F441      BNE	0x01BF
(0104)       {
(0105) 	   timers++;
    01B7 9180006C  LDS	R24,_timers
    01B9 5F8F      SUBI	R24,0xFF
    01BA 9380006C  STS	_timers,R24
(0106) 	   t0_times = 0;
    01BC 2422      CLR	R2
    01BD 92200064  STS	_t0_times,R2
(0107)       }
(0108)    }
(0109)  if(gzsl == 0x11)
    01BF 91800065  LDS	R24,_gzsl
    01C1 3181      CPI	R24,0x11
    01C2 F489      BNE	0x01D4
(0110)    {
(0111) 	if(t0_times == delay_time1)  //delay_time1*25ms
    01C3 90200077  LDS	R2,_delay_time1
    01C5 90300078  LDS	R3,_delay_time1+1
    01C7 90400064  LDS	R4,_t0_times
    01C9 2455      CLR	R5
    01CA 1442      CP	R4,R2
    01CB 0453      CPC	R5,R3
    01CC F439      BNE	0x01D4
(0112) 	  {
(0113) 	   t0_times = 0;
    01CD 2422      CLR	R2
    01CE 92200064  STS	_t0_times,R2
(0114) 	   gzsl = 0x22;
    01D0 E282      LDI	R24,0x22
    01D1 93800065  STS	_gzsl,R24
(0115) 	   forward();
    01D3 DEE4      RCALL	_forward
(0116) 	  }
(0117)    } 
(0118)  if(gzsl == 0x22)
    01D4 91800065  LDS	R24,_gzsl
    01D6 3282      CPI	R24,0x22
    01D7 F489      BNE	0x01E9
(0119)    {
(0120) 	if(t0_times == delay_time2)  //delay_time2*25ms
    01D8 90200075  LDS	R2,_delay_time2
    01DA 90300076  LDS	R3,_delay_time2+1
    01DC 90400064  LDS	R4,_t0_times
    01DE 2455      CLR	R5
    01DF 1442      CP	R4,R2
    01E0 0453      CPC	R5,R3
    01E1 F439      BNE	0x01E9
(0121) 	  {
(0122) 	   t0_times = 0;
    01E2 2422      CLR	R2
    01E3 92200064  STS	_t0_times,R2
(0123) 	   gzsl = 0x11;
    01E5 E181      LDI	R24,0x11
    01E6 93800065  STS	_gzsl,R24
(0124) 	   turn_right();
    01E8 DEB6      RCALL	_turn_right
(0125) 	  }
(0126)    } 
(0127) }
    01E9 D29E      RCALL	pop_lset
    01EA 9518      RETI
(0128) 
(0129) void stop_timer0()
(0130) {
(0131) 	CLI();
_stop_timer0:
    01EB 94F8      BCLR	7
(0132) 	TCCR0 = 0x00;//停止timer0
    01EC 2422      CLR	R2
    01ED BE23      OUT	0x33,R2
(0133) 	MCUCR = 0x00;
    01EE BE25      OUT	0x35,R2
(0134)     GIMSK = 0x00;
    01EF BE2B      OUT	0x3B,R2
(0135)     TIMSK = 0x00;
    01F0 BE29      OUT	0x39,R2
(0136)     SEI();
    01F1 9478      BSET	7
(0137) }
    01F2 9508      RET
_timer1_ovf_isr:
    01F3 922A      ST	R2,-Y
    01F4 923A      ST	R3,-Y
    01F5 938A      ST	R24,-Y
    01F6 B62F      IN	R2,0x3F
    01F7 922A      ST	R2,-Y
(0138) 
(0139) /*******************************************/
(0140) /*              电子音乐演示程序           */
(0141) /*******************************************/
(0142) //使用说明:音乐输出端口:PORTC.0,音乐数据存放
(0143) //于AT90S8515 的EEPROM存贮器中。
(0144) // 可以用并口下载软件写入新的音乐文件
(0145) //PA口为音乐灯,当不同的音乐节奏,点亮不同的灯。
(0146) 
(0147) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0148) void timer1_ovf_isr(void)
(0149) 	 {
(0150) 	  TCNT1=toneconst;
    01F8 90200073  LDS	R2,_toneconst
    01FA 90300074  LDS	R3,_toneconst+1
    01FC BC3D      OUT	0x2D,R3
    01FD BC2C      OUT	0x2C,R2
(0151) 	  PORTC^=1;
    01FE E081      LDI	R24,1
    01FF B225      IN	R2,0x15
    0200 2628      EOR	R2,R24
    0201 BA25      OUT	0x15,R2
(0152) 	 }	 	 
    0202 9029      LD	R2,Y+
    0203 BE2F      OUT	0x3F,R2
    0204 9189      LD	R24,Y+
    0205 9039      LD	R3,Y+
    0206 9029      LD	R2,Y+
    0207 9518      RETI
(0153) 
(0154) void music_car(void)
(0155)  	 {
(0156) 	  TCCR1A = 0x00;
_music_car:
    0208 2422      CLR	R2
    0209 BC2F      OUT	0x2F,R2
(0157) 	  TCCR1B =(1<<CS11);//8分频
    020A E082      LDI	R24,2
    020B BD8E      OUT	0x2E,R24
(0158) 	  temp1=EEPROMread((int)&sound[sound_add]);
    020C E081      LDI	R24,1
    020D E090      LDI	R25,0
    020E 91000060  LDS	R16,0x60
    0210 91100061  LDS	R17,0x61
    0212 0F08      ADD	R16,R24
    0213 1F19      ADC	R17,R25
    0214 D29E      RCALL	_EEPROMread
    0215 93000071  STS	_temp1,R16
    0217 C04B      RJMP	0x0263
(0159) 	  while(temp1!=0)
(0160)  	  		{
(0161) 			temp=temp1; 
    0218 90200071  LDS	R2,_temp1
    021A 92200072  STS	_temp,R2
(0162) 			temp&=0x0f;
    021C 2D82      MOV	R24,R2
    021D 708F      ANDI	R24,0xF
    021E 93800072  STS	_temp,R24
(0163) /*
(0164) 			  //PA口为音乐灯
(0165) 			  if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
(0166)               if(temp==5 || temp==6){PORTA = 0xfc;}
(0167)               if(temp==7 || temp==8 ){PORTA = 0xf8;}
(0168)               if(temp==9){PORTA = 0xf0;}
(0169)               if(temp==10){PORTA = 0xe0;}
(0170)               if(temp==11){PORTA = 0xc0;}
(0171) 			  if(temp==12){PORTA = 0x80;}
(0172)               if(temp==13 || temp==14 || temp==15){PORTA = 0x00;}
(0173) */
(0174) 			if(temp!=0)
    0220 2E28      MOV	R2,R24
    0221 2388      TST	R24
    0222 F0B9      BEQ	0x023A
(0175) 			  {
(0176) 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    0223 B789      IN	R24,0x39
    0224 6880      ORI	R24,0x80
    0225 BF89      OUT	0x39,R24
(0177) 			   temp--;			   
    0226 2D82      MOV	R24,R2
    0227 5081      SUBI	R24,1
    0228 93800072  STS	_temp,R24
(0178)         	   toneconst=TONETABLE[temp];
    022A E18A      LDI	R24,0x1A
    022B E090      LDI	R25,0
    022C 91000072  LDS	R16,_temp
    022E 2711      CLR	R17
    022F 0F00      LSL	R16
    0230 1F11      ROL	R17
    0231 0F08      ADD	R16,R24
    0232 1F19      ADC	R17,R25
    0233 D22F      RCALL	lpm16
    0234 93100074  STS	_toneconst+1,R17
    0236 93000073  STS	_toneconst,R16
(0179) 			   TCNT1=toneconst;
    0238 BD1D      OUT	0x2D,R17
    0239 BD0C      OUT	0x2C,R16
(0180)  			  }
(0181) 			temp=temp1;
    023A 90200071  LDS	R2,_temp1
    023C 92200072  STS	_temp,R2
(0182) 			temp>>=4;
    023E 2D82      MOV	R24,R2
    023F 9582      SWAP	R24
    0240 708F      ANDI	R24,0xF
    0241 93800072  STS	_temp,R24
(0183) 			temp&=0x0f;
    0243 708F      ANDI	R24,0xF
    0244 93800072  STS	_temp,R24
(0184) 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    0246 2F28      MOV	R18,R24
    0247 2733      CLR	R19
    0248 E801      LDI	R16,0x81
    0249 E010      LDI	R17,0
    024A D254      RCALL	mpy16s
    024B DE45      RCALL	_delay_ms
(0185) 			TIMSK&=~(1<<TOIE1);
    024C B789      IN	R24,0x39
    024D 778F      ANDI	R24,0x7F
    024E BF89      OUT	0x39,R24
(0186) 			sound_add++;
    024F 91800060  LDS	R24,0x60
    0251 91900061  LDS	R25,0x61
    0253 9601      ADIW	R24,1
    0254 93900061  STS	0x61,R25
    0256 93800060  STS	0x60,R24

⌨️ 快捷键说明

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