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

📄 xuanya.s

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module xuanya.c
	.area text(rom, con, rel)
	.dbfile D:/icc/include/diy0206.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 81
; /************功能介绍************************
;             广州双龙电子
;              WWW.SL.COM.CN
;    Chip type       :  ATMEGA16   
;    Clock frequency :  8MHz
; ********************************************
; 
;         自走车,机器人向前方行走,实现自动避悬崖障碍
;         PB2声控启动
; 	前方碰到障碍,机器人后退,左转,前进 
; 	左方碰到障碍,机器人后退,右转,前进
; 	右方碰到障碍,机器人后退,左转,前进 
; 	前方碰到悬涯,机器人后退,左转,前进 
; 	左方碰到悬涯,机器人后退,右转,前进
; 	右方碰到悬涯,机器人后退,左转,前进    
; 	左侧和右侧同时碰到悬涯,机器人停止待命,同时PA口的LED流水灯显示,
; 	  电机驱动信号                       led灯指示电机状态 
;   PD = 0xA0;//前行    //1010 0000//P0 = 0xC3;//1100,0011
;  PD = 0x60;//快速左转//0110 0000//P0 = 0x33;//0011,0011
;  PD = 0x20;//慢速左转//0010 0000//P0 = 0xF3;//1111,0011
;  PD = 0x90;//快速右转//1001 0000//P0 = 0xCC;//1100,1100
;  PD = 0x80;//慢速右转//1000 0000//P0 = 0xCF;//1100,1111
;  PD = 0x50;//后退    //0101 0000//P0 = 0x3C;//0011,1100
; 
; ********************************************/
; #include <iom16v.h>
; #include <macros.h>
; #define xuanya_delayms  300
; #include <diy0206.c>
; 
;  
; unsigned char pa,pb,pc,pd;
; 
; void xuanya_car(void)
; {
;  port_init();         //PA,PB,PC,PD 初始化
;  
;  mic_startup();       //等待声控启动
;  
;  while(1)
;    {//左(pc7)  中(pc6)  右(pc5)
;     
; 	switch(PINB&0x0b)
;        {
; 	   case 0x09:forward();delay_ms(touch_time); turn_left();delay_ms(touch_time);break; 
;       // 0b 0000,1001  尾部开关接触 ,前行,左转
; 
;        case 0x0a:backward();delay_ms(touch_time);turn_left();delay_ms(touch_time); break;       
; 	  //右侧开关接触 ,后退,左转
; 
; 	   case 0x03:backward();delay_ms(touch_time);turn_left();delay_ms(touch_time);break;       
; 	  //左侧开关接触,后退,左转
; 
; 	   case 0x02:stop();delay_ms(touch_time*4); break;    
; 	   // 0b 0000,0010  两侧开关同时接触,停止运动,熄灭指示灯  
; 	   }
;     pc = PINC & 0xE0;
;     if(pc == 0x40)
; 	  {//后退//左转
; 	   backward();//后退
; 	   delay_ms(xuanya_delayms);
; 	   turn_left();//左转
; 	   delay_ms(xuanya_delayms/2);
; 	  }
; 	if(pc == 0x80)
; 	  {//后退//左转
; 	   backward();//后退
; 	   delay_ms(xuanya_delayms);
; 	   turn_left();//左转
; 	   delay_ms(xuanya_delayms/2);
; 	  }
; 	if(pc == 0x20)
; 	  {//后退//左转
; 	   backward();//后退
; 	   delay_ms(xuanya_delayms);
; 	   turn_left();//左转
; 	   delay_ms(xuanya_delayms/2);
; 	  }
; 	if(pc == 0xc0)
; 	  {//后退//左转
; 	   backward();//后退
	.dbline 82
; 	   delay_ms(xuanya_delayms);
	ldi R24,255
	out 0x1a,R24
	.dbline 82
	out 0x1b,R24
	.dbline 84
; 	   turn_left();//左转
; 	   delay_ms(xuanya_delayms/2);
	clr R2
	out 0x17,R2
	.dbline 84
	out 0x18,R24
	.dbline 86
; 	  }
; 	if(pc == 0x60)
	ldi R24,1
	out 0x14,R24
	.dbline 86
	ldi R24,255
	out 0x15,R24
	.dbline 88
; 	  {//后退//左转
; 	   backward();//后退
	ldi R24,240
	out 0x11,R24
	.dbline 88
	ldi R24,255
	out 0x12,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 93
; 	   delay_ms(xuanya_delayms);
; 	   turn_left();//左转
; 	   delay_ms(xuanya_delayms/2);
; 	  }
; 	if(pc == 0xE0)
L3:
	.dbline 95
; 	  {
;        //刹车 //led灯为流水灯
	.dbline 96
;        stop();
	subi R16,1
	sbci R17,0
	.dbline 97
;        PORTA = 0x3C;
L4:
	.dbline 98
;        delay_ms(xuanya_delayms);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L3
	.dbline -2
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::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 102
; 	   PORTA = 0xC3;
;        delay_ms(xuanya_delayms);
; 	  } 
; 	else
	xjmp L8
L7:
	.dbline 104
	.dbline 105
	ldi R16,1000
	ldi R17,3
	xcall _delay_us
	.dbline 106
	subi R20,1
	sbci R21,0
	.dbline 107
L8:
	.dbline 103
; 	  {
	cpi R20,0
	cpc R20,R21
	brne L7
X0:
	.dbline -2
L6:
	xcall 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 111
; 	    forward();//前行
; 	  }
;    }
; }
; 
; void main()
; {
;  xuanya_car();
	.dbline 112
; }
	ldi R24,144
	out 0x12,R24
	.dbline 113
; }
	ldi R24,204
	out 0x1b,R24
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e turn_left _turn_left fV
	.even
_turn_left::
	.dbline -1
	.dbline 117
; }
; }
; }
; }
	.dbline 118
; }
	ldi R24,96
	out 0x12,R24
	.dbline 119
; }
	ldi R24,51
	out 0x1b,R24
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e turn_right_s _turn_right_s fV
	.even
_turn_right_s::
	.dbline -1
	.dbline 122
; }
; }
; }
	.dbline 123
; }
	ldi R24,128
	out 0x12,R24
	.dbline 124
; }
	ldi R24,207
	out 0x1b,R24
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e turn_left_s _turn_left_s fV
	.even
_turn_left_s::
	.dbline -1
	.dbline 128
; }
; }
; }
; }
	.dbline 129
; }
	ldi R24,32
	out 0x12,R24
	.dbline 130
; }
	ldi R24,243
	out 0x1b,R24
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e backward _backward fV
	.even
_backward::
	.dbline -1
	.dbline 134
; }
; }
; }
; }
	.dbline 135
; }
	ldi R24,80
	out 0x12,R24
	.dbline 136
; }
	ldi R24,60
	out 0x1b,R24
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e forward _forward fV
	.even
_forward::
	.dbline -1
	.dbline 140
; }
; }
; }
; }
	.dbline 141
; }
	ldi R24,160
	out 0x12,R24
	.dbline 142
; }
	ldi R24,195
	out 0x1b,R24
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e stop _stop fV
	.even
_stop::
	.dbline -1
	.dbline 146
; }
; }
; }
; }
	.dbline 147
; }
	ldi R24,255
	out 0x12,R24
	.dbline 148
; }
	out 0x1b,R24
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e sw_touch _sw_touch fV
;          sw_in -> R20
;      remote_in -> R22
	.even
_sw_touch::
	xcall push_gset2
	.dbline -1
	.dbline 165
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 167
; }
; }
	in R20,0x13
	andi R20,16
	.dbline 168
; }
	brne L18
	.dbline 169
; }
	.dbline 170
; }
	xcall _backward
	.dbline 171
; }
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 173
; }
; }
	lds R24,_work_status
	cpi R24,112
	brne L20
	.dbline 174
; }
	.dbline 175
; }
	xcall _stop
	xjmp L23
L22:
	.dbline 177
	.dbline 178
	ldi R24,85
	out 0x1b,R24
	.dbline 179
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 180
	ldi R24,170
	out 0x1b,R24
	.dbline 181
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 182
L23:
	.dbline 176
; }
	xjmp L22
X1:
	.dbline 183
; }
; }
; }
; }
; }
; }
; }
L20:
	.dbline 185
; }
; }
	xcall _turn_left
	.dbline 186
; }
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 187
; }
L18:
	.dbline 189
; }
; }
	in R20,0x16
	andi R20,11
	.dbline 190
; }
	cpi R20,9
	brne L25
	.dbline 191
; }
	.dbline 192
; }
	xcall _forward
	.dbline 193
; }
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 195
; }
; }
	xcall _turn_left
	.dbline 196
; }
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 197
; }
L25:
	.dbline 198
; }
	cpi R20,10
	brne L27
	.dbline 199
; }
	.dbline 200
; }
	xcall _backward
	.dbline 201
; }
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 203
; }
; }
	xcall _turn_left
	.dbline 204
; }
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 205
; }
L27:
	.dbline 206
; }
	cpi R20,3
	brne L29
	.dbline 207
; }
	.dbline 208
; }
	xcall _backward
	.dbline 209
; }
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 211
; }
; }
	xcall _turn_left
	.dbline 212
; }
	ldi R16,250
	ldi R17,0
	xcall _delay_ms
	.dbline 213
; }
L29:
	.dbline 214
; }
	cpi R20,2
	brne L31
	.dbline 215
; }
	.dbline 216
; }
	xcall _stop
	.dbline 217
; }
	ldi R16,1000
	ldi R17,3
	xcall _delay_ms
	xjmp L34
L33:
	.dbline 219
; }
; }
	.dbline 220
; }
	in R20,0x13
	andi R20,16
	.dbline 221
; }
	brne L36
	.dbline 222
; }
	.dbline 222
	xjmp L35
L36:
	.dbline 223
; }

⌨️ 快捷键说明

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