📄 sl3010.lis
字号:
.even
0074 _backward::
0074 .dbline -1
0074 .dbline 130
0074 ;
0074 ; void backward()//后退
0074 ; {
0074 .dbline 131
0074 ; PORTD = 0x50; //后退//0101 0000
0074 80E5 ldi R24,80
0076 82BB out 0x12,R24
0078 .dbline 132
0078 ; PORTA = 0x3C; //0011,1100 指示灯
0078 8CE3 ldi R24,60
007A 8BBB out 0x1b,R24
007C .dbline -2
007C .dbline 133
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 136
007E ;
007E ; void forward()//前行
007E ; {
007E .dbline 137
007E ; PORTD = 0xA0; //前行//1010 0000
007E 80EA ldi R24,160
0080 82BB out 0x12,R24
0082 .dbline 138
0082 ; PORTA = 0xC3; //1100,0011
0082 83EC ldi R24,195
0084 8BBB out 0x1b,R24
0086 .dbline -2
0086 .dbline 139
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 142
0088 ;
0088 ; void stop()//停止运动
0088 ; {
0088 .dbline 143
0088 ; PORTD = 0xff; //停止
0088 8FEF ldi R24,255
008A 82BB out 0x12,R24
008C .dbline 144
008C ; PORTA = 0xff; //
008C 8BBB out 0x1b,R24
008E .dbline -2
008E .dbline 145
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 161
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 ; DDRC = 0x01;PORTC = 0xFF;//PC4
0092 81E0 ldi R24,1
0094 84BB out 0x14,R24
0096 .dbline 163
0096 8FEF ldi R24,255
0098 85BB out 0x15,R24
009A .dbline 164
009A ; DDRB = 0x80;PORTB = 0xFF;//PB4,PB5,PB6
009A 80E8 ldi R24,128
009C 87BB out 0x17,R24
009E .dbline 164
009E 8FEF ldi R24,255
00A0 88BB out 0x18,R24
00A2 .dbline 166
00A2 ;
00A2 ; sw_in = PINC & 0x10;
00A2 43B3 in R20,0x13
00A4 4071 andi R20,16
00A6 .dbline 167
00A6 ; if(sw_in == 0x00)
00A6 C9F4 brne L18
00A8 .dbline 168
00A8 ; {//后退,左转 首部开关接触
00A8 .dbline 169
00A8 ; backward(); //后退
00A8 E5DF rcall _backward
00AA .dbline 170
00AA ; delay_ms(touch_time);
00AA 0AEF ldi R16,250
00AC 10E0 ldi R17,0
00AE C0DF rcall _delay_ms
00B0 .dbline 172
00B0 ;
00B0 ; if(work_status == 0x70)
00B0 80910400 lds R24,_work_status
00B4 8037 cpi R24,112
00B6 69F4 brne L20
00B8 .dbline 173
00B8 ; {//追光机器人,首部开关接触,停止运动,PA 口led 流动闪烁
00B8 .dbline 174
00B8 ; stop();
00B8 E7DF rcall _stop
00BA 0AC0 rjmp L23
00BC L22:
00BC .dbline 176
00BC .dbline 177
00BC 85E5 ldi R24,85
00BE 8BBB out 0x1b,R24
00C0 .dbline 178
00C0 0AEF ldi R16,250
00C2 10E0 ldi R17,0
00C4 B5DF rcall _delay_ms
00C6 .dbline 179
00C6 8AEA ldi R24,170
00C8 8BBB out 0x1b,R24
00CA .dbline 180
00CA 0AEF ldi R16,250
00CC 10E0 ldi R17,0
00CE B0DF rcall _delay_ms
00D0 .dbline 181
00D0 L23:
00D0 .dbline 175
00D0 ; while(1)
00D0 F5CF rjmp L22
00D2 X1:
00D2 .dbline 182
00D2 ; {
00D2 ; PORTA = 0x55;
00D2 ; delay_ms(250);
00D2 ; PORTA = 0xAA;
00D2 ; delay_ms(250);
00D2 ; }
00D2 ; }
00D2 L20:
00D2 .dbline 184
00D2 ;
00D2 ; turn_left(); //左转
00D2 C1DF rcall _turn_left
00D4 .dbline 185
00D4 ; delay_ms(touch_time);
00D4 0AEF ldi R16,250
00D6 10E0 ldi R17,0
00D8 ABDF rcall _delay_ms
00DA .dbline 186
00DA ; }
00DA L18:
00DA .dbline 188
00DA ;
00DA ; sw_in = PINB & 0x70;
00DA 46B3 in R20,0x16
00DC 4077 andi R20,112
00DE .dbline 189
00DE ; if(sw_in == 0x50)// 0b 0101,0000 尾部开关接触
00DE 4035 cpi R20,80
00E0 41F4 brne L25
00E2 .dbline 190
00E2 ; {//前行,左转
00E2 .dbline 191
00E2 ; forward(); //前行
00E2 CDDF rcall _forward
00E4 .dbline 192
00E4 ; delay_ms(touch_time);
00E4 0AEF ldi R16,250
00E6 10E0 ldi R17,0
00E8 A3DF rcall _delay_ms
00EA .dbline 194
00EA ;
00EA ; turn_left(); //左转
00EA B5DF rcall _turn_left
00EC .dbline 195
00EC ; delay_ms(touch_time);
00EC 0AEF ldi R16,250
00EE 10E0 ldi R17,0
00F0 9FDF rcall _delay_ms
00F2 .dbline 196
00F2 ; }
00F2 L25:
00F2 .dbline 197
00F2 ; if(sw_in == 0x30)// 0b 0011,0000 右侧开关接触
00F2 4033 cpi R20,48
00F4 41F4 brne L27
00F6 .dbline 198
00F6 ; {//后退,左转
00F6 .dbline 199
00F6 ; backward(); //后退
00F6 BEDF rcall _backward
00F8 .dbline 200
00F8 ; delay_ms(touch_time);
00F8 0AEF ldi R16,250
00FA 10E0 ldi R17,0
00FC 99DF rcall _delay_ms
00FE .dbline 202
00FE ;
00FE ; turn_left(); //左转
00FE ABDF rcall _turn_left
0100 .dbline 203
0100 ; delay_ms(touch_time);
0100 0AEF ldi R16,250
0102 10E0 ldi R17,0
0104 95DF rcall _delay_ms
0106 .dbline 204
0106 ; }
0106 L27:
0106 .dbline 205
0106 ; if(sw_in == 0x60)// 0b 0110,0000 左侧开关接触
0106 4036 cpi R20,96
0108 41F4 brne L29
010A .dbline 206
010A ; {//后退,左转
010A .dbline 207
010A ; backward(); //后退
010A B4DF rcall _backward
010C .dbline 208
010C ; delay_ms(touch_time);
010C 0AEF ldi R16,250
010E 10E0 ldi R17,0
0110 8FDF rcall _delay_ms
0112 .dbline 210
0112 ;
0112 ; turn_left(); //左转
0112 A1DF rcall _turn_left
0114 .dbline 211
0114 ; delay_ms(touch_time);
0114 0AEF ldi R16,250
0116 10E0 ldi R17,0
0118 8BDF rcall _delay_ms
011A .dbline 212
011A ; }
011A L29:
011A .dbline 213
011A ; if(sw_in == 0x20)// 0b 0010,0000 两侧开关同时接触,停止运动
011A 4032 cpi R20,32
011C C1F4 brne L31
011E .dbline 214
011E ; {
011E .dbline 215
011E ; stop(); //停止运动,熄灭指示灯
011E B4DF rcall _stop
0120 .dbline 216
0120 ; delay_ms(touch_time*4);
0120 08EE ldi R16,1000
0122 13E0 ldi R17,3
0124 85DF rcall _delay_ms
0126 12C0 rjmp L34
0128 L33:
0128 .dbline 218
0128 ; while(1)
0128 ; {
0128 .dbline 219
0128 ; sw_in = PINC & 0x10;
0128 43B3 in R20,0x13
012A 4071 andi R20,16
012C .dbline 220
012C ; if(sw_in == 0x00)
012C 09F4 brne L36
012E .dbline 221
012E ; {break;}
012E .dbline 221
012E 0FC0 rjmp L35
0130 L36:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -