📄 sl3010.lis
字号:
0072 0895 ret
0074 .dbend
0074 .dbfunc e backward _backward fV
.even
0074 _backward::
0074 .dbline -1
0074 .dbline 129
0074 ;
0074 ; void backward()//后退
0074 ; {
0074 .dbline 130
0074 ; PORTD = 0x50; //后退//0101 0000
0074 80E5 ldi R24,80
0076 82BB out 0x12,R24
0078 .dbline 131
0078 ; PORTA = 0x3C; //0011,1100 指示灯
0078 8CE3 ldi R24,60
007A 8BBB out 0x1b,R24
007C .dbline -2
007C .dbline 132
007C ; }
007C L14:
007C .dbline 0 ; func end
007C 0895 ret
007E .dbend
007E .dbfunc e forward _forward fV
.even
007E _forward::
007E .dbline -1
007E .dbline 135
007E ;
007E ; void forward()//前行
007E ; {
007E .dbline 136
007E ; PORTD = 0xA0; //前行//1010 0000
007E 80EA ldi R24,160
0080 82BB out 0x12,R24
0082 .dbline 137
0082 ; PORTA = 0xC3; //1100,0011
0082 83EC ldi R24,195
0084 8BBB out 0x1b,R24
0086 .dbline -2
0086 .dbline 138
0086 ; }
0086 L15:
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbend
0088 .dbfunc e stop _stop fV
.even
0088 _stop::
0088 .dbline -1
0088 .dbline 141
0088 ;
0088 ; void stop()//停止运动
0088 ; {
0088 .dbline 142
0088 ; PORTD = 0xff; //停止
0088 8FEF ldi R24,255
008A 82BB out 0x12,R24
008C .dbline 143
008C ; PORTA = 0xff; //
008C 8BBB out 0x1b,R24
008E .dbline -2
008E .dbline 144
008E ; }
008E L16:
008E .dbline 0 ; func end
008E 0895 ret
0090 .dbend
0090 .dbfunc e sw_touch _sw_touch fV
0090 ; remote_in -> R22
0090 ; sw_in -> R20
.even
0090 _sw_touch::
0090 00D0 rcall push_gset2
0092 .dbline -1
0092 .dbline 160
0092 ;
0092 ; //左边 X PC4 X 右边
0092 ; // X X X X X X X
0092 ; // 8 7 6 5 4 3 2 1
0092 ; // PB4 X X X X X PB6
0092 ; // | X X X |
0092 ; // | X X X |
0092 ; // | X X X |
0092 ; // |$||- X X X -||$|
0092 ; // |$|| XXXXXXXXX ||$|
0092 ; // #|$||XXXXXXXXXXX||$|#
0092 ; // |$||XXX XXX||$|
0092 ; // |$||___ PB5 ___||$|
0092 ;
0092 ; void sw_touch()
0092 ; {
0092 .dbline 163
0092 ; unsigned char sw_in,remote_in;
0092 ;
0092 ; sw_in = PINC & 0x10;
0092 43B3 in R20,0x13
0094 4071 andi R20,16
0096 .dbline 164
0096 ; if(sw_in == 0x00)
0096 C9F4 brne L18
0098 .dbline 165
0098 ; {//后退,左转 首部开关接触
0098 .dbline 166
0098 ; backward(); //后退
0098 EDDF rcall _backward
009A .dbline 167
009A ; delay_ms(touch_time);
009A 0AEF ldi R16,250
009C 10E0 ldi R17,0
009E C8DF rcall _delay_ms
00A0 .dbline 169
00A0 ;
00A0 ; if(work_status == 0x70)
00A0 80910400 lds R24,_work_status
00A4 8037 cpi R24,112
00A6 69F4 brne L20
00A8 .dbline 170
00A8 ; {//追光机器人,首部开关接触,停止运动,PA 口led 流动闪烁
00A8 .dbline 171
00A8 ; stop();
00A8 EFDF rcall _stop
00AA 0AC0 rjmp L23
00AC L22:
00AC .dbline 173
00AC .dbline 174
00AC 85E5 ldi R24,85
00AE 8BBB out 0x1b,R24
00B0 .dbline 175
00B0 0AEF ldi R16,250
00B2 10E0 ldi R17,0
00B4 BDDF rcall _delay_ms
00B6 .dbline 176
00B6 8AEA ldi R24,170
00B8 8BBB out 0x1b,R24
00BA .dbline 177
00BA 0AEF ldi R16,250
00BC 10E0 ldi R17,0
00BE B8DF rcall _delay_ms
00C0 .dbline 178
00C0 L23:
00C0 .dbline 172
00C0 ; while(1)
00C0 F5CF rjmp L22
00C2 X1:
00C2 .dbline 179
00C2 ; {
00C2 ; PORTA = 0x55;
00C2 ; delay_ms(250);
00C2 ; PORTA = 0xAA;
00C2 ; delay_ms(250);
00C2 ; }
00C2 ; }
00C2 L20:
00C2 .dbline 181
00C2 ;
00C2 ; turn_left(); //左转
00C2 C9DF rcall _turn_left
00C4 .dbline 182
00C4 ; delay_ms(touch_time);
00C4 0AEF ldi R16,250
00C6 10E0 ldi R17,0
00C8 B3DF rcall _delay_ms
00CA .dbline 183
00CA ; }
00CA L18:
00CA .dbline 185
00CA ;
00CA ; sw_in = PINB & 0x70;
00CA 46B3 in R20,0x16
00CC 4077 andi R20,112
00CE .dbline 186
00CE ; if(sw_in == 0x50)// 0b 0101,0000 尾部开关接触
00CE 4035 cpi R20,80
00D0 41F4 brne L25
00D2 .dbline 187
00D2 ; {//前行,左转
00D2 .dbline 188
00D2 ; forward(); //前行
00D2 D5DF rcall _forward
00D4 .dbline 189
00D4 ; delay_ms(touch_time);
00D4 0AEF ldi R16,250
00D6 10E0 ldi R17,0
00D8 ABDF rcall _delay_ms
00DA .dbline 191
00DA ;
00DA ; turn_left(); //左转
00DA BDDF rcall _turn_left
00DC .dbline 192
00DC ; delay_ms(touch_time);
00DC 0AEF ldi R16,250
00DE 10E0 ldi R17,0
00E0 A7DF rcall _delay_ms
00E2 .dbline 193
00E2 ; }
00E2 L25:
00E2 .dbline 194
00E2 ; if(sw_in == 0x30)// 0b 0011,0000 右侧开关接触
00E2 4033 cpi R20,48
00E4 41F4 brne L27
00E6 .dbline 195
00E6 ; {//后退,左转
00E6 .dbline 196
00E6 ; backward(); //后退
00E6 C6DF rcall _backward
00E8 .dbline 197
00E8 ; delay_ms(touch_time);
00E8 0AEF ldi R16,250
00EA 10E0 ldi R17,0
00EC A1DF rcall _delay_ms
00EE .dbline 199
00EE ;
00EE ; turn_left(); //左转
00EE B3DF rcall _turn_left
00F0 .dbline 200
00F0 ; delay_ms(touch_time);
00F0 0AEF ldi R16,250
00F2 10E0 ldi R17,0
00F4 9DDF rcall _delay_ms
00F6 .dbline 201
00F6 ; }
00F6 L27:
00F6 .dbline 202
00F6 ; if(sw_in == 0x60)// 0b 0110,0000 左侧开关接触
00F6 4036 cpi R20,96
00F8 41F4 brne L29
00FA .dbline 203
00FA ; {//后退,左转
00FA .dbline 204
00FA ; backward(); //后退
00FA BCDF rcall _backward
00FC .dbline 205
00FC ; delay_ms(touch_time);
00FC 0AEF ldi R16,250
00FE 10E0 ldi R17,0
0100 97DF rcall _delay_ms
0102 .dbline 207
0102 ;
0102 ; turn_left(); //左转
0102 A9DF rcall _turn_left
0104 .dbline 208
0104 ; delay_ms(touch_time);
0104 0AEF ldi R16,250
0106 10E0 ldi R17,0
0108 93DF rcall _delay_ms
010A .dbline 209
010A ; }
010A L29:
010A .dbline 210
010A ; if(sw_in == 0x20)// 0b 0010,0000 两侧开关同时接触,停止运动
010A 4032 cpi R20,32
010C C1F4 brne L31
010E .dbline 211
010E ; {
010E .dbline 212
010E ; stop(); //停止运动,熄灭指示灯
010E BCDF rcall _stop
0110 .dbline 213
0110 ; delay_ms(touch_time*4);
0110 08EE ldi R16,1000
0112 13E0 ldi R17,3
0114 8DDF rcall _delay_ms
0116 12C0 rjmp L34
0118 L33:
0118 .dbline 215
0118 ; while(1)
0118 ; {
0118 .dbline 216
0118 ; sw_in = PINC & 0x10;
0118 43B3 in R20,0x13
011A 4071 andi R20,16
011C .dbline 217
011C ; if(sw_in == 0x00)
011C 09F4 brne L36
011E .dbline 218
011E ; {break;}
011E .dbline 218
011E 0FC0 rjmp L35
0120 L36:
0120 .dbline 219
0120 ; PORTA = 0x55;
0120 85E5 ldi R24,85
0122 8BBB out 0x1b,R24
0124 .dbline 220
0124 ; delay_ms(250);
0124 0AEF ldi R16,250
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -