📄 pd_motor.lst
字号:
(0192) delay_ms(touch_time);
009F EF0A LDI R16,0xFA
00A0 E010 LDI R17,0
00A1 DFA3 RCALL _delay_ms
(0193)
(0194) turn_left(); //左转
00A2 DFB5 RCALL _turn_left
(0195) delay_ms(touch_time);
00A3 EF0A LDI R16,0xFA
00A4 E010 LDI R17,0
00A5 DF9F RCALL _delay_ms
(0196) }
(0197) if(sw_in == 0x30)// 0b 0011,0000 右侧开关接触
00A6 3340 CPI R20,0x30
00A7 F441 BNE 0x00B0
(0198) {//后退,左转
(0199) backward(); //后退
00A8 DFBE RCALL _backward
(0200) delay_ms(touch_time);
00A9 EF0A LDI R16,0xFA
00AA E010 LDI R17,0
00AB DF99 RCALL _delay_ms
(0201)
(0202) turn_left(); //左转
00AC DFAB RCALL _turn_left
(0203) delay_ms(touch_time);
00AD EF0A LDI R16,0xFA
00AE E010 LDI R17,0
00AF DF95 RCALL _delay_ms
(0204) }
(0205) if(sw_in == 0x60)// 0b 0110,0000 左侧开关接触
00B0 3640 CPI R20,0x60
00B1 F441 BNE 0x00BA
(0206) {//后退,左转
(0207) backward(); //后退
00B2 DFB4 RCALL _backward
(0208) delay_ms(touch_time);
00B3 EF0A LDI R16,0xFA
00B4 E010 LDI R17,0
00B5 DF8F RCALL _delay_ms
(0209)
(0210) turn_left(); //左转
00B6 DFA1 RCALL _turn_left
(0211) delay_ms(touch_time);
00B7 EF0A LDI R16,0xFA
00B8 E010 LDI R17,0
00B9 DF8B RCALL _delay_ms
(0212) }
(0213) if(sw_in == 0x20)// 0b 0010,0000 两侧开关同时接触,停止运动
00BA 3240 CPI R20,0x20
00BB F4C1 BNE 0x00D4
(0214) {
(0215) stop(); //停止运动,熄灭指示灯
00BC DFB4 RCALL _stop
(0216) delay_ms(touch_time*4);
00BD EE08 LDI R16,0xE8
00BE E013 LDI R17,3
00BF DF85 RCALL _delay_ms
00C0 C012 RJMP 0x00D3
(0217) while(1)
(0218) {
(0219) sw_in = PINC & 0x10;
00C1 B343 IN R20,P13
00C2 7140 ANDI R20,0x10
(0220) if(sw_in == 0x00)
00C3 F409 BNE 0x00C5
(0221) {break;}
00C4 C00F RJMP 0x00D4
(0222) PORTA = 0x55;
00C5 E585 LDI R24,0x55
00C6 BB8B OUT P1B,R24
(0223) delay_ms(250);
00C7 EF0A LDI R16,0xFA
00C8 E010 LDI R17,0
00C9 DF7B RCALL _delay_ms
(0224) PORTA = 0xAA;
00CA EA8A LDI R24,0xAA
00CB BB8B OUT P1B,R24
(0225) delay_ms(250);
00CC EF0A LDI R16,0xFA
00CD E010 LDI R17,0
00CE DF76 RCALL _delay_ms
(0226) remote_in = PINB & 0x0f;
00CF B366 IN R22,P16
00D0 706F ANDI R22,0xF
(0227) if(remote_in != 0x00)
00D1 F009 BEQ 0x00D3
(0228) {break;}
00D2 C001 RJMP 0x00D4
00D3 CFED RJMP 0x00C1
(0229) }
(0230) }
(0231) }
00D4 D0B7 RCALL pop_gset2
00D5 9508 RET
_mic_startup:
mic_in --> R20
00D6 D09B RCALL push_gset1
(0232)
(0233) void mic_startup()
(0234) {//声控启动程序运行
(0235) unsigned char mic_in;
(0236) DDRC = 0x01;PORTC = 0xFF;
00D7 E081 LDI R24,1
00D8 BB84 OUT P14,R24
00D9 EF8F LDI R24,0xFF
00DA BB85 OUT P15,R24
(0237) delay_us(1);
00DB E001 LDI R16,1
00DC E010 LDI R17,0
00DD DF5F RCALL _delay_us
00DE C004 RJMP 0x00E3
(0238) while(1)//等待pc3(声控键)按键按下
(0239) { //无键按下等待
(0240) mic_in = PINC & 0x08; //pc2=0
00DF B343 IN R20,P13
00E0 7048 ANDI R20,0x8
(0241) if(mic_in == 0){break;}
00E1 F409 BNE 0x00E3
00E2 C001 RJMP 0x00E4
00E3 CFFB RJMP 0x00DF
(0242) }//有键按下运行下面的程序
(0243) }
00E4 D090 RCALL pop_gset1
00E5 9508 RET
(0244)
(0245) // #
(0246) // #
(0247) // #
(0248) // #
(0249) // # // delay_time1 转弯时间
(0250) // # # # # # // delay_time2 直行时间
(0251) // # X # //<A> 0x04 delay_time2-50
(0252) // # B C # //<B> 0x02 delay_time1+50
(0253) // # D A # //<C> 0x08 delay_time1-50
(0254) // # # //<D> 0x01 delay_time2+50
(0255) // # # # # // max: 2000 min: 200
(0256)
(0257) unsigned int delay_time1,delay_time2;
(0258)
(0259) void remote_auto_time()
(0260) {
(0261) unsigned char remote_in;
(0262) remote_in = PINB & 0x0F;
_remote_auto_time:
remote_in --> R16
00E6 B306 IN R16,P16
00E7 700F ANDI R16,0xF
(0263) switch (remote_in)
00E8 2711 CLR R17
00E9 3000 CPI R16,0
00EA 0701 CPC R16,R17
00EB F409 BNE 0x00ED
00EC C062 RJMP 0x014F
00ED 3001 CPI R16,1
00EE E0E0 LDI R30,0
00EF 071E CPC R17,R30
00F0 F409 BNE 0x00F2
00F1 C04A RJMP 0x013C
00F2 3002 CPI R16,2
00F3 E0E0 LDI R30,0
00F4 071E CPC R17,R30
00F5 F0F1 BEQ 0x0114
00F6 3004 CPI R16,4
00F7 E0E0 LDI R30,0
00F8 071E CPC R17,R30
00F9 F029 BEQ 0x00FF
00FA 3008 CPI R16,0x8
00FB E0E0 LDI R30,0
00FC 071E CPC R17,R30
00FD F151 BEQ 0x0128
00FE C050 RJMP 0x014F
(0264) {//检测遥控器是否有键按下
(0265) case 0x04: // < A >
(0266) delay_time2 = delay_time2 - 50;
00FF 91800064 LDS R24,_delay_time2
0101 91900065 LDS R25,_delay_time2+1
0103 97C2 SBIW R24,0x32
0104 93900065 STS _delay_time2+1,R25
0106 93800064 STS _delay_time2,R24
(0267) if(delay_time2 == 50)
0108 3382 CPI R24,0x32
0109 E0E0 LDI R30,0
010A 079E CPC R25,R30
010B F009 BEQ 0x010D
010C C042 RJMP 0x014F
(0268) {delay_time2 = 100;}
010D E684 LDI R24,0x64
010E E090 LDI R25,0
010F 93900065 STS _delay_time2+1,R25
0111 93800064 STS _delay_time2,R24
(0269) break;
0113 C03B RJMP 0x014F
(0270) case 0x02: // < B >
(0271) delay_time1 = delay_time1 + 50;
0114 91800066 LDS R24,_delay_time1
0116 91900067 LDS R25,_delay_time1+1
0118 96C2 ADIW R24,0x32
0119 93900067 STS _delay_time1+1,R25
011B 93800066 STS _delay_time1,R24
(0272) if(delay_time1 == 2050)
011D 3082 CPI R24,2
011E E0E8 LDI R30,0x8
011F 079E CPC R25,R30
0120 F571 BNE 0x014F
(0273) {delay_time1 = 2000;}
0121 ED80 LDI R24,0xD0
0122 E097 LDI R25,7
0123 93900067 STS _delay_time1+1,R25
0125 93800066 STS _delay_time1,R24
(0274) break;
0127 C027 RJMP 0x014F
(0275) case 0x08: // < C >
(0276) delay_time1 = delay_time1 - 50;
0128 91800066 LDS R24,_delay_time1
012A 91900067 LDS R25,_delay_time1+1
012C 97C2 SBIW R24,0x32
012D 93900067 STS _delay_time1+1,R25
012F 93800066 STS _delay_time1,R24
(0277) if(delay_time1 == 50)
0131 3382 CPI R24,0x32
0132 E0E0 LDI R30,0
0133 079E CPC R25,R30
0134 F4D1 BNE 0x014F
(0278) {delay_time1 = 100;}
0135 E684 LDI R24,0x64
0136 E090 LDI R25,0
0137 93900067 STS _delay_time1+1,R25
0139 93800066 STS _delay_time1,R24
(0279) break;
013B C013 RJMP 0x014F
(0280) case 0x01: // < D >
(0281) delay_time2 = delay_time2 + 50;
013C 91800064 LDS R24,_delay_time2
013E 91900065 LDS R25,_delay_time2+1
0140 96C2 ADIW R24,0x32
0141 93900065 STS _delay_time2+1,R25
0143 93800064 STS _delay_time2,R24
(0282) if(delay_time2 == 2050)
0145 3082 CPI R24,2
0146 E0E8 LDI R30,0x8
0147 079E CPC R25,R30
0148 F431 BNE 0x014F
(0283) {delay_time2 = 2000;}
0149 ED80 LDI R24,0xD0
014A E097 LDI R25,7
014B 93900065 STS _delay_time2+1,R25
014D 93800064 STS _delay_time2,R24
(0284) break;
(0285) case 0x00: // 无按键
(0286) break;
(0287) }
(0288) }
014F 9508 RET
FILE: E:\icc\iccavr\sl3010\pd_motor\pd_motor.c
(0001) //ICC-AVR application builder : 03-1-21 10:17:29
(0002) // Target : 8515
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <io8515v.h>
(0006) #include <macros.h>
(0007) #include <sl3010.c>
(0008)
(0009) unsigned char pa,pb,pc,pd;
(0010)
(0011) void main(void)
(0012) {
(0013) port_init();
_main:
0150 DEDC RCALL _port_init
0151 C01E RJMP 0x0170
(0014) while(1)
(0015) {
(0016) PORTD = 0xA0; //前行//1010 0000
0152 EA80 LDI R24,0xA0
0153 BB82 OUT P12,R24
(0017) delay_ms(10000);
0154 E100 LDI R16,0x10
0155 E217 LDI R17,0x27
0156 DEEE RCALL _delay_ms
(0018) PORTD = 0x90; //左转//1001 0000
0157 E980 LDI R24,0x90
0158 BB82 OUT P12,R24
(0019) delay_ms(10000);
0159 E100 LDI R16,0x10
015A E217 LDI R17,0x27
015B DEE9 RCALL _delay_ms
(0020) PORTD = 0x80; //左转//1000 0000
015C E880 LDI R24,0x80
015D BB82 OUT P12,R24
(0021) delay_ms(10000);
015E E100 LDI R16,0x10
015F E217 LDI R17,0x27
0160 DEE4 RCALL _delay_ms
(0022) PORTD = 0x60; //右转//0110 0000
0161 E680 LDI R24,0x60
0162 BB82 OUT P12,R24
(0023) delay_ms(10000);
0163 E100 LDI R16,0x10
0164 E217 LDI R17,0x27
0165 DEDF RCALL _delay_ms
(0024) PORTD = 0x20; //右转//0010 0000
0166 E280 LDI R24,0x20
0167 BB82 OUT P12,R24
(0025) delay_ms(10000);
0168 E100 LDI R16,0x10
0169 E217 LDI R17,0x27
016A DEDA RCALL _delay_ms
(0026) PORTD = 0x50; //后退//0101 0000
016B E580 LDI R24,0x50
016C BB82 OUT P12,R24
(0027) delay_ms(10000);
016D E100 LDI R16,0x10
016E E217 LDI R17,0x27
016F DED5 RCALL _delay_ms
0170 CFE1 RJMP 0x0152
(0028) }
(0029) }
FILE: <library>
0171 9508 RET
push_gset1:
0172 935A ST R21,-Y
0173 934A ST R20,-Y
0174 9508 RET
pop_gset1:
0175 E0E1 LDI R30,1
pop:
0176 9149 LD R20,Y+
0177 9159 LD R21,Y+
0178 FDE0 SBRC R30,0
0179 9508 RET
017A 9169 LD R22,Y+
017B 9179 LD R23,Y+
017C FDE1 SBRC R30,1
017D 9508 RET
017E 90A9 LD R10,Y+
017F 90B9 LD R11,Y+
0180 FDE2 SBRC R30,2
0181 9508 RET
0182 90C9 LD R12,Y+
0183 90D9 LD R13,Y+
0184 FDE3 SBRC R30,3
0185 9508 RET
0186 90E9 LD R14,Y+
0187 90F9 LD R15,Y+
0188 9508 RET
push_gset2:
0189 937A ST R23,-Y
018A 936A ST R22,-Y
018B CFE6 RJMP push_gset1
pop_gset2:
018C E0E2 LDI R30,2
018D CFE8 RJMP pop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -