📄 bianma.lst
字号:
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 D209 RCALL pop_gset2
00D5 9508 RET
_mic_startup:
mic_in --> R20
00D6 D1ED 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 D1E2 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 91800068 LDS R24,_delay_time2
0101 91900069 LDS R25,_delay_time2+1
0103 97C2 SBIW R24,0x32
0104 93900069 STS _delay_time2+1,R25
0106 93800068 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 93900069 STS _delay_time2+1,R25
0111 93800068 STS _delay_time2,R24
(0269) break;
0113 C03B RJMP 0x014F
(0270) case 0x02: // < B >
(0271) delay_time1 = delay_time1 + 50;
0114 9180006A LDS R24,_delay_time1
0116 9190006B LDS R25,_delay_time1+1
0118 96C2 ADIW R24,0x32
0119 9390006B STS _delay_time1+1,R25
011B 9380006A 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 9390006B STS _delay_time1+1,R25
0125 9380006A STS _delay_time1,R24
(0274) break;
0127 C027 RJMP 0x014F
(0275) case 0x08: // < C >
(0276) delay_time1 = delay_time1 - 50;
0128 9180006A LDS R24,_delay_time1
012A 9190006B LDS R25,_delay_time1+1
012C 97C2 SBIW R24,0x32
012D 9390006B STS _delay_time1+1,R25
012F 9380006A 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 9390006B STS _delay_time1+1,R25
0139 9380006A STS _delay_time1,R24
(0279) break;
013B C013 RJMP 0x014F
(0280) case 0x01: // < D >
(0281) delay_time2 = delay_time2 + 50;
013C 91800068 LDS R24,_delay_time2
013E 91900069 LDS R25,_delay_time2+1
0140 96C2 ADIW R24,0x32
0141 93900069 STS _delay_time2+1,R25
0143 93800068 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 93900069 STS _delay_time2+1,R25
014D 93800068 STS _delay_time2,R24
(0284) break;
(0285) case 0x00: // 无按键
(0286) break;
(0287) }
(0288) }
014F 9508 RET
FILE: E:\icc\iccavr\sl3010\remote\bianma\bianma.c
(0001) // Target : 8515
(0002) // Crystal: 8.0000Mhz
(0003) // 更新日期: 2003.03.18
(0004) // 接上遥控器,按动"A","B","C","D"会有LED灯指示
(0005) // 程序中每按键4次,认为一次输入,
(0006) //4个一组,根据按键的不同执行相应程序
(0007)
(0008) //按四次"A",运行悬崖车程序
(0009) //按四次"B",运行遥控车程序
(0010) //无键按下----------前行
(0011) //"A", 按住---------右转
(0012) //"B", 按住---------后退
(0013) //"C", 按住---------停止
(0014) //"D", 按住---------左转
(0015)
(0016) //按四次"C",运行音乐车程序
(0017) //按四次"D",运行霓虹车程序
(0018)
(0019) #include <io8515v.h>
(0020) #include <macros.h>
(0021) #include <sl3010.c>
(0022)
(0023) //#define A 0x04 //0b0000,0100
(0024) //#define B 0x02 //0b0000,0010
(0025) //#define C 0x08 //0b0000,1000
(0026) //#define D 0x01 //0b0000,0001
(0027) #define delaytime 300
(0028)
(0029) unsigned char bianma;
(0030) unsigned char pa,pb,pc,pd,sl,remote,bianma_count;
(0031)
(0032) //call this routine to initialise all peripherals
(0033) void init_devices(void)
(0034) {
(0035) //stop errant interrupts until set up
(0036) CLI(); //disable all interrupts
_init_devices:
0150 94F8 BCLR 7
(0037) port_init();
0151 DEDB RCALL _port_init
(0038)
(0039) MCUCR = 0x00;
0152 2422 CLR R2
0153 BE25 OUT P35,R2
(0040) GIMSK = 0x00;
0154 BE2B OUT P3B,R2
(0041) TIMSK = 0x00;
0155 BE29 OUT P39,R2
(0042) SEI(); //re-enable interrupts
0156 9478 BSET 7
(0043) //all peripherals are now initialised
(0044) }
0157 9508 RET
_remote_car:
temp --> Y+1
stop_rst --> R20
0158 D16B RCALL push_gset1
(0045)
(0046) void remote_car()
(0047) {
(0048) unsigned char stop_rst,temp;
(0049) DDRB = 0x00;PORTB = 0xFF;
0159 2422 CLR R2
015A BA27 OUT P17,R2
015B EF8F LDI R24,0xFF
015C BB88 OUT P18,R24
(0050) DDRA = 0xff;PORTA = 0xff;
015D BB8A OUT P1A,R24
015E BB8B OUT P1B,R24
015F C037 RJMP 0x0197
(0051) while(1)
(0052) {
(0053) remote = pb = PINB & 0x0F;
0160 B386 IN R24,P16
0161 708F ANDI R24,0xF
0162 2E28 MOV R2,R24
0163 92200065 STS _pb,R2
0165 92200061 STS _remote,R2
(0054) PORTA = ~pb;
0167 9420 COM R2
0168 BA2B OUT P1B,R2
(0055) if(pb == 0x04)
0169 91800065 LDS R24,_pb
016B 3084 CPI R24,4
016C F429 BNE 0x0172
(0056) {
(0057) PORTD = 0x60; //右转//0110 0000
016D E680 LDI R24,0x60
016E BB82 OUT P12,R24
(0058) PORTA = 0xCC; //1100,1100
016F EC8C LDI R24,0xCC
0170 BB8B OUT P1B,R24
(0059) stop_rst=0x00;
0171 2744 CLR R20
(0060) }
(0061) if(pb == 0x02)
0172 91800065 LDS R24,_pb
0174 3082 CPI R24,2
0175 F429 BNE 0x017B
(0062) {
(0063) PORTD = 0x50; //后退//0101 0000
0176 E580 LDI R24,0x50
0177 BB82 OUT P12,R24
(0064) PORTA = 0x3C; //0011,1100
0178 E38C LDI R24,0x3C
0179 BB8B OUT P1B,R24
(0065) stop_rst=0x00;
017A 2744 CLR R20
(0066) }
(0067) if(pb == 0x08)
017B 91800065 LDS R24,_pb
017D 3088 CPI R24,0x8
017E F421 BNE 0x0183
(0068) {
(0069) PORTD = 0xff; //stop
017F EF8F LDI R24,0xFF
0180 BB82 OUT P12,R24
(0070) PORTA = 0xff; //
0181 BB8B OUT P1B,R24
(0071) stop_rst++;
0182 9543 INC R20
(0072) }
(0073) if(pb == 0x01)
0183 91800065 LDS R24,_pb
0185 3081 CPI R24,1
0186 F429 BNE 0x018C
(0074) {
(0075) PORTD = 0x90; //左转//1001 0000
0187 E980 LDI R24,0x90
0188 BB82 OUT P12,R24
(0076) PORTA = 0x33; //0011,0011
0189 E383 LDI R24,0x33
018A BB8B OUT P1B,R24
(0077) stop_rst=0x00;
018B 2744 CLR R20
(0078) }
(0079) if(pb == 0x00)
018C 90200065 LDS R2,_pb
018E 2022 TST R2
018F F421 BNE 0x0194
(0080) {
(0081) PORTD = 0xA0; //前行//1010 0000
0190 EA80 LDI R24,0xA0
0191 BB82 OUT P12,R24
(0082) PORTA = 0xC3; //1100,0011
0192 EC83 LDI R24,0xC3
0193 BB8B OUT P1B,R24
(0083) }
(0084) /*
(0085) while(1)
(0086) {
(0087) temp = PINB & 0x0f;
(0088) if(temp != remote)
(0089) {break;}
(0090) }
(0091) if(stop_rst == 0x04)
(0092) {
(0093) PORTD = 0xff; //stop
(0094) PORTA=0xff; //
(0095) break;
(0096) }
(0097) */
(0098) delay_ms(100);
0194 E604 LDI R16,0x64
0195 E010 LDI R17,0
0196 DEAE RCALL _delay_ms
0197 CFC8 RJMP 0x0160
(0099) }
(0100) }
0198 D12E RCALL pop_gset1
0199 9508 RET
(0101)
(0102) void xuanya_car(void)
(0103) {
(0104) DDRC=0x01;PORTC=0xFF;
_xuanya_car:
019A E081 LDI R24,1
019B BB84 OUT P14,R24
019C EF8F LDI R24,0xFF
019D BB85 OUT P15,R24
(0105) DDRA=0xFF;PORTA=0xFF;
019E BB8A OUT P1A,R24
019F BB8B OUT P1B,R24
(0106) DDRD=0xFF;PORTD=0xFF;
01A0 BB81 OUT P11,R24
01A1 BB82 OUT P12,R24
01A2 C084 RJMP 0x0227
(0107) while(1)
(0108) {//左(pc7) 中(pc6) 右(pc5)
(0109) pc = PINC & 0x10;
01A3 B383 IN R24,P13
01A4 7180 ANDI R24,0x10
01A5 93800064 STS _pc,R24
(0110) if(pc==0x00)
01A7 2388 TST R24
01A8 F471 BNE 0x01B7
(0111) {
(0112) PORTD = 0x50;
01A9 E580 LDI R24,0x50
01AA BB82 OUT P12,R24
(0113) PORTA=0x3C;//后退
01AB E38C LDI R24,0x3C
01AC BB8B OUT P1B,R24
(0114) delay_ms(delaytime);
01AD E20C LDI R16,0x2C
01AE E011 LDI R17,1
01AF DE95 RCALL _delay_ms
(0115) PORTD = 0x60;
01B0 E680 LDI R24,0x60
01B1 BB82 OUT P12,R24
(0116) PORTA=0xCC;//右转
01B2 EC8C LDI R24,0xCC
01B3 BB8B OUT P1B,R24
(0117) delay_ms(delaytime/2);
01B4 E906 LDI R16,0x96
01B5 E010 LDI R17,0
01B6 DE8E RCALL _delay_ms
(0118) }
(0119) pc = PINC & 0xE0;
01B7 B383 IN R24,P13
01B8 7E80 ANDI R24,0xE0
01B9 93800064 STS _pc,R24
(0120) if(pc==0x40)
01BB 3480 CPI R24,0x40
01BC F489 BNE 0x01CE
(0121) {
(0122) PORTD = 0xFF;//刹车
01BD EF8F LDI R24,0xFF
01BE BB82 OUT P12,R24
(0123) PORTA = 0xFF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -