📄 xuanya.s
字号:
.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 + -