📄 sl3010.s
字号:
out 0x1b,R24
.dbline 180
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 181
L23:
.dbline 175
; while(1)
rjmp L22
X1:
.dbline 182
; {
; PORTA = 0x55;
; delay_ms(250);
; PORTA = 0xAA;
; delay_ms(250);
; }
; }
L20:
.dbline 184
;
; turn_left(); //左转
rcall _turn_left
.dbline 185
; delay_ms(touch_time);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 186
; }
L18:
.dbline 188
;
; sw_in = PINB & 0x70;
in R20,0x16
andi R20,112
.dbline 189
; if(sw_in == 0x50)// 0b 0101,0000 尾部开关接触
cpi R20,80
brne L25
.dbline 190
; {//前行,左转
.dbline 191
; forward(); //前行
rcall _forward
.dbline 192
; delay_ms(touch_time);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 194
;
; turn_left(); //左转
rcall _turn_left
.dbline 195
; delay_ms(touch_time);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 196
; }
L25:
.dbline 197
; if(sw_in == 0x30)// 0b 0011,0000 右侧开关接触
cpi R20,48
brne L27
.dbline 198
; {//后退,左转
.dbline 199
; backward(); //后退
rcall _backward
.dbline 200
; delay_ms(touch_time);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 202
;
; turn_left(); //左转
rcall _turn_left
.dbline 203
; delay_ms(touch_time);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 204
; }
L27:
.dbline 205
; if(sw_in == 0x60)// 0b 0110,0000 左侧开关接触
cpi R20,96
brne L29
.dbline 206
; {//后退,左转
.dbline 207
; backward(); //后退
rcall _backward
.dbline 208
; delay_ms(touch_time);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 210
;
; turn_left(); //左转
rcall _turn_left
.dbline 211
; delay_ms(touch_time);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 212
; }
L29:
.dbline 213
; if(sw_in == 0x20)// 0b 0010,0000 两侧开关同时接触,停止运动
cpi R20,32
brne L31
.dbline 214
; {
.dbline 215
; stop(); //停止运动,熄灭指示灯
rcall _stop
.dbline 216
; delay_ms(touch_time*4);
ldi R16,1000
ldi R17,3
rcall _delay_ms
rjmp L34
L33:
.dbline 218
; while(1)
; {
.dbline 219
; sw_in = PINC & 0x10;
in R20,0x13
andi R20,16
.dbline 220
; if(sw_in == 0x00)
brne L36
.dbline 221
; {break;}
.dbline 221
rjmp L35
L36:
.dbline 222
; PORTA = 0x55;
ldi R24,85
out 0x1b,R24
.dbline 223
; delay_ms(250);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 224
; PORTA = 0xAA;
ldi R24,170
out 0x1b,R24
.dbline 225
; delay_ms(250);
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 226
; remote_in = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 227
; if(remote_in != 0x00)
breq L38
.dbline 228
; {break;}
.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
_mic_startup::
rcall push_gset1
.dbline -1
.dbline 234
;
; void mic_startup()
; {//声控启动程序运行
.dbline 236
; unsigned char mic_in;
; DDRC = 0x01;PORTC = 0xFF;
ldi R24,1
out 0x14,R24
.dbline 236
ldi R24,255
out 0x15,R24
.dbline 237
; delay_us(1);
ldi R16,1
ldi R17,0
rcall _delay_us
rjmp L42
L41:
.dbline 239
; while(1)//等待pc3(声控键)按键按下
; { //无键按下等待
.dbline 240
; mic_in = PINC & 0x08; //pc2=0
in R20,0x13
andi R20,8
.dbline 241
; if(mic_in == 0){break;}
brne L44
.dbline 241
.dbline 241
rjmp L43
L44:
.dbline 242
L42:
.dbline 238
rjmp L41
L43:
.dbline -2
.dbline 243
; }//有键按下运行下面的程序
; }
L40:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r mic_in 20 c
.dbend
.dbfunc e remote_auto_time _remote_auto_time fV
; remote_in -> R16
.even
_remote_auto_time::
.dbline -1
.dbline 260
;
; // #
; // #
; // #
; // #
; // # // delay_time1 转弯时间
; // # # # # # // delay_time2 直行时间
; // # X # //<A> 0x04 delay_time2-50
; // # B C # //<B> 0x02 delay_time1+50
; // # D A # //<C> 0x08 delay_time1-50
; // # # //<D> 0x01 delay_time2+50
; // # # # # // max: 2000 min: 200
;
; unsigned int delay_time1,delay_time2;
;
; void remote_auto_time()
; {
.dbline 262
; unsigned char remote_in;
; remote_in = PINB & 0x0F;
in R16,0x16
andi R16,15
.dbline 263
; switch (remote_in)
clr R17
cpi R16,0
cpc R16,R17
brne X4
rjmp L48
X4:
X2:
cpi R16,1
ldi R30,0
cpc R17,R30
brne X5
rjmp L59
X5:
cpi R16,2
ldi R30,0
cpc R17,R30
breq L53
cpi R16,4
ldi R30,0
cpc R17,R30
breq L50
cpi R16,8
ldi R30,0
cpc R17,R30
breq L56
rjmp L47
X3:
.dbline 264
; {//检测遥控器是否有键按下
L50:
.dbline 266
; case 0x04: // < A >
; delay_time2 = delay_time2 - 50;
lds R24,_delay_time2
lds R25,_delay_time2+1
sbiw R24,50
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 267
; if(delay_time2 == 50)
cpi R24,50
ldi R30,0
cpc R25,R30
breq X6
rjmp L48
X6:
.dbline 268
; {delay_time2 = 100;}
.dbline 268
ldi R24,100
ldi R25,0
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 268
.dbline 269
; break;
rjmp L48
L53:
.dbline 271
; case 0x02: // < B >
; delay_time1 = delay_time1 + 50;
lds R24,_delay_time1
lds R25,_delay_time1+1
adiw R24,50
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 272
; if(delay_time1 == 2050)
cpi R24,2
ldi R30,8
cpc R25,R30
brne L48
.dbline 273
; {delay_time1 = 2000;}
.dbline 273
ldi R24,2000
ldi R25,7
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 273
.dbline 274
; break;
rjmp L48
L56:
.dbline 276
; case 0x08: // < C >
; delay_time1 = delay_time1 - 50;
lds R24,_delay_time1
lds R25,_delay_time1+1
sbiw R24,50
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 277
; if(delay_time1 == 50)
cpi R24,50
ldi R30,0
cpc R25,R30
brne L48
.dbline 278
; {delay_time1 = 100;}
.dbline 278
ldi R24,100
ldi R25,0
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 278
.dbline 279
; break;
rjmp L48
L59:
.dbline 281
; case 0x01: // < D >
; delay_time2 = delay_time2 + 50;
lds R24,_delay_time2
lds R25,_delay_time2+1
adiw R24,50
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 282
; if(delay_time2 == 2050)
cpi R24,2
ldi R30,8
cpc R25,R30
brne L48
.dbline 283
; {delay_time2 = 2000;}
.dbline 283
ldi R24,2000
ldi R25,7
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 283
.dbline 284
; break;
.dbline 286
; case 0x00: // 无按键
; break;
L47:
L48:
.dbline -2
.dbline 288
; }
; }
L46:
.dbline 0 ; func end
ret
.dbsym r remote_in 16 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\icc\include\sl3010.c
_delay_time2::
.blkb 2
.dbsym e delay_time2 _delay_time2 i
_delay_time1::
.blkb 2
.dbsym e delay_time1 _delay_time1 i
_work_status::
.blkb 1
.dbsym e work_status _work_status c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -