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

📄 remote_light.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module remote_light.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
; //追光机器人   和    遥控机器人程序
; 
; //将 pd0 接低电平,pd3,pd2,pd1 保持高电平
; //       或按下遥控器<A>(保持 0.5s)        进入遥控机器人运行环境 
; 
; //将 pd1 接低电平,pd3,pd2,pd0 保持高电平
; //       或按下遥控器<B>(保持 0.5s)        进入追光机器人运行环境 
; 
; //将  sl3010.c 文件拷贝到 icc avr 安装目录的<include>文件夹
; //sl3010.c 是sl3010机器人的子函数库
; //程序中调用此文件后 #include <sl3010.c>
; //可直接调用里面的函数和变量
; /*
; 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();              //停止运动
; */
; 
; //更新日期 2003.03.17
; 
; #include <io8515v.h>
; #include <macros.h>
; #include <sl3010.c>  //调用sl3010小车的子函数库
; 
; #define light_delay 100
; 
; unsigned char cds;
; 
; void remote_car()
; {//遥控车程序
;  unsigned char remote_in,led,timers;
;  
;      led = 0x00;
; 	 for(timers=0;timers<7;timers++)
; 	    {//8 LED 整体亮灭闪烁
; 	     PORTA = led;
; 	     delay_ms(500);
; 		 led = ~led;
; 		}
;  
;  work_status = 0x60;//置对应的工作状态标志
;  
;  mic_startup();//等待声控启动函数
;  
;  while(1)
;      {
; 	  
; 	  sw_touch();//检测轻触开关
; 	  
; 	  remote_in = PINB & 0x0F;
;       switch (remote_in)
;       	{//检测遥控器是否有键按下
;       case 0x04:  // < A >
; 		 turn_right();        //右转
;       	break;
;       case 0x02:  // < B >
; 		 backward();          //后退
;       	break;
;       case 0x08:  // < C >
; 		 stop();              //停止运动
;       	break;
;       case 0x01:  // < D >
;          turn_left();         //左转
;       	break;
;       case 0x00:
; 		 forward();           //前行
;       	break;
;       	}
; 	  delay_ms(100);
; 	 }
; }
	.dbline 82
; 
	ldi R24,255
	out 0x1a,R24
	.dbline 82
	out 0x1b,R24
	.dbline 83
; void trace_light()
	ldi R24,128
	out 0x17,R24
	.dbline 83
	ldi R24,255
	out 0x18,R24
	.dbline 84
; {
	ldi R24,1
	out 0x14,R24
	.dbline 84
	ldi R24,255
	out 0x15,R24
	.dbline 85
;  unsigned char cds,led,timers;
	ldi R24,240
	out 0x11,R24
	.dbline 85
	ldi R24,255
	out 0x12,R24
	.dbline -2
	.dbline 86
;      led = 0xc3;
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 89
; 	 for(timers=0;timers<9;timers++)
; 	    {//8 LED 整体亮灭闪烁
; 	     PORTA = led;
L3:
	.dbline 91
; 	     delay_ms(500);
; 		 led = ~led;
	.dbline 92
; 		}
	subi R16,1
	sbci R17,0
	.dbline 93
;  
L4:
	.dbline 94
;  work_status = 0x70;  //置对应的工作状态标志
	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
;  mic_startup();       //等待声控启动
;  
;  while(1)
	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
;     {
	cpi R20,0
	cpc R20,R21
	brne L7
X0:
	.dbline -2
	.dbline 104
; 	 sw_touch();          //检测轻触开关
; 	
; 	 cds = PINC & 0x06; //0b0000,0110
; 
; 	 if(cds == 0x00)    //左右两侧都感测到光
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
; 	   {//直行
; 	    forward();
; 		delay_ms(light_delay);  //延时
	.dbline 108
; 	   } 
	ldi R24,96
	out 0x12,R24
	.dbline 109
; 	 if(cds == 0x02)    //0b0000,0010___pc2(右侧)感测到光
	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
; 	    turn_right_s();
; 		delay_ms(light_delay);  //延时
; 	   }
	.dbline 114
; 	 if(cds == 0x04)    //0b0000,0100___pc1(左侧)感测到光
	ldi R24,144
	out 0x12,R24
	.dbline 115
; 	   {//慢速左转
	ldi R24,51
	out 0x1b,R24
	.dbline -2
	.dbline 116
; 	    turn_left_s();
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e turn_right_s _turn_right_s fV
	.even
_turn_right_s::
	.dbline -1
	.dbline 118
; 		delay_ms(light_delay);  //延时
; 	   }
	.dbline 119
; 	 if(cds == 0x06)
	ldi R24,32
	out 0x12,R24
	.dbline 120
; 	   {//停止动作
	ldi R24,207
	out 0x1b,R24
	.dbline -2
	.dbline 121
; 	    PORTA = 0x55;   //延时后停止动作,等待光照重新动作
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e turn_left_s _turn_left_s fV
	.even
_turn_left_s::
	.dbline -1
	.dbline 124
; 		delay_ms(light_delay*2);
; 		stop();
; 	   }
	.dbline 125
; 	}
	ldi R24,128
	out 0x12,R24
	.dbline 126
; }
	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 main()
; {
;  unsigned char pd_select,remote_select;
	.dbline 131
;  
	ldi R24,80
	out 0x12,R24
	.dbline 132
;   port_init();         //PA,PB,PC,PD 初始化
	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
;   work_status = 0x67;  //置对应的工作状态标志
;   
;   PORTA = 0x7e;
	.dbline 137
;   while(1)
	ldi R24,160
	out 0x12,R24
	.dbline 138
;    {
	ldi R24,195
	out 0x1b,R24
	.dbline -2
	.dbline 139
;     pd_select = PIND & 0x0f;
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e stop _stop fV
	.even
_stop::
	.dbline -1
	.dbline 142
;     if(pd_select == 0x0e)//pd0=0,其它为高电平
;       {
;        while(1)
	.dbline 143
; 	     {
	ldi R24,255
	out 0x12,R24
	.dbline 144
; 	      delay_ms(500);//消除抖动
	out 0x1b,R24
	.dbline -2
	.dbline 145
; 		  pd_select = PIND & 0x0f;
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
; 		  if(pd_select == 0x0e)//pd0=0,其它为高电平
; 		    {remote_car();}//运行遥控车程序
; 		  else
; 		    break;
; 	     }
;       }
;     if(pd_select == 0x0d)//pd1=0,其它为高电平
;       {
;        while(1)
; 	     {
; 	      delay_ms(500);//消除抖动
; 		  pd_select = PIND & 0x0f;
; 		  if(pd_select == 0x0d)//pd1=0,其它为高电平
; 		    {trace_light();}//运行遥控车程序
; 		  else
; 		    break;
	.dbline 163
; 	     }
;       }
	ldi R24,1
	out 0x14,R24
	.dbline 163
	ldi R24,255
	out 0x15,R24
	.dbline 164
; 
	ldi R24,128
	out 0x17,R24
	.dbline 164
	ldi R24,255
	out 0x18,R24
	.dbline 166
;     remote_select = PINB & 0x0f;//检测遥控器是否有键按下
;     if(remote_select == 0x04)// A
	in R20,0x13
	andi R20,16
	.dbline 167
;       {
	brne L18
	.dbline 168
;        while(1)
	.dbline 169
; 	     {
	rcall _backward
	.dbline 170
; 	      delay_ms(500);//消除抖动
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 172
; 		  remote_select = PINB & 0x0f;
; 		  if(remote_select == 0x04)// A
	lds R24,_work_status
	cpi R24,112
	brne L20
	.dbline 173
; 		    {remote_car();}//运行遥控车程序
	.dbline 174
; 		  else
	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
	out 0x1b,R24
	.dbline 180
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 181
L23:
	.dbline 175
; 		    break;
	rjmp L22
X1:
	.dbline 182
; 	     }
;       }
;     if(remote_select == 0x02)// B
;       {
;        while(1)
; 	     {
; 	      delay_ms(500);//消除抖动
L20:
	.dbline 184
; 		  remote_select = PINB & 0x0f;
; 		  if(remote_select == 0x02)// B
	rcall _turn_left
	.dbline 185
; 		    {trace_light();}//运行追光机器人程序
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 186
; 		  else
L18:
	.dbline 188
; 		    break;
; 	     }
	in R20,0x16
	andi R20,112
	.dbline 189
;       }
	cpi R20,80
	brne L25
	.dbline 190
;    }  
	.dbline 191
;  
	rcall _forward
	.dbline 192
; }
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 194
; }
; }
	rcall _turn_left
	.dbline 195
; }
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 196
; }
L25:
	.dbline 197
; }
	cpi R20,48
	brne L27
	.dbline 198
; }
	.dbline 199
; }
	rcall _backward
	.dbline 200
; }
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 202
; }
; }
	rcall _turn_left
	.dbline 203
; }
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 204
; }
L27:
	.dbline 205
; }
	cpi R20,96
	brne L29
	.dbline 206
; }
	.dbline 207
; }
	rcall _backward
	.dbline 208
; }
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 210
; }
; }
	rcall _turn_left
	.dbline 211
; }
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 212
; }
L29:
	.dbline 213
; }
	cpi R20,32
	brne L31
	.dbline 214
; }
	.dbline 215
; }
	rcall _stop
	.dbline 216
; }
	ldi R16,1000
	ldi R17,3
	rcall _delay_ms
	rjmp L34
L33:
	.dbline 218
; }
; }
	.dbline 219
; }
	in R20,0x13
	andi R20,16
	.dbline 220
; }
	brne L36
	.dbline 221
; }
	.dbline 221
	rjmp L35
L36:
	.dbline 222
; }
	ldi R24,85
	out 0x1b,R24
	.dbline 223
; }
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 224
; }
	ldi R24,170
	out 0x1b,R24
	.dbline 225
; }
	ldi R16,250
	ldi R17,0
	rcall _delay_ms
	.dbline 226
; }
	in R22,0x16
	andi R22,15
	.dbline 227
; }
	breq L38
	.dbline 228
; }
	.dbline 228
	rjmp L35
L38:
	.dbline 229
L34:
	.dbline 217
	rjmp L33
L35:
	.dbline 230
L31:
	.dbline -2
	.dbline 231
; }
; }
; }
L17:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r remote_in 22 c
	.dbsym r sw_in 20 c
	.dbend
	.dbfunc e mic_startup _mic_startup fV
;         mic_in -> R20
	.even

⌨️ 快捷键说明

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