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

📄 test_pc10_main.s

📁 AVR单片机开发中
💻 S
📖 第 1 页 / 共 4 页
字号:
	clr R21
	.dbline 229
;      send_buffer[0] = temp;
	sts _send_buffer,R20
	.dbline 230
;      char_len = 2;
	ldi R24,2
	sts _char_len,R24
	.dbline 231
; 	 serial_send(0);
	clr R16
	xcall _serial_send
	.dbline 232
; 	 return;
	.dbline -2
L52:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 i
	.dbsym r s 22 c
	.dbend
	.dbfunc e printf_int _printf_int fV
;              c -> R20,R21
	.even
_printf_int::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 237
; }
; 
; 
; void printf_int(int c )
; {
	.dbline 238
;     char_len = bcd_char( c, send_buffer);
	ldi R18,<_send_buffer
	ldi R19,>_send_buffer
	movw R16,R20
	xcall _bcd_char
	sts _char_len,R16
	.dbline 239
; 	serial_send(0);
	clr R16
	xcall _serial_send
	.dbline 240
;     return;
	.dbline -2
L54:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r c 20 I
	.dbend
	.dbfunc e printf_str _printf_str fV
;              i -> R20
;              s -> R22,R23
	.even
_printf_str::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 244
; }
; 
; 
; void printf_str(char *s ){
	.dbline 245
;     unsigned char i=0;
	clr R20
	xjmp L57
L56:
	.dbline 247
	.dbline 249
	ldi R24,<_send_buffer
	ldi R25,>_send_buffer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	movw R26,R22
	ld R2,x
	std z+0,R2
	.dbline 250
	inc R20
	.dbline 251
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 252
L57:
	.dbline 247
; 	
; 	while( *s ){
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne L56
	.dbline 253
; 	   
; 	   send_buffer[i] = *s ;
; 	   i ++;
; 	   s++;
; 	}
;     char_len = i;
	sts _char_len,R20
	.dbline 254
; 	serial_send( 0 );
	clr R16
	xcall _serial_send
	.dbline 256
; 	
;     return;
	.dbline -2
L55:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r s 22 pc
	.dbend
	.dbfunc e outp _outp fV
;              p -> R20,R21
;           data -> R18
;            add -> R16,R17
	.even
_outp::
	xcall push_gset1
	.dbline -1
	.dbline 264
; }
; /////////////////////////////////////////////////////////////////////////////////
; 
; /////////////////////////////////////////////////////////////////////////////
; //////            104bus io 操作
; //////////////////////////////////////////////////////////////////////////////
; void outp(unsigned int add,unsigned char data)
; 	  {
	.dbline 266
; 	         unsigned char *p;
; 	         p = (unsigned char *) (add+0x2000);
	movw R20,R16
	subi R20,0  ; offset = 8192
	sbci R21,224
	.dbline 268
; 	         
; 	              *p=data;
	movw R30,R20
	std z+0,R18
	.dbline -2
	.dbline 270
;    
; 	   }
L59:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pc
	.dbsym r data 18 c
	.dbsym r add 16 i
	.dbend
	.dbfunc e inp _inp fc
;              p -> R20,R21
;            add -> R16,R17
	.even
_inp::
	xcall push_gset1
	.dbline -1
	.dbline 274
; 
; 
; unsigned char inp(unsigned int add)	  
; {
	.dbline 277
; 
;        unsigned char *p;
; 	   p = (unsigned char *) (add+0x2000);
	movw R20,R16
	subi R20,0  ; offset = 8192
	sbci R21,224
	.dbline 278
;        return   *p;
	movw R30,R20
	ldd R16,z+0
	.dbline -2
L60:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pc
	.dbsym r add 16 i
	.dbend
	.dbfunc e init_gyro _init_gyro fV
	.even
_init_gyro::
	.dbline -1
	.dbline 298
; 
; } 
; 	
; ////////////////////////////////////////////////////////////////////////////////	
; //////////////////////////////////////////////////////////////////////
; //
; //	gyro_sample
; //
; //	参数    无
; //
; //	说明    陀螺仪采样函数,首先运行500次,求得零漂平均值,然后处理
; //              陀螺仪数据,最终用算出的角度更新全局变量rob_angle
; //
; //	返回值  无
; //
; //	创建人  张辉
; //
; //////////////////////////////////////////////////////////////////////	
; 
; void init_gyro(){
	.dbline 299
; 	outp(GYRO_BASE+4,0x00); 			/*陀螺仪标志位置0*/  	
	clr R18
	ldi R16,660
	ldi R17,2
	.dbline -2
	.dbline 301
; 	
; 	}
L61:
	.dbline 0 ; func end
	xjmp _outp
	.dbend
	.dbfunc e gyro_sample _gyro_sample fI
;          angle -> y+6
;          cmplt -> R10,R11
;       low_byte -> R10,R11
;       mid_byte -> R12,R13
;      high_byte -> y+2
	.even
_gyro_sample::
	xcall push_gset4
	sbiw R28,10
	.dbline -1
	.dbline 303
; int gyro_sample()
; {
	.dbline 308
; 	int	cmplt;
; 	long	angle;
; 	unsigned long high_byte;
; 	unsigned int  mid_byte,low_byte;
; 	high_byte = 0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+2,R20
	std z+3,R21
	std z+4,R22
	std z+5,R23
	.dbline 309
; 	cmplt=inp(GYRO_BASE+0);
	ldi R16,656
	ldi R17,2
	xcall _inp
	mov R10,R16
	clr R11
	.dbline 311
; 
; 	if((cmplt&0x01)==0x01)
	movw R24,R10
	andi R24,1
	andi R25,0
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brne L63
	.dbline 312
; 	{    
	.dbline 313
; 		return 0;
	clr R16
	clr R17
	xjmp L62
L63:
	.dbline 315
; 	}
; 	outp(GYRO_BASE+4,0x01);
	ldi R18,1
	ldi R16,660
	ldi R17,2
	xcall _outp
	.dbline 316
; 	high_byte=inp(GYRO_BASE+1);
	ldi R16,657
	ldi R17,2
	xcall _inp
	mov R2,R16
	clr R3
	clr R4
	clr R5
	movw R30,R28
	std z+2,R2
	std z+3,R3
	std z+4,R4
	std z+5,R5
	.dbline 317
; 	printf("%d    ",high_byte);
	std y+0,R4
	std y+1,R5
	mov R18,R2
	mov R19,R3
	ldi R16,<L65
	ldi R17,>L65
	xcall _printf
	.dbline 318
; 	mid_byte=inp(GYRO_BASE+2);
	ldi R16,658
	ldi R17,2
	xcall _inp
	mov R12,R16
	clr R13
	.dbline 319
; 	printf("%d    ",mid_byte);
	movw R18,R12
	ldi R16,<L65
	ldi R17,>L65
	xcall _printf
	.dbline 320
; 	low_byte=inp(GYRO_BASE+3);
	ldi R16,659
	ldi R17,2
	xcall _inp
	mov R10,R16
	clr R11
	.dbline 321
; 	printf("%d    ",low_byte);
	movw R18,R10
	ldi R16,<L65
	ldi R17,>L65
	xcall _printf
	.dbline 322
; 	outp(GYRO_BASE+4,0x00);
	clr R18
	ldi R16,660
	ldi R17,2
	xcall _outp
	.dbline 323
; 	if(high_byte>=0x80)
	ldi R20,128
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlo L66
	.dbline 324
; 	high_byte |= 0xffffff00;
	ldi R20,0
	ldi R21,255
	ldi R22,255
	ldi R23,255
	or R2,R20
	or R3,R21
	or R4,R22
	or R5,R23
	std z+2,R2
	std z+3,R3
	std z+4,R4
	std z+5,R5
L66:
	.dbline 325
; 	angle=(long)(((high_byte)<<16)+((mid_byte&0x00ff)<<8)+(low_byte&0x00ff));
	movw R24,R12
	andi R25,0
	mov R25,R24
	clr R24
	movw R2,R24
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	mov R8,R6
	mov R9,R7
	clr R6
	clr R7
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R24,R10
	andi R25,0
	movw R2,R24
	clr R4
	clr R5
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	std z+6,R6
	std z+7,R7
	std z+8,R8
	std z+9,R9
	.dbline 326
; 	rob_angle=angle/2742.9797399;
	ldd R16,z+6
	ldd R17,z+7
	ldd R18,z+8
	ldd R19,z+9
	xcall long2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	ldi R16,<L68
	ldi R17,>L68
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall div32f
	sts _rob_angle+1,R17
	sts _rob_angle,R16
	sts _rob_angle+2+1,R19
	sts _rob_angle+2,R18
	.dbline 327
; 	return 1;
	ldi R16,1
	ldi R17,0
	.dbline -2
L62:
	adiw R28,10
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym l angle 6 L
	.dbsym r cmplt 10 I
	.dbsym r low_byte 10 i
	.dbsym r mid_byte 12 i
	.dbsym l high_byte 2 l
	.dbend
	.dbfunc e relay_write _relay_write fV
;              p -> R20,R21
;           data -> R16
	.even
_relay_write::
	xcall push_gset1
	.dbline -1
	.dbline 332
; 			
; }
; ///////////////////////////////////////////////////////////////////////////////	
; void relay_write(unsigned char data)
; 	  {
	.dbline 334
; 	         unsigned char *p;
; 	         p = (unsigned char *) 0x2250;
	ldi R20,8784
	ldi R21,34
	.dbline 336
; 	         
; 	              *p=data;
	movw R30,R20
	std z+0,R16
	.dbline -2
	.dbline 338
;    
; 	   }
L69:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pc
	.dbsym r data 16 c
	.dbend
	.dbfunc e relay_read _relay_read fc
;              p -> R16,R17
	.even
_relay_read::
	.dbline -1
	.dbline 342
; 
; 
; unsigned char relay_read(void)	  
; {
	.dbline 345
; 
;        unsigned char *p;
; 	   p = (unsigned char *) 0x2250;
	ldi R16,8784
	ldi R17,34
	.dbline 346
;        return   *p;
	movw R30,R16
	ldd R16,z+0
	.dbline -2
L70:
	.dbline 0 ; func end
	ret
	.dbsym r p 16 pc
	.dbend
	.dbfunc e motor_pwm _motor_pwm fV
;          right -> R18,R19
;           left -> R16,R17
	.even
_motor_pwm::
	.dbline -1
	.dbline 355
; 
; } 
; ////////////////////////////////////////////////////////////////////////////
; /////////////
; /////////              pwm
; ///////
; /////////////////////////////////////////////////////////////////////////////
; void  motor_pwm ( int left,int right )
; {
	.dbline 357
; 
;  DDRB|=0XE0;
	in R24,0x17
	ori R24,224
	out 0x17,R24
	.dbline 358
;  TCCR1A=0xA8;
	ldi R24,168
	out 0x2f,R24
	.dbline 359
;  TCCR1B=0x11;
	ldi R24,17
	out 0x2e,R24
	.dbline 360
;  ICR1  = 0x6000;        
	ldi R24,24576
	ldi R25,96
	sts 70+1,R25
	sts 70,R24
	.dbline 361
;  OCR1A = left;        /////12288 is  stop
	sts 74+1,R17
	sts 74,R16
	.dbline 362
;  OCR1B = right;       //// range is from 0 to 24576
	sts 72+1,R19
	sts 72,R18
	.dbline -2
	.dbline 365
; 
;  //OCR1C = 0x3000 + mid;
; }
L71:
	.dbline 0 ; func end
	ret
	.dbsym r right 18 I
	.dbsym r left 16 I
	.dbend
	.dbfunc e mainboard_pwm _mainboard_pwm fV
;           pwm3 -> y+0
;           pwm2 -> R18,R19
;           pwm1 -> R16,R17
	.even
_mainboard_pwm::
	.dbline -1
	.dbline 368
; 
; void  mainboard_pwm(int pwm1, int pwm2, int pwm3)
; {
	.dbline 369
;     DDRE |= 0x38;
	in R24,0x2
	ori R24,56
	out 0x2,R24
	.dbline 370
;     TCCR3A = 0xA8;
	ldi R24,168
	sts 139,R24
	.dbline 371
;     TCCR3B = 0x12;
	ldi R24,18
	sts 138,R24
	.dbline 372
;     ICR3  = 0x4E20;
	ldi R24,20000
	ldi R25,78
	sts 128+1,R25
	sts 128,R24
	.dbline 373
;     OCR3A = pwm1;
	sts 134+1,R17
	sts 134,R16
	.dbline 374
;     OCR3B = pwm2;
	sts 132+1,R19
	sts 132,R18
	.dbline 375
; 	OCR3C = pwm3;
	ldd R0,y+0
	ldd R1,y+1
	sts 130+1,R1
	sts 130,R0
	.dbline -2
	.dbline 377
;    
;  }
L72:
	.dbline 0 ; func end
	ret
	.dbsym l pwm3 0 I
	.dbsym r pwm2 18 I
	.dbsym r pwm1 16 I
	.dbend
	.dbfunc e mainboard_pwm1 _mainboard_pwm1 fV
;          frequ -> R20,R21
	.even
_mainboard_pwm1::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 380
; 
;  void  mainboard_pwm1( int frequ)
; {
	.dbline 381
;     DDRE |= 0x38;
	in R24,0x2
	ori R24,56
	out 0x2,R24
	.dbline 382
;     TCCR3A = 0xA8;
	ldi R24,168
	sts 139,R24
	.dbline 383
;     TCCR3B = 0x12;
	ldi R24,18
	sts 138,R24
	.dbline 384
;     ICR3  = frequ;
	sts 128+1,R21
	sts 128,R20
	.dbline 385
;     OCR3A = frequ/2;
	ldi R18,2
	ldi R19,0
	movw R16,R20
	xcall div16s
	sts 134+1,R17
	sts 134,R16
	.dbline 386
;     OCR3B = frequ/2;
	ldi R18,2
	ldi R19,0
	movw R16,R20
	xcall div16s
	sts 132+1,R17
	sts 132,R16
	.dbline 387
; 	OCR3C = frequ/2;
	ldi R18,2
	ldi R19,0
	movw R16,R20
	xcall div16s
	sts 130+1,R17
	sts 130,R16
	.dbline -2
	.dbline 389
;    
;  }
L73:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r frequ 20 I
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 403
; //////////////////////////////////////////////////////////////////////////////
; //
; //
; /////////////////////////////////////////////////////////////////////////////////
;   
; 	   
; 	
; 
; 
; 
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 405
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 406
;  XDIV  = 0x00; //xtal divider
	clr R2
	out 0x3c,R2
	.dbline 407
;  XMCRA = 0x00; //external memory
	sts 109,R2
	.dbline 408
;  init_isp_devices();
	xcall _init_isp_devices
	.dbline 409
;  init_gyro();
	xcall _init_gyro
	.dbline 410
;  uart0_init();
	xcall _uart0_init
	.dbline 411
;  uart1_init();
	xcall _uart1_init
	.dbline 412
;  MCUCR = 0x80;
	ldi R24,128
	out 0x35,R24
	.dbline 413
;  EICRA = 0x00; //extended ext ints
	clr R2
	sts 106,R2
	.dbline 414
;  EICRB = 0x00; //extended ext ints
	out 0x3a,R2
	.dbline 415
;  EIMSK = 0x00;
	out 0x39,R2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -