⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bianma.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -