📄 sl3010_2.s
字号:
.module sl3010_2.c
.area text(rom, con, rel)
.dbfile e:/ICC/include/sl3010.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 83
; /*******************************************/
; /* 广州天河双龙电子公司 */
; /* http://www.sl.com.cn */
; /* 020-85510191,87578852,87578872 */
; /* nikko@sl.com.cn */
; /*******************************************/
;
; //pd3,pd2,pd1,pd0 短路块全部接上
; // 按下遥控器<A>(保持 0.5s) 进入遥控机器人运行环境
; // 按下遥控器<B>(保持 0.5s) 进入悬崖车机器人运行环境
; // 按下遥控器<C>(保持 0.5s) 进入音乐车机器人运行环境
; // 按下遥控器<D>(保持 0.5s) 进入霓虹灯机器人运行环境
;
; //pd3,pd2,pd1,pd0 短路块没有全部接上
; // 按下遥控器<A>(保持 0.5s) 机器人走四方形
; // 按下遥控器<B>(保持 0.5s) 机器人走“8”字
; // 按下遥控器<C>(保持 0.5s) 寻迹机器人运行环境
; // 按下遥控器<D>(保持 0.5s) 追光机器人运行环境
;
; //将 sl3010.c 文件拷贝到 icc avr 安装目录的<include>文件夹
; //sl3010.c 是sl3010机器人的子函数库
; //程序中调用此文件后 #include <sl3010.c>
; //可直接调用里面的函数和变量
;
; #include <io8515v.h>
; #include <macros.h>
; #include <sl3010.c>
; #include <eeprom.h>
;
; static unsigned char led_data[]=
; {//设置LED广告灯数据表
; 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
; 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
; 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
; 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
; 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
; 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
; 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
; 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
; 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
; 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
; 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,
; 0x0a,0x0a
; };
; unsigned char pa,timers;
; unsigned int led_delayms=600;
; //定义为字符型变量
; void led_car(void)
; {
; PORTA = 0x24;//0010,0100
;
; work_status = 0x40;//置对应的工作状态标志
;
; mic_startup(); //等待声控启动
;
; while (1)
; {
; pa = 0x00;
; for(timers=0;timers<4;timers++)
; {//8 LED 整体亮灭闪烁
; PORTA=pa;
; delay_ms(led_delayms*2);
; pa=~pa;
; }
;
; pa = 0x01;
; for(timers=0;timers<8;timers++)
; {
; PORTA=~pa;
; delay_ms(led_delayms/2);
; pa=pa<<1;
; }
;
; pa = 0x80;
; for(timers=0;timers<8;timers++)
; {
; PORTA=~pa;
; delay_ms(led_delayms/2);
; pa=pa>>1;
; }
;
; pa = 0x01;
; for(timers=0;timers<8;timers++)
.dbline 84
; {
ldi R24,255
out 0x1a,R24
.dbline 84
out 0x1b,R24
.dbline 85
; PORTA=~pa;
ldi R24,128
out 0x17,R24
.dbline 85
ldi R24,255
out 0x18,R24
.dbline 86
; delay_ms(led_delayms/2);
ldi R24,1
out 0x14,R24
.dbline 86
ldi R24,255
out 0x15,R24
.dbline 87
; pa=pa|(pa<<1);
ldi R24,240
out 0x11,R24
.dbline 87
ldi R24,255
out 0x12,R24
.dbline -2
.dbline 88
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 91
;
; pa = 0x7f;
; for(timers=0;timers<8;timers++)
L3:
.dbline 93
; {
; PORTA=~pa;
.dbline 94
; delay_ms(led_delayms/2);
subi R16,1
sbci R17,0
.dbline 95
; pa=pa & (pa>>1);
L4:
.dbline 96
; }
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L3
.dbline -2
.dbline 97
;
L2:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
rcall push_gset1
mov R20,R16
mov R21,R17
.dbline -1
.dbline 100
; pa = 0x80;
; for(timers=0;timers<8;timers++)
; {
rjmp L8
L7:
.dbline 102
.dbline 103
ldi R16,1000
ldi R17,3
rcall _delay_us
.dbline 104
subi R20,1
sbci R21,0
.dbline 105
L8:
.dbline 101
; PORTA=~pa;
cpi R20,0
cpc R20,R21
brne L7
X0:
.dbline -2
.dbline 106
; delay_ms(led_delayms/2);
; pa=pa|(pa>>1);
; }
;
; pa = 0xfe;
L6:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e turn_right _turn_right fV
.even
_turn_right::
.dbline -1
.dbline 109
; for(timers=0;timers<8;timers++)
; {
; PORTA=~pa;
.dbline 110
; delay_ms(led_delayms/2);
ldi R24,96
out 0x12,R24
.dbline 111
; pa=pa & (pa<<1);
ldi R24,204
out 0x1b,R24
.dbline -2
.dbline 112
; }
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_left _turn_left fV
.even
_turn_left::
.dbline -1
.dbline 115
;
; pa = 0x03;
; for(timers=0;timers<4;timers++)
.dbline 116
; {
ldi R24,144
out 0x12,R24
.dbline 117
; PORTA=~pa;
ldi R24,51
out 0x1b,R24
.dbline -2
.dbline 118
; delay_ms(led_delayms/2);
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_right_s _turn_right_s fV
.even
_turn_right_s::
.dbline -1
.dbline 120
; pa=pa<<2;
; }
.dbline 121
;
ldi R24,32
out 0x12,R24
.dbline 122
; pa = 0xc0;
ldi R24,207
out 0x1b,R24
.dbline -2
.dbline 123
; for(timers=0;timers<4;timers++)
L12:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_left_s _turn_left_s fV
.even
_turn_left_s::
.dbline -1
.dbline 126
; {
; PORTA=~pa;
; delay_ms(led_delayms/2);
.dbline 127
; pa=pa>>2;
ldi R24,128
out 0x12,R24
.dbline 128
; }
ldi R24,243
out 0x1b,R24
.dbline -2
.dbline 129
;
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e backward _backward fV
.even
_backward::
.dbline -1
.dbline 132
; pa = 0x03;
; for(timers=0;timers<4;timers++)
; {
.dbline 133
; PORTA=~pa;
ldi R24,80
out 0x12,R24
.dbline 134
; delay_ms(led_delayms/2);
ldi R24,60
out 0x1b,R24
.dbline -2
.dbline 135
; pa=pa | (pa<<2);
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e forward _forward fV
.even
_forward::
.dbline -1
.dbline 138
; }
;
; pa = 0x3f;
.dbline 139
; for(timers=0;timers<4;timers++)
ldi R24,160
out 0x12,R24
.dbline 140
; {
ldi R24,195
out 0x1b,R24
.dbline -2
.dbline 141
; PORTA=~pa;
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e stop _stop fV
.even
_stop::
.dbline -1
.dbline 144
; delay_ms(led_delayms/2);
; pa=pa & (pa>>2);
; }
.dbline 145
;
ldi R24,255
out 0x12,R24
.dbline 146
; pa = 0xc0;
out 0x1b,R24
.dbline -2
.dbline 147
; for(timers=0;timers<4;timers++)
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e sw_touch _sw_touch fV
.even
_sw_touch::
.dbline -1
.dbline 163
; {
; PORTA=~pa;
; delay_ms(led_delayms/2);
; pa=pa | (pa>>2);
; }
;
; pa = 0xfc;
; for(timers=0;timers<4;timers++)
; {
; PORTA=~pa;
; delay_ms(led_delayms/2);
; pa=pa & (pa<<2);
; }
;
; for(timers=0;;timers++)
; {
.dbline 164
; pa = led_data[timers];
in R24,0x13
andi R24,16
sts _sw_in,R24
.dbline 165
; if(pa == 0x0a){break;}
tst R24
brne L18
.dbline 166
; PORTA = pa;
.dbline 167
; delay_ms(led_delayms/2);
rcall _backward
.dbline 168
; }
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 170
;
; pa = 0x55;
lds R24,_work_status
cpi R24,112
brne L20
.dbline 171
; for(timers=0;timers<16;timers++)
.dbline 172
; {//8 LED 流水灯
rcall _stop
rjmp L23
L22:
.dbline 174
.dbline 175
ldi R24,85
out 0x1b,R24
.dbline 176
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 177
ldi R24,170
out 0x1b,R24
.dbline 178
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 179
L23:
.dbline 173
; PORTA=pa;
rjmp L22
X1:
.dbline 180
; delay_ms(led_delayms);
; pa=~pa;
; }
;
; led_delayms = led_delayms - 200;
; if(led_delayms == 200)
; {
L20:
.dbline 182
; led_delayms = 800;
; }
rcall _turn_left
.dbline 183
; }
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 184
; }
L18:
.dbline 186
;
; /*******************************************/
in R24,0x16
andi R24,112
sts _sw_in,R24
.dbline 187
; /* 电子音乐演示程序 */
cpi R24,80
brne L25
.dbline 188
; /*******************************************/
.dbline 189
; // 在 icc avr 所在目录的 <include>文件夹中有 "sl3010.c" 文件
rcall _forward
.dbline 190
; //使用说明:音乐输出端口:PORTC.0,音乐数据存放
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 192
; //于AT90S8515 的EEPROM存贮器中。
; // 可以用并口下载软件写入新的音乐文件
rcall _turn_left
.dbline 193
; //PA口为音乐灯,当不同的音乐节奏,点亮不同的灯。
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 194
;
L25:
.dbline 195
;
lds R24,_sw_in
cpi R24,48
brne L27
.dbline 196
; /* 音乐数据 */
.dbline 197
; /* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
rcall _backward
.dbline 198
; /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 200
; /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
; /* 高1-F*/
rcall _turn_left
.dbline 201
; #pragma data:eeprom
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 202
; unsigned char sound[]={ 0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
L27:
.dbline 203
; 0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
lds R24,_sw_in
cpi R24,96
brne L29
.dbline 204
; 0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
.dbline 205
; 0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
rcall _backward
.dbline 206
; 0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 208
; 0x48,0x48,
;
rcall _turn_left
.dbline 209
; 0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 210
; 0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
L29:
.dbline 211
; 0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
lds R24,_sw_in
cpi R24,32
brne L31
.dbline 212
; 0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
.dbline 213
; 0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
rcall _stop
.dbline 214
; 0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
ldi R16,1000
ldi R17,3
rcall _delay_ms
rjmp L34
L33:
.dbline 216
; 0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
; 0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
.dbline 217
; 0x46,0x46,0x46,0x46,0x00
in R24,0x13
andi R24,16
sts _sw_in,R24
.dbline 218
; };
tst R24
brne L36
.dbline 219
; #pragma data:data
.dbline 219
rjmp L35
L36:
.dbline 220
; /* 音阶表 */
ldi R24,85
out 0x1b,R24
.dbline 221
; const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 222
; RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
ldi R24,170
out 0x1b,R24
.dbline 223
; /* 音阶重装常数 */
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 224
; unsigned int toneconst;
in R24,0x16
andi R24,15
sts _remote_in,R24
.dbline 225
;
tst R24
breq L38
.dbline 226
; #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
.dbline 226
rjmp L35
L38:
.dbline 227
L34:
.dbline 215
rjmp L33
L35:
.dbline 228
L31:
.dbline -2
.dbline 229
; void timer1_ovf_isr(void)
; {
; TCNT1=toneconst;
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e mic_startup _mic_startup fV
.even
_mic_startup::
.dbline -1
.dbline 232
; PORTC^=1;
; }
;
rjmp L42
L41:
.dbline 235
; void music_car(void)
; {
; unsigned char temp,temp1;
.dbline 236
; unsigned int sound_add=0;
in R24,0x13
andi R24,8
sts _mic_in,R24
.dbline 237
;
tst R24
brne L44
.dbline 237
.dbline 237
rjmp L43
L44:
.dbline 238
L42:
.dbline 234
rjmp L41
L43:
.dbline -2
.dbline 239
; PORTA = 0x18; //0001,1000
;
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e remote_auto_time _remote_auto_time fV
.even
_remote_auto_time::
.dbline -1
.dbline 254
; work_status = 0x30; //置对应的工作状态标志
;
; SEI();
;
; mic_startup(); //等待声控启动
;
; TCCR1A = 0x00;
; TCCR1B =(1<<CS11);//8分频
; temp1=EEPROMread((int)&sound[sound_add]);
; while(temp1!=0)
; {
; temp=temp1;
; temp&=0x0f;
; //PA口为音乐灯
; if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
.dbline 255
; if(temp==5 || temp==6){PORTA = 0xfc;}
in R24,0x16
andi R24,15
sts _remote_in,R24
.dbline 256
; if(temp==7 || temp==8 ){PORTA = 0xf8;}
mov R16,R24
clr R17
cpi R16,0
cpc R16,R17
brne X4
rjmp L48
X4:
X2:
cpi R16,1
ldi R30,0
cpc R17,R30
brne X5
rjmp L59
X5:
cpi R16,2
ldi R30,0
cpc R17,R30
breq L53
cpi R16,4
ldi R30,0
cpc R17,R30
breq L50
cpi R16,8
ldi R30,0
cpc R17,R30
breq L56
rjmp L47
X3:
.dbline 257
; if(temp==9){PORTA = 0xf0;}
L50:
.dbline 259
; if(temp==10){PORTA = 0xe0;}
; if(temp==11){PORTA = 0xc0;}
lds R24,_delay_time2
lds R25,_delay_time2+1
sbiw R24,50
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 260
; if(temp==12){PORTA = 0x80;}
cpi R24,50
ldi R30,0
cpc R25,R30
breq X6
rjmp L48
X6:
.dbline 261
; if(temp==13||temp==14 || temp==15){PORTA = 0x00;}
.dbline 261
ldi R24,100
ldi R25,0
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 261
.dbline 262
;
rjmp L48
L53:
.dbline 264
; if(temp!=0)
; {
lds R24,_delay_time1
lds R25,_delay_time1+1
adiw R24,50
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 265
; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
cpi R24,2
ldi R30,8
cpc R25,R30
brne L48
.dbline 266
; temp--;
.dbline 266
ldi R24,2000
ldi R25,7
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 266
.dbline 267
; toneconst=TONETABLE[temp];
rjmp L48
L56:
.dbline 269
; TCNT1=toneconst;
; }
lds R24,_delay_time1
lds R25,_delay_time1+1
sbiw R24,50
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 270
; temp=temp1;
cpi R24,50
ldi R30,0
cpc R25,R30
brne L48
.dbline 271
; temp>>=4;
.dbline 271
ldi R24,100
ldi R25,0
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 271
.dbline 272
; temp&=0x0f;
rjmp L48
L59:
.dbline 274
; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
; TIMSK&=~(1<<TOIE1);
lds R24,_delay_time2
lds R25,_delay_time2+1
adiw R24,50
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 275
; sound_add++;
cpi R24,2
ldi R30,8
cpc R25,R30
brne L48
.dbline 276
; temp1=EEPROMread((int)&sound[sound_add]);
.dbline 276
ldi R24,2000
ldi R25,7
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 276
.dbline 277
; }
.dbline 279
; delay_ms(1000);
; }
L47:
L48:
.dbline -2
.dbline 281
;
; //PORTD = 0xA0;//前行//1010 0000 //PORTA = 0xC3;//1100,0011
L46:
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile e:/ICC/include/sl3010.c
_led_data:
.blkb 2
.area idata
.byte 254,253
.area data(ram, con, rel)
.dbfile e:/ICC/include/sl3010.c
.blkb 2
.area idata
.byte 251,247
.area data(ram, con, rel)
.dbfile e:/ICC/include/sl3010.c
.blkb 2
.area idata
.byte 239,223
.area data(ram, con, rel)
.dbfile e:/ICC/include/sl3010.c
.blkb 2
.area idata
.byte 191,127
.area data(ram, con, rel)
.dbfile e:/ICC/include/sl3010.c
.blkb 2
.area idata
.byte 191,223
.area data(ram, con, rel)
.dbfile e:/ICC/include/sl3010.c
.blkb 2
.area idata
.byte 239,247
.area data(ram, con, rel)
.dbfile e:/ICC/include/sl3010.c
.blkb 2
.area idata
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -