?? remote_light.s
字號(hào):
.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
; //追光機(jī)器人 和 遙控機(jī)器人程序
;
; //將 pd0 接低電平,pd3,pd2,pd1 保持高電平
; // 或按下遙控器<A>(保持 0.5s) 進(jìn)入遙控機(jī)器人運(yùn)行環(huán)境
;
; //將 pd1 接低電平,pd3,pd2,pd0 保持高電平
; // 或按下遙控器<B>(保持 0.5s) 進(jìn)入追光機(jī)器人運(yùn)行環(huán)境
;
; //將 sl3010.c 文件拷貝到 icc avr 安裝目錄的<include>文件夾
; //sl3010.c 是sl3010機(jī)器人的子函數(shù)庫(kù)
; //程序中調(diào)用此文件后 #include <sl3010.c>
; //可直接調(diào)用里面的函數(shù)和變量
; /*
; void port_init(); //PA,PB,PC,PD 初始化
; void delay_us(int time); //微妙級(jí)延時(shí)
; void delay_ms(unsigned int time);//毫秒級(jí)延時(shí)
; void sw_touch(); //檢測(cè)輕觸開關(guān)
; void mic_startup(); //等待聲控啟動(dòng)
; void remote_auto_time(); //遙控器控制直行和轉(zhuǎn)彎時(shí)間
; void turn_right(); //右轉(zhuǎn)
; void turn_left(); //左轉(zhuǎn)
; void turn_right_s(); //慢速右轉(zhuǎn)
; void turn_left_s(); //慢速左轉(zhuǎn)
; void backward(); //后退
; void forward(); //前行
; void stop(); //停止運(yùn)動(dòng)
; */
;
; //更新日期 2003.03.17
;
; #include <io8515v.h>
; #include <macros.h>
; #include <sl3010.c> //調(diào)用sl3010小車的子函數(shù)庫(kù)
;
; #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;//置對(duì)應(yīng)的工作狀態(tài)標(biāo)志
;
; mic_startup();//等待聲控啟動(dòng)函數(shù)
;
; while(1)
; {
;
; sw_touch();//檢測(cè)輕觸開關(guān)
;
; remote_in = PINB & 0x0F;
; switch (remote_in)
; {//檢測(cè)遙控器是否有鍵按下
; case 0x04: // < A >
; turn_right(); //右轉(zhuǎn)
; break;
; case 0x02: // < B >
; backward(); //后退
; break;
; case 0x08: // < C >
; stop(); //停止運(yùn)動(dòng)
; break;
; case 0x01: // < D >
; turn_left(); //左轉(zhuǎn)
; 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; //置對(duì)應(yīng)的工作狀態(tài)標(biāo)志
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(); //等待聲控啟動(dòng)
;
; 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(); //檢測(cè)輕觸開關(guān)
;
; cds = PINC & 0x06; //0b0000,0110
;
; if(cds == 0x00) //左右兩側(cè)都感測(cè)到光
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); //延時(shí)
.dbline 108
; }
ldi R24,96
out 0x12,R24
.dbline 109
; if(cds == 0x02) //0b0000,0010___pc2(右側(cè))感測(cè)到光
ldi R24,204
out 0x1b,R24
.dbline -2
.dbline 110
; {//慢速右轉(zhuǎn)
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); //延時(shí)
; }
.dbline 114
; if(cds == 0x04) //0b0000,0100___pc1(左側(cè))感測(cè)到光
ldi R24,144
out 0x12,R24
.dbline 115
; {//慢速左轉(zhuǎn)
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); //延時(shí)
; }
.dbline 119
; if(cds == 0x06)
ldi R24,32
out 0x12,R24
.dbline 120
; {//停止動(dòng)作
ldi R24,207
out 0x1b,R24
.dbline -2
.dbline 121
; PORTA = 0x55; //延時(shí)后停止動(dòng)作,等待光照重新動(dòng)作
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; //置對(duì)應(yīng)的工作狀態(tài)標(biāo)志
;
; 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);//消除抖動(dòng)
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();}//運(yùn)行遙控車程序
; else
; break;
; }
; }
; if(pd_select == 0x0d)//pd1=0,其它為高電平
; {
; while(1)
; {
; delay_ms(500);//消除抖動(dòng)
; pd_select = PIND & 0x0f;
; if(pd_select == 0x0d)//pd1=0,其它為高電平
; {trace_light();}//運(yùn)行遙控車程序
; 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;//檢測(cè)遙控器是否有鍵按下
; 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);//消除抖動(dòng)
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();}//運(yùn)行遙控車程序
.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);//消除抖動(dòng)
L20:
.dbline 184
; remote_select = PINB & 0x0f;
; if(remote_select == 0x02)// B
rcall _turn_left
.dbline 185
; {trace_light();}//運(yùn)行追光機(jī)器人程序
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -