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

📄 sl3010.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module sl3010.c
	.area text(rom, con, rel)
	.dbfile E:\icc\include\sl3010.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 81
; //sl3010.c    sl3010机器人常用函数库
; 
; // 更新日期: 2003.03.18
; 
; /*
; void port_init();         //PA,PB,PC,PD 初始化
; void delay_us(int time);  //微妙级延时
; void delay_ms(unsigned int time);//毫秒级延时
; void sw_touch();          //检测轻触开关
; void mic_startup();       //等待声控启动
; void remote_auto_time();  //遥控器控制直行和转弯时间
; void turn_right();        //右转
; void turn_left();         //左转
; void turn_right_s();      //慢速右转
; void turn_left_s();       //慢速左转
; void backward();          //后退
; void forward();           //前行
; void stop();              //停止运动
; */
; /*
; sl-3010 运行不同的程序其对应的工作状态由 work_status 变量指示
; 对应数据表如下:
;   程序名            程序功能简介        work_status 值
; cny_car 程序    白底黑线,探黑线行走        0x10
; xuanya_car      走悬崖,避障碍              0x20
; music_car       音乐车                      0x30
; led_car         霓虹灯                      0x40
; auto_car1       自走车                      0x51
; auto_car8       走<8>字                     0x50
; remote_car      智能遥控机器人              0x60
; trace_light     追光行进机器人              0x70
; remote_light    遥控和追光                  0x67
; ……  
; */
; //  电机驱动信号                       led灯指示电机状态 
; //PORTD = 0xA0;//前行    //1010 0000//PORTA = 0xC3;//1100,0011
; //PORTD = 0x90;//快速左转//1001 0000//PORTA = 0x33;//0011,0011
; //PORTD = 0x80;//慢速左转//1000 0000//PORTA = 0xF3;//1111,0011
; //PORTD = 0x60;//快速右转//0110 0000//PORTA = 0xCC;//1100,1100
; //PORTD = 0x20;//慢速右转//0010 0000//PORTA = 0xCF;//1100,1111
; //PORTD = 0x50;//后退    //0101 0000//PORTA = 0x3C;//0011,1100
; 
; //#define A 0x04      //0b0000,0100
; //#define B 0x02      //0b0000,0010
; //#define C 0x08      //0b0000,1000
; //#define D 0x01      //0b0000,0001
; 
; 
; #include <io8515v.h>
; 
; /*		 音阶常数=65536-8000000/8/2/f	  */
; #define DO	64580	//523
; #define RE	64684	//587
; #define	MI	64777	//659
; #define FA	64820	//698
; #define	SO	64898	//784
; #define LA	64968	//880
; #define	TI	65030	//988                	                        	
; #define DO_H	65058	//1046
; #define RE_H	65110	//1174
; #define MI_H	65157	//1318
; #define FA_H	65178	//1397
; #define SO_H	65217	//1568
; #define LA_H	65252	//1760
; #define TI_H	65283	//1976
; #define DO_HH	65297	//2093
; /*		 		 位操作宏  				*/
; #define set_bit(x,y)	(x|=(1<<y))
; #define clr_bit(x,y)	(x&=~(1<<y))
; #define get_bit(x,y)	(x&(1<<y))
; 
; #define fosc 8000000
; #define baud 19200
; #define device 0x38
; 
; #define touch_time 250
; 
; unsigned char work_status;
;  
; void port_init(void)
; {//PA,PB,PC,PD 初始化
	.dbline 82
;  DDRA  = 0xFF;PORTA = 0xFF;  //PA口输出,接8路LED指示灯
	ldi R24,255
	out 0x1a,R24
	.dbline 82
	out 0x1b,R24
	.dbline 83
;  DDRB  = 0x80;PORTB = 0xFF;  //PB7输出口,PB6~PB4输入(轻触开关)PB4~PB0输入(遥控器)
	ldi R24,128
	out 0x17,R24
	.dbline 83
	ldi R24,255
	out 0x18,R24
	.dbline 84
;  DDRC  = 0x01;PORTC = 0xFF;  //PC0蜂鸣器输出,PC7~PC1检测信号输入端
	ldi R24,1
	out 0x14,R24
	.dbline 84
	ldi R24,255
	out 0x15,R24
	.dbline 85
;  DDRD  = 0xF0;PORTD = 0xFF;  //PD7~PD4输出驱动电机,PD3~PD0输入
	ldi R24,240
	out 0x11,R24
	.dbline 85
	ldi R24,255
	out 0x12,R24
	.dbline -2
	.dbline 86
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 89
;  
; void delay_us(int time)
; {//微秒级延时程序     
L3:
	.dbline 91
;  do
;  {
	.dbline 92
;   time--;
	subi R16,1
	sbci R17,0
	.dbline 93
;  }	
L4:
	.dbline 94
;   while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L3
	.dbline -2
	.dbline 95
; }	  
L2:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	rcall push_gset1
	mov R20,R16
	mov R21,R17
	.dbline -1
	.dbline 98
; 
; void delay_ms(unsigned int time)
; {//毫秒级延时程序
	rjmp L8
L7:
	.dbline 100
	.dbline 101
	ldi R16,1000
	ldi R17,3
	rcall _delay_us
	.dbline 102
	subi R20,1
	sbci R21,0
	.dbline 103
L8:
	.dbline 99
;  while(time!=0)
	cpi R20,0
	cpc R20,R21
	brne L7
X0:
	.dbline -2
	.dbline 104
;  {		
;   delay_us(1000);
;   time--;
;  }
; }		
L6:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e turn_right _turn_right fV
	.even
_turn_right::
	.dbline -1
	.dbline 107
; 
; void turn_right()//右转
;     {
	.dbline 108
; 		 PORTD = 0x60;   //右转//0110 0000   
	ldi R24,96
	out 0x12,R24
	.dbline 109
; 		 PORTA = 0xCC;     //1100,1100 指示灯
	ldi R24,204
	out 0x1b,R24
	.dbline -2
	.dbline 110
;     }
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e turn_left _turn_left fV
	.even
_turn_left::
	.dbline -1
	.dbline 113
; 
; void turn_left()//左转
;     {
	.dbline 114
;          PORTD = 0x90;   //左转//1001 0000   
	ldi R24,144
	out 0x12,R24
	.dbline 115
; 		 PORTA = 0x33;     //0011,0011 指示灯
	ldi R24,51
	out 0x1b,R24
	.dbline -2
	.dbline 116
;     }
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e turn_right_s _turn_right_s fV
	.even
_turn_right_s::
	.dbline -1
	.dbline 118
; void turn_right_s()      //慢速右转
;     {
	.dbline 119
;          PORTD = 0x20;   //慢速右转//0010 0000
	ldi R24,32
	out 0x12,R24
	.dbline 120
; 		 PORTA = 0xCF;   //1100,1111
	ldi R24,207
	out 0x1b,R24
	.dbline -2
	.dbline 121
;     }
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e turn_left_s _turn_left_s fV
	.even
_turn_left_s::
	.dbline -1
	.dbline 124
; 
; void turn_left_s()       //慢速左转
;     {
	.dbline 125
;          PORTD = 0x80;   //慢速左转//1000 0000
	ldi R24,128
	out 0x12,R24
	.dbline 126
; 		 PORTA = 0xF3;     //1111,0011
	ldi R24,243
	out 0x1b,R24
	.dbline -2
	.dbline 127
;     }
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e backward _backward fV
	.even
_backward::
	.dbline -1
	.dbline 130
; 
; void backward()//后退
;     {
	.dbline 131
; 		 PORTD = 0x50;   //后退//0101 0000   
	ldi R24,80
	out 0x12,R24
	.dbline 132
; 		 PORTA = 0x3C;     //0011,1100 指示灯
	ldi R24,60
	out 0x1b,R24
	.dbline -2
	.dbline 133
;     }
L14:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e forward _forward fV
	.even
_forward::
	.dbline -1
	.dbline 136
; 
; void forward()//前行
;     {
	.dbline 137
; 		 PORTD = 0xA0;   //前行//1010 0000   
	ldi R24,160
	out 0x12,R24
	.dbline 138
; 		 PORTA = 0xC3;     //1100,0011
	ldi R24,195
	out 0x1b,R24
	.dbline -2
	.dbline 139
;     }
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e stop _stop fV
	.even
_stop::
	.dbline -1
	.dbline 142
; 	
; void stop()//停止运动
;     {
	.dbline 143
; 		 PORTD = 0xff;   //停止   
	ldi R24,255
	out 0x12,R24
	.dbline 144
; 		 PORTA = 0xff;     //
	out 0x1b,R24
	.dbline -2
	.dbline 145
; 	}
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e sw_touch _sw_touch fV
;      remote_in -> R22
;          sw_in -> R20
	.even
_sw_touch::
	rcall push_gset2
	.dbline -1
	.dbline 161
; 
; //左边       X PC4 X       右边
; //        X X X X X X X
; //       8 7 6 5 4 3 2 1
; //     PB4  X X X X X  PB6 
; //         | X  X  X | 
; //         | X  X  X | 
; //         | X  X  X |   
; //     |$||- X  X  X -||$|
; //     |$|| XXXXXXXXX ||$|
; //    #|$||XXXXXXXXXXX||$|#
; //     |$||XXX     XXX||$|
; //     |$||___ PB5 ___||$|
; 
; void sw_touch()
; {
	.dbline 163
;  unsigned char sw_in,remote_in;
;  DDRC = 0x01;PORTC = 0xFF;//PC4
	ldi R24,1
	out 0x14,R24
	.dbline 163
	ldi R24,255
	out 0x15,R24
	.dbline 164
;  DDRB = 0x80;PORTB = 0xFF;//PB4,PB5,PB6
	ldi R24,128
	out 0x17,R24
	.dbline 164
	ldi R24,255
	out 0x18,R24
	.dbline 166
;  
;  sw_in = PINC & 0x10;
	in R20,0x13
	andi R20,16
	.dbline 167
;  if(sw_in == 0x00)
	brne L18
	.dbline 168
;    {//后退,左转                   首部开关接触
	.dbline 169
;        backward();          //后退
	rcall _backward
	.dbline 170
;        delay_ms(touch_time);
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 172
; 	   
; 	   if(work_status == 0x70)
	lds R24,_work_status
	cpi R24,112
	brne L20
	.dbline 173
; 	     {//追光机器人,首部开关接触,停止运动,PA 口led 流动闪烁
	.dbline 174
; 		  stop();
	rcall _stop
	rjmp L23
L22:
	.dbline 176
	.dbline 177
	ldi R24,85
	out 0x1b,R24
	.dbline 178
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 179
	ldi R24,170

⌨️ 快捷键说明

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