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

📄 sl3010_4.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    01A8 E5CF      LDI	R28,0x5F
    01A9 E0D2      LDI	R29,2
    01AA BFCD      OUT	0x3D,R28
    01AB BFDE      OUT	0x3E,R29
    01AC 51C0      SUBI	R28,0x10
    01AD 40D0      SBCI	R29,0
    01AE EA0A      LDI	R16,0xAA
    01AF 8308      STD	Y+0,R16
    01B0 2400      CLR	R0
    01B1 E6E4      LDI	R30,0x64
    01B2 E0F0      LDI	R31,0
    01B3 E010      LDI	R17,0
    01B4 38E0      CPI	R30,0x80
    01B5 07F1      CPC	R31,R17
    01B6 F011      BEQ	0x01B9
    01B7 9201      ST	R0,Z+
    01B8 CFFB      RJMP	0x01B4
    01B9 8300      STD	Z+0,R16
    01BA E4EC      LDI	R30,0x4C
    01BB E0F3      LDI	R31,3
    01BC E6A0      LDI	R26,0x60
    01BD E0B0      LDI	R27,0
    01BE E013      LDI	R17,3
    01BF 35E0      CPI	R30,0x50
    01C0 07F1      CPC	R31,R17
    01C1 F021      BEQ	0x01C6
    01C2 95C8      LPM
    01C3 9631      ADIW	R30,1
    01C4 920D      ST	R0,X+
    01C5 CFF9      RJMP	0x01BF
    01C6 D55F      RCALL	_main
_exit:
    01C7 CFFF      RJMP	_exit
FILE: E:\icc\include\sl3010.c
(0001) //sl3010.c    sl3010机器人常用函数库
(0002) //#include <io8515v.h>
(0003) 
(0004) // 更新日期: 2003.03.18
(0005) 
(0006) /*
(0007) void port_init();         //PA,PB,PC,PD 初始化
(0008) void delay_us(int time);  //微妙级延时
(0009) void delay_ms(unsigned int time);//毫秒级延时
(0010) void sw_touch();          //检测轻触开关
(0011) void mic_startup();       //等待声控启动
(0012) void remote_auto_time();  //遥控器控制直行和转弯时间
(0013) void turn_right();        //右转
(0014) void turn_left();         //左转
(0015) void turn_right_s();      //慢速右转
(0016) void turn_left_s();       //慢速左转
(0017) void backward();          //后退
(0018) void forward();           //前行
(0019) void stop();              //停止运动
(0020) */
(0021) /*
(0022) sl-3010 运行不同的程序其对应的工作状态由 work_status 变量指示
(0023) 对应数据表如下:
(0024)   程序名            程序功能简介        work_status 值
(0025) cny_car 程序    白底黑线,探黑线行走        0x10
(0026) xuanya_car      走悬崖,避障碍              0x20
(0027) music_car       音乐车                      0x30
(0028) led_car         霓虹灯                      0x40
(0029) auto_car1       自走车                      0x51
(0030) auto_car8       走<8>字                     0x50
(0031) remote_car      智能遥控机器人              0x60
(0032) trace_light     追光行进机器人              0x70
(0033) remote_light    遥控和追光                  0x67
(0034) ……  
(0035) */
(0036) //  电机驱动信号                       led灯指示电机状态 
(0037) //PORTD = 0xA0;//前行    //1010 0000//PORTA = 0xC3;//1100,0011
(0038) //PORTD = 0x90;//快速左转//1001 0000//PORTA = 0x33;//0011,0011
(0039) //PORTD = 0x80;//慢速左转//1000 0000//PORTA = 0xF3;//1111,0011
(0040) //PORTD = 0x60;//快速右转//0110 0000//PORTA = 0xCC;//1100,1100
(0041) //PORTD = 0x20;//慢速右转//0010 0000//PORTA = 0xCF;//1100,1111
(0042) //PORTD = 0x50;//后退    //0101 0000//PORTA = 0x3C;//0011,1100
(0043) 
(0044) //#define A 0x04      //0b0000,0100
(0045) //#define B 0x02      //0b0000,0010
(0046) //#define C 0x08      //0b0000,1000
(0047) //#define D 0x01      //0b0000,0001
(0048) 
(0049) 
(0050) /*		 音阶常数=65536-8000000/8/2/f	  */
(0051) #define DO	64580	//523
(0052) #define RE	64684	//587
(0053) #define	MI	64777	//659
(0054) #define FA	64820	//698
(0055) #define	SO	64898	//784
(0056) #define LA	64968	//880
(0057) #define	TI	65030	//988                	                        	
(0058) #define DO_H	65058	//1046
(0059) #define RE_H	65110	//1174
(0060) #define MI_H	65157	//1318
(0061) #define FA_H	65178	//1397
(0062) #define SO_H	65217	//1568
(0063) #define LA_H	65252	//1760
(0064) #define TI_H	65283	//1976
(0065) #define DO_HH	65297	//2093
(0066) /*		 		 位操作宏  				*/
(0067) #define set_bit(x,y)	(x|=(1<<y))
(0068) #define clr_bit(x,y)	(x&=~(1<<y))
(0069) #define get_bit(x,y)	(x&(1<<y))
(0070) 
(0071) #define fosc 8000000
(0072) #define baud 19200
(0073) #define device 0x38
(0074) #define touch_time 250
(0075) 
(0076) unsigned char work_status;
(0077) unsigned char sw_in,remote_in;
(0078) unsigned char mic_in;
(0079) unsigned int delay_time1,delay_time2;
(0080) unsigned char remote_in;
(0081)  
(0082) void port_init(void)
(0083) {//PA,PB,PC,PD 初始化
(0084)  DDRA  = 0xFF;PORTA = 0xFF;  //PA口输出,接8路LED指示灯
_port_init:
    01C8 EF8F      LDI	R24,0xFF
    01C9 BB8A      OUT	0x1A,R24
    01CA BB8B      OUT	0x1B,R24
(0085)  DDRB  = 0x80;PORTB = 0xFF;  //PB7输出口,PB6~PB4输入(轻触开关)PB4~PB0输入(遥控器)
    01CB E880      LDI	R24,0x80
    01CC BB87      OUT	0x17,R24
    01CD EF8F      LDI	R24,0xFF
    01CE BB88      OUT	0x18,R24
(0086)  DDRC  = 0x01;PORTC = 0xFF;  //PC0蜂鸣器输出,PC7~PC1检测信号输入端
    01CF E081      LDI	R24,1
    01D0 BB84      OUT	0x14,R24
    01D1 EF8F      LDI	R24,0xFF
    01D2 BB85      OUT	0x15,R24
(0087)  DDRD  = 0xF0;PORTD = 0xFF;  //PD7~PD4输出驱动电机,PD3~PD0输入
    01D3 EF80      LDI	R24,0xF0
    01D4 BB81      OUT	0x11,R24
    01D5 EF8F      LDI	R24,0xFF
    01D6 BB82      OUT	0x12,R24
(0088) }
    01D7 9508      RET
(0089)  
(0090) void delay_us(int time)
(0091) {//微秒级延时程序     
(0092)  do
(0093)  {
(0094)   time--;
_delay_us:
  time                 --> R16
    01D8 5001      SUBI	R16,1
    01D9 4010      SBCI	R17,0
(0095)  }	
(0096)   while (time>1);
    01DA E081      LDI	R24,1
    01DB E090      LDI	R25,0
    01DC 1780      CP	R24,R16
    01DD 0791      CPC	R25,R17
    01DE F3CC      BLT	0x01D8
(0097) }	  
    01DF 9508      RET
_delay_ms:
  time                 --> R20
    01E0 D68F      RCALL	push_gset1
    01E1 2F40      MOV	R20,R16
    01E2 2F51      MOV	R21,R17
(0098) 
(0099) void delay_ms(unsigned int time)
(0100) {//毫秒级延时程序
    01E3 C005      RJMP	0x01E9
(0101)  while(time!=0)
(0102)  {		
(0103)   delay_us(1000);
    01E4 EE08      LDI	R16,0xE8
    01E5 E013      LDI	R17,3
    01E6 DFF1      RCALL	_delay_us
(0104)   time--;
    01E7 5041      SUBI	R20,1
    01E8 4050      SBCI	R21,0
    01E9 3040      CPI	R20,0
    01EA 0745      CPC	R20,R21
    01EB F7C1      BNE	0x01E4
(0105)  }
(0106) }		
    01EC D686      RCALL	pop_gset1
    01ED 9508      RET
(0107) 
(0108) void turn_right()//右转
(0109)     {
(0110) 		 PORTD = 0x60;   //右转//0110 0000   
_turn_right:
    01EE E680      LDI	R24,0x60
    01EF BB82      OUT	0x12,R24
(0111) 		 PORTA = 0xCC;     //1100,1100 指示灯
    01F0 EC8C      LDI	R24,0xCC
    01F1 BB8B      OUT	0x1B,R24
(0112)     }
    01F2 9508      RET
(0113) 
(0114) void turn_left()//左转
(0115)     {
(0116)          PORTD = 0x90;   //左转//1001 0000   
_turn_left:
    01F3 E980      LDI	R24,0x90
    01F4 BB82      OUT	0x12,R24
(0117) 		 PORTA = 0x33;     //0011,0011 指示灯
    01F5 E383      LDI	R24,0x33
    01F6 BB8B      OUT	0x1B,R24
(0118)     }
    01F7 9508      RET
(0119) void turn_right_s()      //慢速右转
(0120)     {
(0121)          PORTD = 0x20;   //慢速右转//0010 0000
_turn_right_s:
    01F8 E280      LDI	R24,0x20
    01F9 BB82      OUT	0x12,R24
(0122) 		 PORTA = 0xCF;   //1100,1111
    01FA EC8F      LDI	R24,0xCF
    01FB BB8B      OUT	0x1B,R24
(0123)     }
    01FC 9508      RET
(0124) 
(0125) void turn_left_s()       //慢速左转
(0126)     {
(0127)          PORTD = 0x80;   //慢速左转//1000 0000
_turn_left_s:
    01FD E880      LDI	R24,0x80
    01FE BB82      OUT	0x12,R24
(0128) 		 PORTA = 0xF3;     //1111,0011
    01FF EF83      LDI	R24,0xF3
    0200 BB8B      OUT	0x1B,R24
(0129)     }
    0201 9508      RET
(0130) 
(0131) void backward()//后退
(0132)     {
(0133) 		 PORTD = 0x50;   //后退//0101 0000   
_backward:
    0202 E580      LDI	R24,0x50
    0203 BB82      OUT	0x12,R24
(0134) 		 PORTA = 0x3C;     //0011,1100 指示灯
    0204 E38C      LDI	R24,0x3C
    0205 BB8B      OUT	0x1B,R24
(0135)     }
    0206 9508      RET
(0136) 
(0137) void forward()//前行
(0138)     {
(0139) 		 PORTD = 0xA0;   //前行//1010 0000   
_forward:
    0207 EA80      LDI	R24,0xA0
    0208 BB82      OUT	0x12,R24
(0140) 		 PORTA = 0xC3;     //1100,0011
    0209 EC83      LDI	R24,0xC3
    020A BB8B      OUT	0x1B,R24
(0141)     }
    020B 9508      RET
(0142) 	
(0143) void stop()//停止运动
(0144)     {
(0145) 		 PORTD = 0xff;   //停止   
_stop:
    020C EF8F      LDI	R24,0xFF
    020D BB82      OUT	0x12,R24
(0146) 		 PORTA = 0xff;     //
    020E BB8B      OUT	0x1B,R24
(0147) 	}
    020F 9508      RET
(0148) 
(0149) //左边       X PC4 X       右边
(0150) //        X X X X X X X
(0151) //       8 7 6 5 4 3 2 1
(0152) //     PB4  X X X X X  PB6 
(0153) //         | X  X  X | 
(0154) //         | X  X  X | 
(0155) //         | X  X  X |   
(0156) //     |$||- X  X  X -||$|
(0157) //     |$|| XXXXXXXXX ||$|
(0158) //    #|$||XXXXXXXXXXX||$|#
(0159) //     |$||XXX     XXX||$|
(0160) //     |$||___ PB5 ___||$|
(0161) 
(0162) void sw_touch()
(0163) {
(0164)  sw_in = PINC & 0x10;
_sw_touch:
    0210 B383      IN	R24,0x13
    0211 7180      ANDI	R24,0x10
    0212 9380007E  STS	_sw_in,R24
(0165)  if(sw_in == 0x00)
    0214 2388      TST	R24
    0215 F4C9      BNE	0x022F
(0166)    {//后退,左转                   首部开关接触
(0167)        backward();          //后退
    0216 DFEB      RCALL	_backward
(0168)        delay_ms(touch_time);
    0217 EF0A      LDI	R16,0xFA
    0218 E010      LDI	R17,0
    0219 DFC6      RCALL	_delay_ms
(0169) 	   
(0170) 	   if(work_status == 0x70)
    021A 9180007F  LDS	R24,_work_status
    021C 3780      CPI	R24,0x70
    021D F469      BNE	0x022B
(0171) 	     {//追光机器人,首部开关接触,停止运动,PA 口led 流动闪烁
(0172) 		  stop();
    021E DFED      RCALL	_stop
    021F C00A      RJMP	0x022A
(0173) 		  while(1)
(0174) 		    {
(0175) 			 PORTA = 0x55;
    0220 E585      LDI	R24,0x55
    0221 BB8B      OUT	0x1B,R24
(0176) 		     delay_ms(250);
    0222 EF0A      LDI	R16,0xFA
    0223 E010      LDI	R17,0
    0224 DFBB      RCALL	_delay_ms
(0177) 		     PORTA = 0xAA;
    0225 EA8A      LDI	R24,0xAA
    0226 BB8B      OUT	0x1B,R24
(0178) 		     delay_ms(250);
    0227 EF0A      LDI	R16,0xFA
    0228 E010      LDI	R17,0
    0229 DFB6      RCALL	_delay_ms
    022A CFF5      RJMP	0x0220
(0179) 			}
(0180) 		 }
(0181) 	   
(0182)        turn_left();         //左转
    022B DFC7      RCALL	_turn_left
(0183)        delay_ms(touch_time);
    022C EF0A      LDI	R16,0xFA
    022D E010      LDI	R17,0
    022E DFB1      RCALL	_delay_ms
(0184)    }
(0185)  
(0186)  sw_in = PINB & 0x70;
    022F B386      IN	R24,0x16
    0230 7780      ANDI	R24,0x70
    0231 9380007E  STS	_sw_in,R24
(0187)  if(sw_in == 0x50)// 0b 0101,0000  尾部开关接触 
    0233 3580      CPI	R24,0x50
    0234 F441      BNE	0x023D
(0188)    {//前行,左转
(0189) 	   forward();           //前行
    0235 DFD1      RCALL	_forward
(0190)        delay_ms(touch_time);
    0236 EF0A      LDI	R16,0xFA
    0237 E010      LDI	R17,0
    0238 DFA7      RCALL	_delay_ms
(0191)        
(0192) 	   turn_left();         //左转
    0239 DFB9      RCALL	_turn_left
(0193)        delay_ms(touch_time);
    023A EF0A      LDI	R16,0xFA
    023B E010      LDI	R17,0
    023C DFA3      RCALL	_delay_ms
(0194)    }
(0195)  if(sw_in == 0x30)// 0b 0011,0000  右侧开关接触
    023D 9180007E  LDS	R24,_sw_in
    023F 3380      CPI	R24,0x30
    0240 F441      BNE	0x0249
(0196)    {//后退,左转
(0197)        backward();          //后退
    0241 DFC0      RCALL	_backward
(0198)        delay_ms(touch_time);
    0242 EF0A      LDI	R16,0xFA
    0243 E010      LDI	R17,0
    0244 DF9B      RCALL	_delay_ms
(0199)        
(0200) 	   turn_left();         //左转
    0245 DFAD      RCALL	_turn_left
(0201)        delay_ms(touch_time);
    0246 EF0A      LDI	R16,0xFA

⌨️ 快捷键说明

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