📄 sl3010_1.lst
字号:
0107 3280 CPI R24,0x20
0108 F4F1 BNE 0x0127
(0212) {
(0213) stop(); //停止运动,熄灭指示灯
0109 DFB2 RCALL _stop
(0214) delay_ms(touch_time*4);
010A EE08 LDI R16,0xE8
010B E013 LDI R17,3
010C DF83 RCALL _delay_ms
010D C018 RJMP 0x0126
(0215) while(1)
(0216) {
(0217) sw_in = PINC & 0x10;
010E B383 IN R24,0x13
010F 7180 ANDI R24,0x10
0110 938000E5 STS _sw_in,R24
(0218) if(sw_in == 0x00)
0112 2388 TST R24
0113 F409 BNE 0x0115
(0219) {break;}
0114 C012 RJMP 0x0127
(0220) PORTA = 0x55;
0115 E585 LDI R24,0x55
0116 BB8B OUT 0x1B,R24
(0221) delay_ms(250);
0117 EF0A LDI R16,0xFA
0118 E010 LDI R17,0
0119 DF76 RCALL _delay_ms
(0222) PORTA = 0xAA;
011A EA8A LDI R24,0xAA
011B BB8B OUT 0x1B,R24
(0223) delay_ms(250);
011C EF0A LDI R16,0xFA
011D E010 LDI R17,0
011E DF71 RCALL _delay_ms
(0224) remote_in = PINB & 0x0f;
011F B386 IN R24,0x16
0120 708F ANDI R24,0xF
0121 938000E4 STS _remote_in,R24
(0225) if(remote_in != 0x00)
0123 2388 TST R24
0124 F009 BEQ 0x0126
(0226) {break;}
0125 C001 RJMP 0x0127
0126 CFE7 RJMP 0x010E
(0227) }
(0228) }
(0229) }
0127 9508 RET
(0230)
(0231) void mic_startup()
(0232) {//声控启动程序运行
_mic_startup:
0128 C007 RJMP 0x0130
(0233)
(0234) while(1)//等待pc3(声控键)按键按下
(0235) { //无键按下等待
(0236) mic_in = PINC & 0x08; //pc2=0
0129 B383 IN R24,0x13
012A 7088 ANDI R24,0x8
012B 938000E3 STS _mic_in,R24
(0237) if(mic_in == 0){break;}
012D 2388 TST R24
012E F409 BNE 0x0130
012F C001 RJMP 0x0131
0130 CFF8 RJMP 0x0129
(0238) }//有键按下运行下面的程序
(0239) }
0131 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:
0132 B386 IN R24,0x16
0133 708F ANDI R24,0xF
0134 938000E4 STS _remote_in,R24
(0256) switch (remote_in)
0136 2F08 MOV R16,R24
0137 2711 CLR R17
0138 3000 CPI R16,0
0139 0701 CPC R16,R17
013A F409 BNE 0x013C
013B C062 RJMP 0x019E
013C 3001 CPI R16,1
013D E0E0 LDI R30,0
013E 071E CPC R17,R30
013F F409 BNE 0x0141
0140 C04A RJMP 0x018B
0141 3002 CPI R16,2
0142 E0E0 LDI R30,0
0143 071E CPC R17,R30
0144 F0F1 BEQ 0x0163
0145 3004 CPI R16,4
0146 E0E0 LDI R30,0
0147 071E CPC R17,R30
0148 F029 BEQ 0x014E
0149 3008 CPI R16,0x8
014A E0E0 LDI R30,0
014B 071E CPC R17,R30
014C F151 BEQ 0x0177
014D C050 RJMP 0x019E
(0257) {//检测遥控器是否有键按下
(0258) case 0x04: // < A >
(0259) delay_time2 = delay_time2 - 50;
014E 918000DF LDS R24,_delay_time2
0150 919000E0 LDS R25,_delay_time2+1
0152 97C2 SBIW R24,0x32
0153 939000E0 STS _delay_time2+1,R25
0155 938000DF STS _delay_time2,R24
(0260) if(delay_time2 == 50)
0157 3382 CPI R24,0x32
0158 E0E0 LDI R30,0
0159 079E CPC R25,R30
015A F009 BEQ 0x015C
015B C042 RJMP 0x019E
(0261) {delay_time2 = 100;}
015C E684 LDI R24,0x64
015D E090 LDI R25,0
015E 939000E0 STS _delay_time2+1,R25
0160 938000DF STS _delay_time2,R24
(0262) break;
0162 C03B RJMP 0x019E
(0263) case 0x02: // < B >
(0264) delay_time1 = delay_time1 + 50;
0163 918000E1 LDS R24,_delay_time1
0165 919000E2 LDS R25,_delay_time1+1
0167 96C2 ADIW R24,0x32
0168 939000E2 STS _delay_time1+1,R25
016A 938000E1 STS _delay_time1,R24
(0265) if(delay_time1 == 2050)
016C 3082 CPI R24,2
016D E0E8 LDI R30,0x8
016E 079E CPC R25,R30
016F F571 BNE 0x019E
(0266) {delay_time1 = 2000;}
0170 ED80 LDI R24,0xD0
0171 E097 LDI R25,7
0172 939000E2 STS _delay_time1+1,R25
0174 938000E1 STS _delay_time1,R24
(0267) break;
0176 C027 RJMP 0x019E
(0268) case 0x08: // < C >
(0269) delay_time1 = delay_time1 - 50;
0177 918000E1 LDS R24,_delay_time1
0179 919000E2 LDS R25,_delay_time1+1
017B 97C2 SBIW R24,0x32
017C 939000E2 STS _delay_time1+1,R25
017E 938000E1 STS _delay_time1,R24
(0270) if(delay_time1 == 50)
0180 3382 CPI R24,0x32
0181 E0E0 LDI R30,0
0182 079E CPC R25,R30
0183 F4D1 BNE 0x019E
(0271) {delay_time1 = 100;}
0184 E684 LDI R24,0x64
0185 E090 LDI R25,0
0186 939000E2 STS _delay_time1+1,R25
0188 938000E1 STS _delay_time1,R24
(0272) break;
018A C013 RJMP 0x019E
(0273) case 0x01: // < D >
(0274) delay_time2 = delay_time2 + 50;
018B 918000DF LDS R24,_delay_time2
018D 919000E0 LDS R25,_delay_time2+1
018F 96C2 ADIW R24,0x32
0190 939000E0 STS _delay_time2+1,R25
0192 938000DF STS _delay_time2,R24
(0275) if(delay_time2 == 2050)
0194 3082 CPI R24,2
0195 E0E8 LDI R30,0x8
0196 079E CPC R25,R30
0197 F431 BNE 0x019E
(0276) {delay_time2 = 2000;}
0198 ED80 LDI R24,0xD0
0199 E097 LDI R25,7
019A 939000E0 STS _delay_time2+1,R25
019C 938000DF STS _delay_time2,R24
(0277) break;
(0278) case 0x00: // 无按键
(0279) break;
(0280) }
(0281) }
019E 9508 RET
FILE: E:\icc\iccavr\sl3010\sl3010_1\sl3010_1.c
(0001) /*******************************************/
(0002) /* 广州天河双龙电子公司 */
(0003) /* http://www.sl.com.cn */
(0004) /* 020-85510191,87578852,87578872 */
(0005) /* nikko@sl.com.cn */
(0006) /*******************************************/
(0007)
(0008) //将 pd0 接低电平,pd3,pd2,pd1 保持高电平
(0009) // 或按下遥控器<A>(保持 0.5s) 进入遥控机器人运行环境
(0010)
(0011) //将 pd1 接低电平,pd3,pd2,pd0 保持高电平
(0012) // 或按下遥控器<B>(保持 0.5s) 进入悬崖车机器人运行环境
(0013)
(0014) //将 pd2 接低电平,pd3,pd1,pd0 保持高电平
(0015) // 或按下遥控器<C>(保持 0.5s) 进入音乐车机器人运行环境
(0016)
(0017) //将 pd3 接低电平,pd2,pd1,pd0 保持高电平
(0018) // 或按下遥控器<D>(保持 0.5s) 进入霓虹灯机器人运行环境
(0019)
(0020) //将 sl3010.c 文件拷贝到 icc avr 安装目录的<include>文件夹
(0021) //sl3010.c 是sl3010机器人的子函数库
(0022) //程序中调用此文件后 #include <sl3010.c>
(0023) //可直接调用里面的函数和变量
(0024)
(0025) #include <io8515v.h>
(0026) #include <macros.h>
(0027) #include <sl3010.c>
(0028) #include <eeprom.h>
(0029)
(0030) static unsigned char led_data[]=
(0031) {//设置LED广告灯数据表
(0032) 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0033) 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0034) 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0035) 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0036) 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0037) 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0038) 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0039) 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0040) 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0041) 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0042) 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,
(0043) 0x0a,0x0a
(0044) };
(0045) unsigned char pa,timers;
(0046) unsigned int led_delayms=600;
(0047) //定义为字符型变量
(0048) void led_car(void)
(0049) {
(0050) PORTA = 0x24;
_led_car:
019F E284 LDI R24,0x24
01A0 BB8B OUT 0x1B,R24
(0051)
(0052) work_status = 0x40;//置对应的工作状态标志
01A1 E480 LDI R24,0x40
01A2 938000E6 STS _work_status,R24
(0053)
(0054) mic_startup(); //等待声控启动
01A4 DF83 RCALL _mic_startup
01A5 C20E RJMP 0x03B4
(0055)
(0056) while (1)
(0057) {
(0058) pa = 0x00;
01A6 2422 CLR R2
01A7 922000DE STS _pa,R2
(0059) for(timers=0;timers<4;timers++)
01A9 922000DD STS _timers,R2
01AB C014 RJMP 0x01C0
(0060) {//8 LED 整体亮灭闪烁
(0061) PORTA=pa;
01AC 902000DE LDS R2,_pa
01AE BA2B OUT 0x1B,R2
(0062) delay_ms(led_delayms*2);
01AF 910000D6 LDS R16,0xD6
01B1 911000D7 LDS R17,0xD7
01B3 0F00 LSL R16
01B4 1F11 ROL R17
01B5 DEDA RCALL _delay_ms
(0063) pa=~pa;
01B6 902000DE LDS R2,_pa
01B8 9420 COM R2
01B9 922000DE STS _pa,R2
01BB 918000DD LDS R24,_timers
01BD 5F8F SUBI R24,0xFF
01BE 938000DD STS _timers,R24
01C0 918000DD LDS R24,_timers
01C2 3084 CPI R24,4
01C3 F340 BCS 0x01AC
(0064) }
(0065)
(0066) pa = 0x01;
01C4 E081 LDI R24,1
01C5 938000DE STS _pa,R24
(0067) for(timers=0;timers<8;timers++)
01C7 2422 CLR R2
01C8 922000DD STS _timers,R2
01CA C015 RJMP 0x01E0
(0068) {
(0069) PORTA=~pa;
01CB 902000DE LDS R2,_pa
01CD 9420 COM R2
01CE BA2B OUT 0x1B,R2
(0070) delay_ms(led_delayms/2);
01CF 910000D6 LDS R16,0xD6
01D1 911000D7 LDS R17,0xD7
01D3 9516 LSR R17
01D4 9507 ROR R16
01D5 DEBA RCALL _delay_ms
(0071) pa=pa<<1;
01D6 902000DE LDS R2,_pa
01D8 0C22 LSL R2
01D9 922000DE STS _pa,R2
01DB 918000DD LDS R24,_timers
01DD 5F8F SUBI R24,0xFF
01DE 938000DD STS _timers,R24
01E0 918000DD LDS R24,_timers
01E2 3088 CPI R24,0x8
01E3 F338 BCS 0x01CB
(0072) }
(0073)
(0074) pa = 0x80;
01E4 E880 LDI R24,0x80
01E5 938000DE STS _pa,R24
(0075) for(timers=0;timers<8;timers++)
01E7 2422 CLR R2
01E8 922000DD STS _timers,R2
01EA C015 RJMP 0x0200
(0076) {
(0077) PORTA=~pa;
01EB 902000DE LDS R2,_pa
01ED 9420 COM R2
01EE BA2B OUT 0x1B,R2
(0078) delay_ms(led_delayms/2);
01EF 910000D6 LDS R16,0xD6
01F1 911000D7 LDS R17,0xD7
01F3 9516 LSR R17
01F4 9507 ROR R16
01F5 DE9A RCALL _delay_ms
(0079) pa=pa>>1;
01F6 902000DE LDS R2,_pa
01F8 9426 LSR R2
01F9 922000DE STS _pa,R2
01FB 918000DD LDS R24,_timers
01FD 5F8F SUBI R24,0xFF
01FE 938000DD STS _timers,R24
0200 918000DD LDS R24,_timers
0202 3088 CPI R24,0x8
0203 F338 BCS 0x01EB
(0080) }
(0081)
(0082) pa = 0x01;
0204 E081 LDI R24,1
0205 938000DE STS _pa,R24
(0083) for(timers=0;timers<8;timers++)
0207 2422 CLR R2
0208 922000DD STS _timers,R2
020A C018 RJMP 0x0223
(0084) {
(0085) PORTA=~pa;
020B 902000DE LDS R2,_pa
020D 9420 COM R2
020E BA2B OUT 0x1B,R2
(0086) delay_ms(led_delayms/2);
020F 910000D6 LDS R16,0xD6
0211 911000D7 LDS R17,0xD7
0213 9516 LSR R17
0214 9507 ROR R16
0215 DE7A RCALL _delay_ms
(0087) pa=pa|(pa<<1);
0216 902000DE LDS R2,_pa
0218 0C22 LSL R2
0219 903000DE LDS R3,_pa
021B 2832 OR R3,R2
021C 923000DE STS _pa,R3
021E 918000DD LDS R24,_timers
0220 5F8F SUBI R24,0xFF
0221 938000DD STS _timers,R24
0223 918000DD LDS R24,_timers
0225 3088 CPI R24,0x8
0226 F320 BCS 0x020B
(0088) }
(0089)
(0090) pa = 0x7f;
0227 E78F LDI R24,0x7F
0228 938000DE STS _pa,R24
(0091) for(timers=0;timers<8;timers++)
022A 2422 CLR R2
022B 922000DD STS _timers,R2
022D C018 RJMP 0x0246
(0092) {
(0093) PORTA=~pa;
022E 902000DE LDS R2,_pa
0230 9420 COM R2
0231 BA2B OUT 0x1B,R2
(0094) delay_ms(led_delayms/2);
0232 910000D6 LDS R16,0xD6
0234 911000D7 LDS R17,0xD7
0236 9516 LSR R17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -