📄 xuanya_car.s
字号:
.module xuanya_car.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
; // PORTD = 0xA0; //前行//1010 0000 PORTA=0xC3; 1100,0011
; // PORTD = 0x90; //左转//1001 0000 PORTA=0x33; 0011,0011
; // PORTD = 0x80; //左转//1000 0000 PORTA=0xF3; 1111,0011
; // PORTD = 0x60; //右转//0110 0000 PORTA=0xCC; 1100,1100
; // PORTD = 0x20; //右转//0010 0000 PORTA=0xCF; 1100,1111
; // PORTD = 0x50; //后退//0101 0000 PORTA=0x3C; 0011,1100
;
; //PC3声控启动
; // 用PD7~PD4来作为电机驱动端
;
; #include <io8515v.h>
; #include <macros.h>
; #include <eeprom.h>
; #include <sl3010.c>
;
; #define xuanya_delayms 300
;
; //声控起动避悬崖,壁障碍运行程序,未起动时,PA口的8 LED 呈广告灯效果(霓虹灯)
; //声控起动后,机器人开始动作
; //探测到边缘,后退、转弯,并以伴有音乐提示。
;
; #pragma data:eeprom
; unsigned char sound[]={ //乐曲数据表
; //铃儿响叮当
; 0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
; 0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
; 0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
; 0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
; 0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
; 0x48,0x48,
;
; 0x00,0x00
; };
; #pragma data:data
;
; /* 音阶表 */
; const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
; RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
; /* 音阶重装常数 */
; unsigned int toneconst;
; unsigned int sound_add=0;
; unsigned int rst_time,delay_time1,delay_time2,led_delayms=600;
; unsigned char temp,temp1;
; unsigned char pa,pb,pc,pd,remote_in,cny_in,cny_times,cds,pd_select,remote_select;
; unsigned char gzsl,t0_times,timers;
; unsigned char sound_1,sound_2;
;
; const 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
; };
;
; const unsigned char sound_back[]={0x2a,0x2c,0x4d,0x4d,0x4d,0x2a,0x2c,0x49,0x49,0x49,0x2a,0x2c,0x2d,0x4f,
; 0x2d,0x4c,0x1d,0x18,0x2a,0x49,0x49,0x49,0x00,0x00};
;
; //Watchdog initialisation
; // prescale: 1024K cycles
; void watchdog_init(void)
; {
; WDR(); //this prevents a timout on enabling
; WDTCR = 0x0E; //WATCHDOG ENABLED - dont forget WDR
; }
;
; //TIMER0 initialisation - prescale:1024
; // desired value: 25mSec
; // actual value: 24.960mSec (0.2%)
; void timer0_init(void)
; {
; TCCR0 = 0x00; //stop timer
; TCNT0 = 0x3D; //set count value
; TCCR0 = 0x05; //start timer
.dbline 84
; }
ldi R24,255
out 0x1a,R24
.dbline 84
out 0x1b,R24
.dbline 85
;
ldi R24,128
out 0x17,R24
.dbline 85
ldi R24,255
out 0x18,R24
.dbline 86
; #pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF
ldi R24,1
out 0x14,R24
.dbline 86
ldi R24,255
out 0x15,R24
.dbline 87
; void timer0_ovf_isr(void)
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
; TCNT0 = 0x3D; //reload counter value
; t0_times++;
; remote_in = PINB & 0x0F;
L3:
.dbline 93
; switch (remote_in)
; {//检测遥控器是否有键按下
.dbline 94
; case 0x00: // none
subi R16,1
sbci R17,0
.dbline 95
; rst_time=0;
L4:
.dbline 96
; break;
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L3
.dbline -2
.dbline 97
; case 0x04: // < A >
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
; rst_time=0;
; break;
; case 0x02: // < B >
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
; rst_time=0;
cpi R20,0
cpc R20,R21
brne L7
X0:
.dbline -2
.dbline 106
; break;
; case 0x08: // < C >
; rst_time++;
; break;
; case 0x01: // < D >
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
; rst_time=0;
; break;
; }
.dbline 110
; if(rst_time > 400) // 400*25ms=10s,+1s 看门狗复位
ldi R24,96
out 0x12,R24
.dbline 111
; {
ldi R24,204
out 0x1b,R24
.dbline -2
.dbline 112
; PORTA = 0xff;
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_left _turn_left fV
.even
_turn_left::
.dbline -1
.dbline 115
; watchdog_init();
; while(1);
; }
.dbline 116
;
ldi R24,144
out 0x12,R24
.dbline 117
; if(gzsl == 0x88)
ldi R24,51
out 0x1b,R24
.dbline -2
.dbline 118
; {
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_right_s _turn_right_s fV
.even
_turn_right_s::
.dbline -1
.dbline 120
; if(t0_times == 10)
; {
.dbline 121
; timers++;
ldi R24,32
out 0x12,R24
.dbline 122
; t0_times = 0;
ldi R24,207
out 0x1b,R24
.dbline -2
.dbline 123
; pa = led_data[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
; if(pa==0x0a){timers=0;}
; PORTA = pa;
; }
.dbline 127
; }
ldi R24,128
out 0x12,R24
.dbline 128
; if(gzsl == 0x44)
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
; sw_touch();
; pc = PINC & 0xE0;
; if(pc == 0xE0)
.dbline 133
; {
ldi R24,80
out 0x12,R24
.dbline 134
; stop();
ldi R24,60
out 0x1b,R24
.dbline -2
.dbline 135
; t0_times = 0;timers = 0x22;
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e forward _forward fV
.even
_forward::
.dbline -1
.dbline 138
; temp1=EEPROMread((int)&sound[sound_add]);
; }
; if(pc == 0x40 || pc == 0x80 || pc == 0x20 || pc == 0xc0 || pc == 0x60)
.dbline 139
; {
ldi R24,160
out 0x12,R24
.dbline 140
; timers=0x55;
ldi R24,195
out 0x1b,R24
.dbline -2
.dbline 141
; t0_times = 0;
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e stop _stop fV
.even
_stop::
.dbline -1
.dbline 144
; }
; if(timers == 0x55)
; {
.dbline 145
; if(t0_times < 16) //16*25ms=400ms
ldi R24,255
out 0x12,R24
.dbline 146
; {
out 0x1b,R24
.dbline -2
.dbline 147
; backward();
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e sw_touch _sw_touch fV
.even
_sw_touch::
.dbline -1
.dbline 163
; temp1=sound_back[sound_add];
; }
; if(t0_times > 16 && t0_times < 24) //8*25ms=200ms
; {
; turn_left();
; temp1=sound_back[sound_add];
; }
; if(t0_times == 24)
; {
; timers = 0;
; t0_times = 0;
; }
; }
; if(timers != 0x55 && timers != 0x22)
; {
; forward();
.dbline 164
; temp1 = 0;
in R24,0x13
andi R24,16
sts _sw_in,R24
.dbline 165
; }
tst R24
brne L18
.dbline 166
; }
.dbline 167
; }
rcall _backward
.dbline 168
;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 170
; void stop_timer0()
; {
lds R24,_work_status
cpi R24,112
brne L20
.dbline 171
; CLI();
.dbline 172
; TCCR0 = 0x00;//停止timer0
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
; MCUCR = 0x00;
rjmp L22
X1:
.dbline 180
; GIMSK = 0x00;
; TIMSK = 0x00;
; SEI();
; }
;
; #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
; void timer1_ovf_isr(void)
L20:
.dbline 182
; {
; {
rcall _turn_left
.dbline 183
; TCNT1=toneconst;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 184
; PORTC^=1;
L18:
.dbline 186
; }
; }
in R24,0x16
andi R24,112
sts _sw_in,R24
.dbline 187
;
cpi R24,80
brne L25
.dbline 188
; void xuanya_car(void)
.dbline 189
; {
rcall _forward
.dbline 190
; port_init(); //PA,PB,PC,PD 初始化
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 192
;
; work_status = 0x20;//置对应的工作状态标志
rcall _turn_left
.dbline 193
;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 194
; PORTA = 0x0F;
L25:
.dbline 195
;
lds R24,_sw_in
cpi R24,48
brne L27
.dbline 196
; gzsl=0x88;timers=0;t0_times=0;
.dbline 197
; CLI(); //disable all interrupts
rcall _backward
.dbline 198
; timer0_init();
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 200
;
; MCUCR = 0x00;
rcall _turn_left
.dbline 201
; GIMSK = 0x00;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 202
; TIMSK|=(1<<TOIE0);
L27:
.dbline 203
; SEI(); //re-enable interrupts
lds R24,_sw_in
cpi R24,96
brne L29
.dbline 204
;
.dbline 205
; mic_startup();//等待声控启动函数
rcall _backward
.dbline 206
;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 208
; gzsl=0x44;t0_times=0;
; TCCR1A = 0x00;
rcall _turn_left
.dbline 209
; TCCR1B =(1<<CS11);//8分频
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 210
; xuanya_car_rst:
L29:
.dbline 211
; temp=temp1 = 0;
lds R24,_sw_in
cpi R24,32
brne L31
.dbline 212
; sound_add = 0;
.dbline 213
; while(temp1!=0)
rcall _stop
.dbline 214
; {
ldi R16,1000
ldi R17,3
rcall _delay_ms
rjmp L34
L33:
.dbline 216
; temp=temp1;
; temp&=0x0f;
.dbline 217
; if(temp!=0)
in R24,0x13
andi R24,16
sts _sw_in,R24
.dbline 218
; {
tst R24
brne L36
.dbline 219
; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
.dbline 219
rjmp L35
L36:
.dbline 220
; temp--;
ldi R24,85
out 0x1b,R24
.dbline 221
; toneconst=TONETABLE[temp];
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 222
; TCNT1=toneconst;
ldi R24,170
out 0x1b,R24
.dbline 223
; }
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 224
; temp=temp1;
in R24,0x16
andi R24,15
sts _remote_in,R24
.dbline 225
; temp>>=4;
tst R24
breq L38
.dbline 226
; temp&=0x0f;
.dbline 226
rjmp L35
L38:
.dbline 227
L34:
.dbline 215
rjmp L33
L35:
.dbline 228
L31:
.dbline -2
.dbline 229
; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
; TIMSK&=~(1<<TOIE1);
; sound_add++;
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e mic_startup _mic_startup fV
.even
_mic_startup::
.dbline -1
.dbline 232
; }
; goto xuanya_car_rst;
; }
rjmp L42
L41:
.dbline 235
;
;
; void main()
.dbline 236
; {
in R24,0x13
andi R24,8
sts _mic_in,R24
.dbline 237
; xuanya_car();
tst R24
brne L44
.dbline 237
.dbline 237
rjmp L43
L44:
.dbline 238
L42:
.dbline 234
rjmp L41
L43:
.dbline -2
.dbline 239
; }
; }
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e remote_auto_time _remote_auto_time fV
.even
_remote_auto_time::
.dbline -1
.dbline 254
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 255
; }
in R24,0x16
andi R24,15
sts _remote_in,R24
.dbline 256
; }
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
; }
L50:
.dbline 259
; }
; }
lds R24,_delay_time2
lds R25,_delay_time2+1
sbiw R24,50
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 260
; }
cpi R24,50
ldi R30,0
cpc R25,R30
breq X6
rjmp L48
X6:
.dbline 261
; }
.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
; }
; }
lds R24,_delay_time1
lds R25,_delay_time1+1
adiw R24,50
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 265
; }
cpi R24,2
ldi R30,8
cpc R25,R30
brne L48
.dbline 266
; }
.dbline 266
ldi R24,2000
ldi R25,7
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 266
.dbline 267
; }
rjmp L48
L56:
.dbline 269
; }
; }
lds R24,_delay_time1
lds R25,_delay_time1+1
sbiw R24,50
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 270
; }
cpi R24,50
ldi R30,0
cpc R25,R30
brne L48
.dbline 271
; }
.dbline 271
ldi R24,100
ldi R25,0
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 271
.dbline 272
; }
rjmp L48
L59:
.dbline 274
; }
; }
lds R24,_delay_time2
lds R25,_delay_time2+1
adiw R24,50
sts _delay_time2+1,R25
sts _delay_time2,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -