📄 cny.lst
字号:
(0187) if(sw_in == 0x50)// 0b 0101,0000 尾部开关接触
0098 3580 CPI R24,0x50
0099 F441 BNE 0x00A2
(0188) {//前行,左转
(0189) forward(); //前行
009A DFD1 RCALL _forward
(0190) delay_ms(touch_time);
009B EF0A LDI R16,0xFA
009C E010 LDI R17,0
009D DFA7 RCALL _delay_ms
(0191)
(0192) turn_left(); //左转
009E DFB9 RCALL _turn_left
(0193) delay_ms(touch_time);
009F EF0A LDI R16,0xFA
00A0 E010 LDI R17,0
00A1 DFA3 RCALL _delay_ms
(0194) }
(0195) if(sw_in == 0x30)// 0b 0011,0000 右侧开关接触
00A2 91800067 LDS R24,_sw_in
00A4 3380 CPI R24,0x30
00A5 F441 BNE 0x00AE
(0196) {//后退,左转
(0197) backward(); //后退
00A6 DFC0 RCALL _backward
(0198) delay_ms(touch_time);
00A7 EF0A LDI R16,0xFA
00A8 E010 LDI R17,0
00A9 DF9B RCALL _delay_ms
(0199)
(0200) turn_left(); //左转
00AA DFAD RCALL _turn_left
(0201) delay_ms(touch_time);
00AB EF0A LDI R16,0xFA
00AC E010 LDI R17,0
00AD DF97 RCALL _delay_ms
(0202) }
(0203) if(sw_in == 0x60)// 0b 0110,0000 左侧开关接触
00AE 91800067 LDS R24,_sw_in
00B0 3680 CPI R24,0x60
00B1 F441 BNE 0x00BA
(0204) {//后退,左转
(0205) backward(); //后退
00B2 DFB4 RCALL _backward
(0206) delay_ms(touch_time);
00B3 EF0A LDI R16,0xFA
00B4 E010 LDI R17,0
00B5 DF8F RCALL _delay_ms
(0207)
(0208) turn_left(); //左转
00B6 DFA1 RCALL _turn_left
(0209) delay_ms(touch_time);
00B7 EF0A LDI R16,0xFA
00B8 E010 LDI R17,0
00B9 DF8B RCALL _delay_ms
(0210) }
(0211) if(sw_in == 0x20)// 0b 0010,0000 两侧开关同时接触,停止运动
00BA 91800067 LDS R24,_sw_in
00BC 3280 CPI R24,0x20
00BD F4F1 BNE 0x00DC
(0212) {
(0213) stop(); //停止运动,熄灭指示灯
00BE DFB2 RCALL _stop
(0214) delay_ms(touch_time*4);
00BF EE08 LDI R16,0xE8
00C0 E013 LDI R17,3
00C1 DF83 RCALL _delay_ms
00C2 C018 RJMP 0x00DB
(0215) while(1)
(0216) {
(0217) sw_in = PINC & 0x10;
00C3 B383 IN R24,0x13
00C4 7180 ANDI R24,0x10
00C5 93800067 STS _sw_in,R24
(0218) if(sw_in == 0x00)
00C7 2388 TST R24
00C8 F409 BNE 0x00CA
(0219) {break;}
00C9 C012 RJMP 0x00DC
(0220) PORTA = 0x55;
00CA E585 LDI R24,0x55
00CB BB8B OUT 0x1B,R24
(0221) delay_ms(250);
00CC EF0A LDI R16,0xFA
00CD E010 LDI R17,0
00CE DF76 RCALL _delay_ms
(0222) PORTA = 0xAA;
00CF EA8A LDI R24,0xAA
00D0 BB8B OUT 0x1B,R24
(0223) delay_ms(250);
00D1 EF0A LDI R16,0xFA
00D2 E010 LDI R17,0
00D3 DF71 RCALL _delay_ms
(0224) remote_in = PINB & 0x0f;
00D4 B386 IN R24,0x16
00D5 708F ANDI R24,0xF
00D6 93800066 STS _remote_in,R24
(0225) if(remote_in != 0x00)
00D8 2388 TST R24
00D9 F009 BEQ 0x00DB
(0226) {break;}
00DA C001 RJMP 0x00DC
00DB CFE7 RJMP 0x00C3
(0227) }
(0228) }
(0229) }
00DC 9508 RET
(0230)
(0231) void mic_startup()
(0232) {//声控启动程序运行
_mic_startup:
00DD C007 RJMP 0x00E5
(0233)
(0234) while(1)//等待pc3(声控键)按键按下
(0235) { //无键按下等待
(0236) mic_in = PINC & 0x08; //pc2=0
00DE B383 IN R24,0x13
00DF 7088 ANDI R24,0x8
00E0 93800065 STS _mic_in,R24
(0237) if(mic_in == 0){break;}
00E2 2388 TST R24
00E3 F409 BNE 0x00E5
00E4 C001 RJMP 0x00E6
00E5 CFF8 RJMP 0x00DE
(0238) }//有键按下运行下面的程序
(0239) }
00E6 9508 RET
(0240)
(0241) // #
(0242) // #
(0243) // #
(0244) // #
(0245) // # // delay_time1 转弯时间
(0246) // # # # # # // delay_time2 直行时间
(0247) // # X # //<A> 0x04 delay_time2-50
(0248) // # B C # //<B> 0x02 delay_time1+50
(0249) // # D A # //<C> 0x08 delay_time1-50
(0250) // # # //<D> 0x01 delay_time2+50
(0251) // # # # # // max: 2000 min: 200
(0252)
(0253) void remote_auto_time()
(0254) {
(0255) remote_in = PINB & 0x0F;
_remote_auto_time:
00E7 B386 IN R24,0x16
00E8 708F ANDI R24,0xF
00E9 93800066 STS _remote_in,R24
(0256) switch (remote_in)
00EB 2F08 MOV R16,R24
00EC 2711 CLR R17
00ED 3000 CPI R16,0
00EE 0701 CPC R16,R17
00EF F409 BNE 0x00F1
00F0 C062 RJMP 0x0153
00F1 3001 CPI R16,1
00F2 E0E0 LDI R30,0
00F3 071E CPC R17,R30
00F4 F409 BNE 0x00F6
00F5 C04A RJMP 0x0140
00F6 3002 CPI R16,2
00F7 E0E0 LDI R30,0
00F8 071E CPC R17,R30
00F9 F0F1 BEQ 0x0118
00FA 3004 CPI R16,4
00FB E0E0 LDI R30,0
00FC 071E CPC R17,R30
00FD F029 BEQ 0x0103
00FE 3008 CPI R16,0x8
00FF E0E0 LDI R30,0
0100 071E CPC R17,R30
0101 F151 BEQ 0x012C
0102 C050 RJMP 0x0153
(0257) {//检测遥控器是否有键按下
(0258) case 0x04: // < A >
(0259) delay_time2 = delay_time2 - 50;
0103 91800061 LDS R24,_delay_time2
0105 91900062 LDS R25,_delay_time2+1
0107 97C2 SBIW R24,0x32
0108 93900062 STS _delay_time2+1,R25
010A 93800061 STS _delay_time2,R24
(0260) if(delay_time2 == 50)
010C 3382 CPI R24,0x32
010D E0E0 LDI R30,0
010E 079E CPC R25,R30
010F F009 BEQ 0x0111
0110 C042 RJMP 0x0153
(0261) {delay_time2 = 100;}
0111 E684 LDI R24,0x64
0112 E090 LDI R25,0
0113 93900062 STS _delay_time2+1,R25
0115 93800061 STS _delay_time2,R24
(0262) break;
0117 C03B RJMP 0x0153
(0263) case 0x02: // < B >
(0264) delay_time1 = delay_time1 + 50;
0118 91800063 LDS R24,_delay_time1
011A 91900064 LDS R25,_delay_time1+1
011C 96C2 ADIW R24,0x32
011D 93900064 STS _delay_time1+1,R25
011F 93800063 STS _delay_time1,R24
(0265) if(delay_time1 == 2050)
0121 3082 CPI R24,2
0122 E0E8 LDI R30,0x8
0123 079E CPC R25,R30
0124 F571 BNE 0x0153
(0266) {delay_time1 = 2000;}
0125 ED80 LDI R24,0xD0
0126 E097 LDI R25,7
0127 93900064 STS _delay_time1+1,R25
0129 93800063 STS _delay_time1,R24
(0267) break;
012B C027 RJMP 0x0153
(0268) case 0x08: // < C >
(0269) delay_time1 = delay_time1 - 50;
012C 91800063 LDS R24,_delay_time1
012E 91900064 LDS R25,_delay_time1+1
0130 97C2 SBIW R24,0x32
0131 93900064 STS _delay_time1+1,R25
0133 93800063 STS _delay_time1,R24
(0270) if(delay_time1 == 50)
0135 3382 CPI R24,0x32
0136 E0E0 LDI R30,0
0137 079E CPC R25,R30
0138 F4D1 BNE 0x0153
(0271) {delay_time1 = 100;}
0139 E684 LDI R24,0x64
013A E090 LDI R25,0
013B 93900064 STS _delay_time1+1,R25
013D 93800063 STS _delay_time1,R24
(0272) break;
013F C013 RJMP 0x0153
(0273) case 0x01: // < D >
(0274) delay_time2 = delay_time2 + 50;
0140 91800061 LDS R24,_delay_time2
0142 91900062 LDS R25,_delay_time2+1
0144 96C2 ADIW R24,0x32
0145 93900062 STS _delay_time2+1,R25
0147 93800061 STS _delay_time2,R24
(0275) if(delay_time2 == 2050)
0149 3082 CPI R24,2
014A E0E8 LDI R30,0x8
014B 079E CPC R25,R30
014C F431 BNE 0x0153
(0276) {delay_time2 = 2000;}
014D ED80 LDI R24,0xD0
014E E097 LDI R25,7
014F 93900062 STS _delay_time2+1,R25
0151 93800061 STS _delay_time2,R24
(0277) break;
(0278) case 0x00: // 无按键
(0279) break;
(0280) }
(0281) }
0153 9508 RET
FILE: E:\icc\iccavr\sl3010\cny\cny.c
(0001) //ICC-AVR application builder : 03-1-20 17:20:32
(0002) // Target : 8515
(0003) // Crystal: 8.0000Mhz
(0004) //测试探测信号 由PA口的LED指示
(0005)
(0006)
(0007) #include <io8515v.h>
(0008) #include <macros.h>
(0009) #include <sl3010.c>
(0010) unsigned char cny;
(0011)
(0012)
(0013) //call this routine to initialise all peripherals
(0014) void init_devices(void)
(0015) {
(0016) //stop errant interrupts until set up
(0017) CLI(); //disable all interrupts
_init_devices:
0154 94F8 BCLR 7
(0018) port_init();
0155 DED7 RCALL _port_init
(0019)
(0020) MCUCR = 0x00;
0156 2422 CLR R2
0157 BE25 OUT 0x35,R2
(0021) GIMSK = 0x00;
0158 BE2B OUT 0x3B,R2
(0022) TIMSK = 0x00;
0159 BE29 OUT 0x39,R2
(0023) SEI(); //re-enable interrupts
015A 9478 BSET 7
(0024) //all peripherals are now initialised
(0025) }
015B 9508 RET
(0026)
(0027) //
(0028) void main(void)
(0029) {
(0030) init_devices();
_main:
015C DFF7 RCALL _init_devices
015D C005 RJMP 0x0163
(0031) while(1)
(0032) {
(0033) sw_touch();
015E DF16 RCALL _sw_touch
(0034) cny = PINC;
015F B223 IN R2,0x13
0160 92200060 STS _cny,R2
(0035) PORTA = cny;
0162 BA2B OUT 0x1B,R2
0163 CFFA RJMP 0x015E
(0036) }
(0037) }
FILE: <library>
0164 9508 RET
push_gset1:
0165 935A ST R21,-Y
0166 934A ST R20,-Y
0167 9508 RET
pop_gset1:
0168 E0E1 LDI R30,1
pop:
0169 9149 LD R20,Y+
016A 9159 LD R21,Y+
016B FDE0 SBRC R30,0
016C 9508 RET
016D 9169 LD R22,Y+
016E 9179 LD R23,Y+
016F FDE1 SBRC R30,1
0170 9508 RET
0171 90A9 LD R10,Y+
0172 90B9 LD R11,Y+
0173 FDE2 SBRC R30,2
0174 9508 RET
0175 90C9 LD R12,Y+
0176 90D9 LD R13,Y+
0177 FDE3 SBRC R30,3
0178 9508 RET
0179 90E9 LD R14,Y+
017A 90F9 LD R15,Y+
017B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -