📄 bianma.lis
字号:
.module bianma.c
.area text(rom, con, rel)
0000 .dbfile e:/ICC/include/sl3010.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 81
0000 ; // Target : 8515
0000 ; // Crystal: 8.0000Mhz
0000 ; // 更新日期: 2003.03.18
0000 ; // 接上遥控器,按动"A","B","C","D"会有LED灯指示
0000 ; // 程序中每按键4次,认为一次输入,
0000 ; //4个一组,根据按键的不同执行相应程序
0000 ;
0000 ; //按四次"A",运行悬崖车程序
0000 ; //按四次"B",运行遥控车程序
0000 ; //无键按下----------前行
0000 ; //"A", 按住---------右转
0000 ; //"B", 按住---------后退
0000 ; //"C", 按住---------停止
0000 ; //"D", 按住---------左转
0000 ;
0000 ; //按四次"C",运行音乐车程序
0000 ; //按四次"D",运行霓虹车程序
0000 ;
0000 ; #include <io8515v.h>
0000 ; #include <macros.h>
0000 ; #include <sl3010.c>
0000 ;
0000 ; //#define A 0x04 //0b0000,0100
0000 ; //#define B 0x02 //0b0000,0010
0000 ; //#define C 0x08 //0b0000,1000
0000 ; //#define D 0x01 //0b0000,0001
0000 ; #define delaytime 300
0000 ;
0000 ; unsigned char bianma;
0000 ; unsigned char pa,pb,pc,pd,sl,remote,bianma_count;
0000 ;
0000 ; //call this routine to initialise all peripherals
0000 ; void init_devices(void)
0000 ; {
0000 ; //stop errant interrupts until set up
0000 ; CLI(); //disable all interrupts
0000 ; port_init();
0000 ;
0000 ; MCUCR = 0x00;
0000 ; GIMSK = 0x00;
0000 ; TIMSK = 0x00;
0000 ; SEI(); //re-enable interrupts
0000 ; //all peripherals are now initialised
0000 ; }
0000 ;
0000 ; void remote_car()
0000 ; {
0000 ; unsigned char stop_rst,temp;
0000 ; DDRB = 0x00;PORTB = 0xFF;
0000 ; DDRA = 0xff;PORTA = 0xff;
0000 ; while(1)
0000 ; {
0000 ; remote = pb = PINB & 0x0F;
0000 ; PORTA = ~pb;
0000 ; if(pb == 0x04)
0000 ; {
0000 ; PORTD = 0x60; //右转//0110 0000
0000 ; PORTA = 0xCC; //1100,1100
0000 ; stop_rst=0x00;
0000 ; }
0000 ; if(pb == 0x02)
0000 ; {
0000 ; PORTD = 0x50; //后退//0101 0000
0000 ; PORTA = 0x3C; //0011,1100
0000 ; stop_rst=0x00;
0000 ; }
0000 ; if(pb == 0x08)
0000 ; {
0000 ; PORTD = 0xff; //stop
0000 ; PORTA = 0xff; //
0000 ; stop_rst++;
0000 ; }
0000 ; if(pb == 0x01)
0000 ; {
0000 ; PORTD = 0x90; //左转//1001 0000
0000 ; PORTA = 0x33; //0011,0011
0000 ; stop_rst=0x00;
0000 ; }
0000 ; if(pb == 0x00)
0000 ; {
0000 ; PORTD = 0xA0; //前行//1010 0000
0000 .dbline 82
0000 ; PORTA = 0xC3; //1100,0011
0000 8FEF ldi R24,255
0002 8ABB out 0x1a,R24
0004 .dbline 82
0004 8BBB out 0x1b,R24
0006 .dbline 83
0006 ; }
0006 80E8 ldi R24,128
0008 87BB out 0x17,R24
000A .dbline 83
000A 8FEF ldi R24,255
000C 88BB out 0x18,R24
000E .dbline 84
000E ; /*
000E 81E0 ldi R24,1
0010 84BB out 0x14,R24
0012 .dbline 84
0012 8FEF ldi R24,255
0014 85BB out 0x15,R24
0016 .dbline 85
0016 ; while(1)
0016 80EF ldi R24,240
0018 81BB out 0x11,R24
001A .dbline 85
001A 8FEF ldi R24,255
001C 82BB out 0x12,R24
001E .dbline -2
001E .dbline 86
001E ; {
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e delay_us _delay_us fV
0020 ; time -> R16,R17
.even
0020 _delay_us::
0020 .dbline -1
0020 .dbline 89
0020 ; temp = PINB & 0x0f;
0020 ; if(temp != remote)
0020 ; {break;}
0020 L3:
0020 .dbline 91
0020 ; }
0020 ; if(stop_rst == 0x04)
0020 .dbline 92
0020 ; {
0020 0150 subi R16,1
0022 1040 sbci R17,0
0024 .dbline 93
0024 ; PORTD = 0xff; //stop
0024 L4:
0024 .dbline 94
0024 ; PORTA=0xff; //
0024 81E0 ldi R24,1
0026 90E0 ldi R25,0
0028 8017 cp R24,R16
002A 9107 cpc R25,R17
002C CCF3 brlt L3
002E .dbline -2
002E .dbline 95
002E ; break;
002E L2:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r time 16 I
0030 .dbend
0030 .dbfunc e delay_ms _delay_ms fV
0030 ; time -> R20,R21
.even
0030 _delay_ms::
0030 00D0 rcall push_gset1
0032 402F mov R20,R16
0034 512F mov R21,R17
0036 .dbline -1
0036 .dbline 98
0036 ; }
0036 ; */
0036 ; delay_ms(100);
0036 05C0 rjmp L8
0038 L7:
0038 .dbline 100
0038 .dbline 101
0038 08EE ldi R16,1000
003A 13E0 ldi R17,3
003C F1DF rcall _delay_us
003E .dbline 102
003E 4150 subi R20,1
0040 5040 sbci R21,0
0042 .dbline 103
0042 L8:
0042 .dbline 99
0042 ; }
0042 4030 cpi R20,0
0044 4507 cpc R20,R21
0046 C1F7 brne L7
0048 X0:
0048 .dbline -2
0048 .dbline 104
0048 ; }
0048 ;
0048 ; void xuanya_car(void)
0048 ; {
0048 ; DDRC=0x01;PORTC=0xFF;
0048 L6:
0048 00D0 rcall pop_gset1
004A .dbline 0 ; func end
004A 0895 ret
004C .dbsym r time 20 i
004C .dbend
004C .dbfunc e turn_right _turn_right fV
.even
004C _turn_right::
004C .dbline -1
004C .dbline 107
004C ; DDRA=0xFF;PORTA=0xFF;
004C ; DDRD=0xFF;PORTD=0xFF;
004C ; while(1)
004C .dbline 108
004C ; {//左(pc7) 中(pc6) 右(pc5)
004C 80E6 ldi R24,96
004E 82BB out 0x12,R24
0050 .dbline 109
0050 ; pc = PINC & 0x10;
0050 8CEC ldi R24,204
0052 8BBB out 0x1b,R24
0054 .dbline -2
0054 .dbline 110
0054 ; if(pc==0x00)
0054 L10:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbend
0056 .dbfunc e turn_left _turn_left fV
.even
0056 _turn_left::
0056 .dbline -1
0056 .dbline 113
0056 ; {
0056 ; PORTD = 0x50;
0056 ; PORTA=0x3C;//后退
0056 .dbline 114
0056 ; delay_ms(delaytime);
0056 80E9 ldi R24,144
0058 82BB out 0x12,R24
005A .dbline 115
005A ; PORTD = 0x60;
005A 83E3 ldi R24,51
005C 8BBB out 0x1b,R24
005E .dbline -2
005E .dbline 116
005E ; PORTA=0xCC;//右转
005E L11:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbend
0060 .dbfunc e turn_right_s _turn_right_s fV
.even
0060 _turn_right_s::
0060 .dbline -1
0060 .dbline 118
0060 ; delay_ms(delaytime/2);
0060 ; }
0060 .dbline 119
0060 ; pc = PINC & 0xE0;
0060 80E2 ldi R24,32
0062 82BB out 0x12,R24
0064 .dbline 120
0064 ; if(pc==0x40)
0064 8FEC ldi R24,207
0066 8BBB out 0x1b,R24
0068 .dbline -2
0068 .dbline 121
0068 ; {
0068 L12:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbend
006A .dbfunc e turn_left_s _turn_left_s fV
.even
006A _turn_left_s::
006A .dbline -1
006A .dbline 124
006A ; PORTD = 0xFF;//刹车
006A ; PORTA = 0xFF;
006A ; //后退,右转
006A .dbline 125
006A ; PORTD = 0x50;
006A 80E8 ldi R24,128
006C 82BB out 0x12,R24
006E .dbline 126
006E ; PORTA=0x3C;//后退
006E 83EF ldi R24,243
0070 8BBB out 0x1b,R24
0072 .dbline -2
0072 .dbline 127
0072 ; delay_ms(delaytime);
0072 L13:
0072 .dbline 0 ; func end
0072 0895 ret
0074 .dbend
0074 .dbfunc e backward _backward fV
.even
0074 _backward::
0074 .dbline -1
0074 .dbline 130
0074 ; PORTD = 0x60;
0074 ; PORTA=0xCC;//右转
0074 ; delay_ms(delaytime/2);
0074 .dbline 131
0074 ; }
0074 80E5 ldi R24,80
0076 82BB out 0x12,R24
0078 .dbline 132
0078 ; if(pc==0x80)
0078 8CE3 ldi R24,60
007A 8BBB out 0x1b,R24
007C .dbline -2
007C .dbline 133
007C ; {
007C L14:
007C .dbline 0 ; func end
007C 0895 ret
007E .dbend
007E .dbfunc e forward _forward fV
.even
007E _forward::
007E .dbline -1
007E .dbline 136
007E ; stop();
007E ; //往右转弯
007E ; PORTD = 0x50;
007E .dbline 137
007E ; PORTA=0x3C;//后退
007E 80EA ldi R24,160
0080 82BB out 0x12,R24
0082 .dbline 138
0082 ; delay_ms(delaytime);
0082 83EC ldi R24,195
0084 8BBB out 0x1b,R24
0086 .dbline -2
0086 .dbline 139
0086 ; PORTD = 0x60;//右转
0086 L15:
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbend
0088 .dbfunc e stop _stop fV
.even
0088 _stop::
0088 .dbline -1
0088 .dbline 142
0088 ; PORTA=0xCC;
0088 ; delay_ms(delaytime);
0088 ; }
0088 .dbline 143
0088 ; if(pc==0x20)
0088 8FEF ldi R24,255
008A 82BB out 0x12,R24
008C .dbline 144
008C ; {
008C 8BBB out 0x1b,R24
008E .dbline -2
008E .dbline 145
008E ; stop();
008E L16:
008E .dbline 0 ; func end
008E 0895 ret
0090 .dbend
0090 .dbfunc e sw_touch _sw_touch fV
0090 ; remote_in -> R22
0090 ; sw_in -> R20
.even
0090 _sw_touch::
0090 00D0 rcall push_gset2
0092 .dbline -1
0092 .dbline 161
0092 ; //往右转弯
0092 ; PORTD = 0x50;//后退
0092 ; PORTA=0x3C;
0092 ; delay_ms(delaytime);
0092 ; PORTD = 0x60;//右转
0092 ; PORTA=0xCC;
0092 ; delay_ms(delaytime);
0092 ; }
0092 ; if(pc==0xc0)
0092 ; {
0092 ; stop();
0092 ; //后退,往右转弯
0092 ; PORTD = 0x50;//后退
0092 ; PORTA=0x3C;
0092 ; delay_ms(delaytime);
0092 ; PORTD = 0x60;//右转
0092 .dbline 163
0092 ; PORTA=0xCC;
0092 ; delay_ms(delaytime);
0092 81E0 ldi R24,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -