📄 bianma.s
字号:
.module bianma.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 81
; // Target : 8515
; // Crystal: 8.0000Mhz
; // 更新日期: 2003.03.18
; // 接上遥控器,按动"A","B","C","D"会有LED灯指示
; // 程序中每按键4次,认为一次输入,
; //4个一组,根据按键的不同执行相应程序
;
; //按四次"A",运行悬崖车程序
; //按四次"B",运行遥控车程序
; //无键按下----------前行
; //"A", 按住---------右转
; //"B", 按住---------后退
; //"C", 按住---------停止
; //"D", 按住---------左转
;
; //按四次"C",运行音乐车程序
; //按四次"D",运行霓虹车程序
;
; #include <io8515v.h>
; #include <macros.h>
; #include <sl3010.c>
;
; //#define A 0x04 //0b0000,0100
; //#define B 0x02 //0b0000,0010
; //#define C 0x08 //0b0000,1000
; //#define D 0x01 //0b0000,0001
; #define delaytime 300
;
; unsigned char bianma;
; unsigned char pa,pb,pc,pd,sl,remote,bianma_count;
;
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
; port_init();
;
; MCUCR = 0x00;
; GIMSK = 0x00;
; TIMSK = 0x00;
; SEI(); //re-enable interrupts
; //all peripherals are now initialised
; }
;
; void remote_car()
; {
; unsigned char stop_rst,temp;
; DDRB = 0x00;PORTB = 0xFF;
; DDRA = 0xff;PORTA = 0xff;
; while(1)
; {
; remote = pb = PINB & 0x0F;
; PORTA = ~pb;
; if(pb == 0x04)
; {
; PORTD = 0x60; //右转//0110 0000
; PORTA = 0xCC; //1100,1100
; stop_rst=0x00;
; }
; if(pb == 0x02)
; {
; PORTD = 0x50; //后退//0101 0000
; PORTA = 0x3C; //0011,1100
; stop_rst=0x00;
; }
; if(pb == 0x08)
; {
; PORTD = 0xff; //stop
; PORTA = 0xff; //
; stop_rst++;
; }
; if(pb == 0x01)
; {
; PORTD = 0x90; //左转//1001 0000
; PORTA = 0x33; //0011,0011
; stop_rst=0x00;
; }
; if(pb == 0x00)
; {
; PORTD = 0xA0; //前行//1010 0000
.dbline 82
; PORTA = 0xC3; //1100,0011
ldi R24,255
out 0x1a,R24
.dbline 82
out 0x1b,R24
.dbline 83
; }
ldi R24,128
out 0x17,R24
.dbline 83
ldi R24,255
out 0x18,R24
.dbline 84
; /*
ldi R24,1
out 0x14,R24
.dbline 84
ldi R24,255
out 0x15,R24
.dbline 85
; while(1)
ldi R24,240
out 0x11,R24
.dbline 85
ldi R24,255
out 0x12,R24
.dbline -2
.dbline 86
; {
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 89
; temp = PINB & 0x0f;
; if(temp != remote)
; {break;}
L3:
.dbline 91
; }
; if(stop_rst == 0x04)
.dbline 92
; {
subi R16,1
sbci R17,0
.dbline 93
; PORTD = 0xff; //stop
L4:
.dbline 94
; PORTA=0xff; //
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L3
.dbline -2
.dbline 95
; break;
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 98
; }
; */
; delay_ms(100);
rjmp L8
L7:
.dbline 100
.dbline 101
ldi R16,1000
ldi R17,3
rcall _delay_us
.dbline 102
subi R20,1
sbci R21,0
.dbline 103
L8:
.dbline 99
; }
cpi R20,0
cpc R20,R21
brne L7
X0:
.dbline -2
.dbline 104
; }
;
; void xuanya_car(void)
; {
; DDRC=0x01;PORTC=0xFF;
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 107
; DDRA=0xFF;PORTA=0xFF;
; DDRD=0xFF;PORTD=0xFF;
; while(1)
.dbline 108
; {//左(pc7) 中(pc6) 右(pc5)
ldi R24,96
out 0x12,R24
.dbline 109
; pc = PINC & 0x10;
ldi R24,204
out 0x1b,R24
.dbline -2
.dbline 110
; if(pc==0x00)
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_left _turn_left fV
.even
_turn_left::
.dbline -1
.dbline 113
; {
; PORTD = 0x50;
; PORTA=0x3C;//后退
.dbline 114
; delay_ms(delaytime);
ldi R24,144
out 0x12,R24
.dbline 115
; PORTD = 0x60;
ldi R24,51
out 0x1b,R24
.dbline -2
.dbline 116
; PORTA=0xCC;//右转
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_right_s _turn_right_s fV
.even
_turn_right_s::
.dbline -1
.dbline 118
; delay_ms(delaytime/2);
; }
.dbline 119
; pc = PINC & 0xE0;
ldi R24,32
out 0x12,R24
.dbline 120
; if(pc==0x40)
ldi R24,207
out 0x1b,R24
.dbline -2
.dbline 121
; {
L12:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_left_s _turn_left_s fV
.even
_turn_left_s::
.dbline -1
.dbline 124
; PORTD = 0xFF;//刹车
; PORTA = 0xFF;
; //后退,右转
.dbline 125
; PORTD = 0x50;
ldi R24,128
out 0x12,R24
.dbline 126
; PORTA=0x3C;//后退
ldi R24,243
out 0x1b,R24
.dbline -2
.dbline 127
; delay_ms(delaytime);
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e backward _backward fV
.even
_backward::
.dbline -1
.dbline 130
; PORTD = 0x60;
; PORTA=0xCC;//右转
; delay_ms(delaytime/2);
.dbline 131
; }
ldi R24,80
out 0x12,R24
.dbline 132
; if(pc==0x80)
ldi R24,60
out 0x1b,R24
.dbline -2
.dbline 133
; {
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e forward _forward fV
.even
_forward::
.dbline -1
.dbline 136
; stop();
; //往右转弯
; PORTD = 0x50;
.dbline 137
; PORTA=0x3C;//后退
ldi R24,160
out 0x12,R24
.dbline 138
; delay_ms(delaytime);
ldi R24,195
out 0x1b,R24
.dbline -2
.dbline 139
; PORTD = 0x60;//右转
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e stop _stop fV
.even
_stop::
.dbline -1
.dbline 142
; PORTA=0xCC;
; delay_ms(delaytime);
; }
.dbline 143
; if(pc==0x20)
ldi R24,255
out 0x12,R24
.dbline 144
; {
out 0x1b,R24
.dbline -2
.dbline 145
; stop();
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e sw_touch _sw_touch fV
; remote_in -> R22
; sw_in -> R20
.even
_sw_touch::
rcall push_gset2
.dbline -1
.dbline 161
; //往右转弯
; PORTD = 0x50;//后退
; PORTA=0x3C;
; delay_ms(delaytime);
; PORTD = 0x60;//右转
; PORTA=0xCC;
; delay_ms(delaytime);
; }
; if(pc==0xc0)
; {
; stop();
; //后退,往右转弯
; PORTD = 0x50;//后退
; PORTA=0x3C;
; delay_ms(delaytime);
; PORTD = 0x60;//右转
.dbline 163
; PORTA=0xCC;
; delay_ms(delaytime);
ldi R24,1
out 0x14,R24
.dbline 163
ldi R24,255
out 0x15,R24
.dbline 164
; }
ldi R24,128
out 0x17,R24
.dbline 164
ldi R24,255
out 0x18,R24
.dbline 166
; if(pc==0x60)
; {
in R20,0x13
andi R20,16
.dbline 167
; stop();
brne L18
.dbline 168
; //后退,往右转弯
.dbline 169
; PORTD = 0x50;
rcall _backward
.dbline 170
; PORTA=0x3C;//后退
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 172
; delay_ms(delaytime);
; PORTD = 0x60;//右转
lds R24,_work_status
cpi R24,112
brne L20
.dbline 173
; PORTA=0xCC;
.dbline 174
; delay_ms(delaytime);
rcall _stop
rjmp L23
L22:
.dbline 176
.dbline 177
ldi R24,85
out 0x1b,R24
.dbline 178
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 179
ldi R24,170
out 0x1b,R24
.dbline 180
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 181
L23:
.dbline 175
; }
rjmp L22
X1:
.dbline 182
; if(pc==0xE0)
; {
; //刹车
; PORTD = 0xF0;
; PORTA = 0xFF;
; }
; else
L20:
.dbline 184
; {
; PORTD = 0xA0;//前行
rcall _turn_left
.dbline 185
; PORTA=0xC3;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 186
; }
L18:
.dbline 188
; }
; }
in R20,0x16
andi R20,112
.dbline 189
;
cpi R20,80
brne L25
.dbline 190
; void music_car()
.dbline 191
; {
rcall _forward
.dbline 192
; DDRA = 0xFF; PORTA = 0xFF;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 194
; PORTA = 0xCC;
; while (1)
rcall _turn_left
.dbline 195
; ;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 196
; }
L25:
.dbline 197
;
cpi R20,48
brne L27
.dbline 198
; void led_car()
.dbline 199
; {
rcall _backward
.dbline 200
; DDRA = 0xFF; PORTA = 0xFF;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 202
; PORTA = 0x0F;
; while (1)
rcall _turn_left
.dbline 203
; ;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 204
; }
L27:
.dbline 205
;
cpi R20,96
brne L29
.dbline 206
; void main(void)
.dbline 207
; {
rcall _backward
.dbline 208
; unsigned temp;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 210
;
; port_init(); //PA,PB,PC,PD 初始化
rcall _turn_left
.dbline 211
;
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 212
; loop:
L29:
.dbline 213
;
cpi R20,32
brne L31
.dbline 214
; PORTA = 0x00;delay_ms(500);
.dbline 215
; PORTA = 0xff;delay_ms(500);
rcall _stop
.dbline 216
; bianma = 0x0000;
ldi R16,1000
ldi R17,3
rcall _delay_ms
rjmp L34
L33:
.dbline 218
;
; while(1)
.dbline 219
; {
in R20,0x13
andi R20,16
.dbline 220
; remote = PINB & 0x0f;
brne L36
.dbline 221
; PORTA = ~remote;
.dbline 221
rjmp L35
L36:
.dbline 222
; switch (remote)
ldi R24,85
out 0x1b,R24
.dbline 223
; {//按键检查
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 224
; case 0x04 :
ldi R24,170
out 0x1b,R24
.dbline 225
; {
ldi R16,250
ldi R17,0
rcall _delay_ms
.dbline 226
; bianma=bianma | 0xA000;
in R22,0x16
andi R22,15
.dbline 227
; bianma_count = bianma_count+1;
breq L38
.dbline 228
; }
.dbline 228
rjmp L35
L38:
.dbline 229
L34:
.dbline 217
rjmp L33
L35:
.dbline 230
L31:
.dbline -2
.dbline 231
; break;
; case 0x02 :
; {
L17:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r remote_in 22 c
.dbsym r sw_in 20 c
.dbend
.dbfunc e mic_startup _mic_startup fV
; mic_in -> R20
.even
_mic_startup::
rcall push_gset1
.dbline -1
.dbline 234
; bianma=bianma | 0x0B00;
; bianma_count = bianma_count+1;
; }
.dbline 236
; break;
; case 0x08 :
ldi R24,1
out 0x14,R24
.dbline 236
ldi R24,255
out 0x15,R24
.dbline 237
; {
ldi R16,1
ldi R17,0
rcall _delay_us
rjmp L42
L41:
.dbline 239
; bianma=bianma | 0x00C0;
; bianma_count = bianma_count+1;
.dbline 240
; }
in R20,0x13
andi R20,8
.dbline 241
; break;
brne L44
.dbline 241
.dbline 241
rjmp L43
L44:
.dbline 242
L42:
.dbline 238
rjmp L41
L43:
.dbline -2
.dbline 243
; case 0x01 :
; {
L40:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r mic_in 20 c
.dbend
.dbfunc e remote_auto_time _remote_auto_time fV
; remote_in -> R16
.even
_remote_auto_time::
.dbline -1
.dbline 260
; bianma=bianma | 0x000D;
; bianma_count = bianma_count+1;
; }
; break;
; }
; while(1)
; {//释键检查
; temp = PINB & 0x0f;
; if(temp != remote)
; {break;}
; }
; if(bianma_count == 4)
; {//按键四次,认为 一次有效输入结束
; bianma_count=0;break;
; }
; }
; delay_ms(200);
.dbline 262
; PORTA = 0xaa;delay_ms(500);
; PORTA = 0x55;delay_ms(500);
in R16,0x16
andi R16,15
.dbline 263
; if(bianma == 0xa000)
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 264
; {xuanya_car();}
L50:
.dbline 266
; if(bianma == 0x0b00)
; {remote_car();}
lds R24,_delay_time2
lds R25,_delay_time2+1
sbiw R24,50
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 267
; if(bianma == 0x00c0)
cpi R24,50
ldi R30,0
cpc R25,R30
breq X6
rjmp L48
X6:
.dbline 268
; {music_car();}
.dbline 268
ldi R24,100
ldi R25,0
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 268
.dbline 269
; if(bianma == 0x000d)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -