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

📄 position.lst

📁 利用avr c编程的综合程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
   1               		.file	"position.c"
   2               	__SREG__ = 0x3f
   3               	__SP_H__ = 0x3e
   4               	__SP_L__ = 0x3d
   5               	__CCP__  = 0x34
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  82               	.global	get_rel_angle
  84               	get_rel_angle:
   1:position.c    **** #include "position.h"
   2:position.c    **** 
   3:position.c    **** #define Pi 3.1415926536
   4:position.c    **** 
   5:position.c    **** #define abs(x) ( (x) < 0 ? -(x) : (x) )
   6:position.c    **** 
   7:position.c    **** volatile int angle_loca, x_loca , y_loca ;
   8:position.c    **** 
   9:position.c    **** volatile unsigned char uart_rec[6];
  10:position.c    **** 
  11:position.c    **** volatile unsigned char count;
  12:position.c    **** 
  13:position.c    **** void get_position()
  14:position.c    **** {
  15:position.c    **** 	unsigned char temp;
  16:position.c    **** 	
  17:position.c    **** 	count = 0;
  18:position.c    **** 	while(1)
  19:position.c    **** 	{
  20:position.c    **** 		temp = uartGetc();
  21:position.c    **** 		if(temp & 0x80)break;
  22:position.c    **** 		else continue;
  23:position.c    **** 	}
  24:position.c    **** 	uart_rec[count] = (temp & 0x7F);
  25:position.c    **** 	count ++;
  26:position.c    **** 	
  27:position.c    **** 	while(count < 6)
  28:position.c    **** 	{
  29:position.c    **** 		temp = uartGetc();
  30:position.c    **** 		uart_rec[count] = (temp & 0x7F);
  31:position.c    **** 		count++;
  32:position.c    **** 	}
  33:position.c    **** 	
  34:position.c    **** 	angle_loca = (uart_rec[0] + (uart_rec[1] << 7)) >> 1;
  35:position.c    **** 	x_loca = uart_rec[2] + (uart_rec[3] << 7);
  36:position.c    **** 	y_loca = uart_rec[4] + (uart_rec[5] << 7);
  37:position.c    **** 	return;
  38:position.c    **** }
  39:position.c    **** 
  40:position.c    **** int get_rel_angle(int angle_des)
  41:position.c    **** {
  85               	 */
  87               	.LM1:
  88               		lds r18,angle_loca
  89               		lds r19,(angle_loca)+1
  42:position.c    **** 	int rel_angle = angle_des - angle_loca;
  90               	r24,r18
  91               		sbc r25,r19
  92 0000 2091 0000 		movw r18,r24
  94 0008 821B      	.LM2:
  95 000a 930B      		subi r24,lo8(-(180))
  96 000c 9C01      		sbci r25,hi8(-(180))
  43:position.c    **** 	if(rel_angle >= -180 && rel_angle <= 180)
  97               	24,lo8(361)
  98               		sbci r25,hi8(361)
  99 000e 8C54      		brlo .L2
 101 0012 8956      	.LM3:
 102 0014 9140      		cpi r18,181
 103 0016 00F0      		cpc r19,__zero_reg__
  44:position.c    **** 		return rel_angle;
  45:position.c    **** 	else if(rel_angle > 180)
 104               	L3
 106 0018 253B      	.LM4:
 107 001a 3105      		subi r18,lo8(-(-360))
 108 001c 04F0      		sbci r19,hi8(-(-360))
  46:position.c    **** 		return (rel_angle - 360);
 109               	 .L2
 110               	.L3:
 112 0020 3140      	.LM5:
 113 0022 00C0      		ldi r24,hi8(-180)
 114               		cpi r18,lo8(-180)
  47:position.c    **** 	else if(rel_angle < -180)
 115               	19,r24
 116               		brlt .L4
 117 0024 8FEF      		ldi r18,lo8(0)
 118 0026 2C34      		ldi r19,hi8(0)
 119 0028 3807      		rjmp .L2
 120 002a 04F0      	.L4:
 122 002e 30E0      	.LM6:
 123 0030 00C0      		subi r18,lo8(-(360))
 124               		sbci r19,hi8(-(360))
  48:position.c    **** 		return (rel_angle + 360);
 125               	bn	68,0,51,.LM7-.LFBB1
 126               	.LM7:
 127 0032 2859      		movw r24,r18
 128 0034 3E4F      	/* epilogue start */
 129               		ret
  49:position.c    **** 	else 
  50:position.c    **** 		return 0;
  51:position.c    **** }
 130               	e	get_rel_angle, .-get_rel_angle
 134 0038 0895      	.Lscope1:
 137               	.global	get_rotate_speed
 139               	get_rotate_speed:
 141               	.LM8:
 142               	.LFBB2:
 143               	/* prologue: function */
 144               	/* frame size = 0 */
  52:position.c    **** 
  53:position.c    **** short get_rotate_speed(int angle)
  54:position.c    **** {
 145               	,.LM9-.LFBB2
 146               	.LM9:
 147               		cpi r24,121
 148               		cpc r25,__zero_reg__
 149               		brlt .L7
  55:position.c    **** 	if(angle > 120)
 150               	r18,lo8(50)
 151               		ldi r19,hi8(50)
 152 003a 8937      		rjmp .L8
 153 003c 9105      	.L7:
 155 0040 22E3      	.LM10:
 156 0042 30E0      		cpi r24,91
 157 0044 00C0      		cpc r25,__zero_reg__
 158               		brlt .L9
  56:position.c    **** 		return 50;
  57:position.c    **** 	else if(angle > 90)
 159               	lo8(40)
 160               		ldi r19,hi8(40)
 161 0046 8B35      		rjmp .L8
 162 0048 9105      	.L9:
 164 004c 28E2      	.LM11:
 165 004e 30E0      		cpi r24,46
 166 0050 00C0      		cpc r25,__zero_reg__
 167               		brlt .L10
  58:position.c    **** 		return 40;
  59:position.c    **** 	else if(angle > 45)
 168               	lo8(30)
 169               		ldi r19,hi8(30)
 170 0052 8E32      		rjmp .L8
 171 0054 9105      	.L10:
 173 0058 2EE1      	.LM12:
 174 005a 30E0      		sbiw r24,16
 175 005c 00C0      		brge .L11
 176               		ldi r18,lo8(10)
  60:position.c    **** 		return 30;
  61:position.c    **** 	else if(angle > 15)
 177               	hi8(10)
 178               		rjmp .L8
 179 005e 4097      	.L11:
 180 0060 04F4      		ldi r18,lo8(20)
 181 0062 2AE0      		ldi r19,hi8(20)
 182 0064 30E0      	.L8:
 184               	.LM13:
 185 0068 24E1      		movw r24,r18
 186 006a 30E0      	/* epilogue start */
 187               		ret
  62:position.c    **** 		return 20;
  63:position.c    **** 	else 
  64:position.c    **** 		return 10;
  65:position.c    **** }
 188               	rotate_speed, .-get_rotate_speed
 189               	.Lscope2:
 193               	.global	get_angle_des
 195               	get_angle_des:
 197               	.LM14:
 198               	.LFBB3:
 199               		push r12
 200               		push r13
  66:position.c    **** 
  67:position.c    **** void rotate(int angle_des, short move_speed)
  68:position.c    **** {
  69:position.c    **** 	int rel_angle;
  70:position.c    **** 	short rotate_speed;
  71:position.c    **** 	
  72:position.c    **** 	motor(0x1a, move_speed, move_speed);
  73:position.c    **** 	_delay_ms(10);
  74:position.c    **** 	
  75:position.c    **** 	get_position();
  76:position.c    **** 	rel_angle = get_rel_angle(angle_des);
  77:position.c    **** 	
  78:position.c    **** 	while(abs(rel_angle) > 1)
  79:position.c    **** 	{
  80:position.c    **** 		get_position();
  81:position.c    **** 		rel_angle = get_rel_angle(angle_des);
  82:position.c    **** 		rotate_speed = get_rotate_speed(abs(rel_angle));
  83:position.c    **** 		if(rel_angle > 0)
  84:position.c    **** 			motor(0x1a, rotate_speed+move_speed, -1*rotate_speed+move_speed);
  85:position.c    **** 		else 
  86:position.c    **** 			motor(0x1a, -1*rotate_speed+move_speed, rotate_speed+move_speed);
  87:position.c    ****     }
  88:position.c    **** 	
  89:position.c    **** 	motor(0x1a,move_speed,move_speed);
  90:position.c    **** 	return;
  91:position.c    **** }
  92:position.c    **** 
  93:position.c    **** int get_angle_des(int x_des, int y_des)
  94:position.c    **** {
 201               	sh r15
 202               		push r16
 203               		push r17
 204 0070 CF92      		push r28
 205 0072 DF92      		push r29
 206 0074 EF92      	/* prologue: function */
 207 0076 FF92      	/* frame size = 0 */
 208 0078 0F93      		movw r28,r24
 209 007a 1F93      		movw r18,r22
 211 007e DF93      	.LM15:
 212               		lds r24,x_loca
 213               		lds r25,(x_loca)+1
 214 0080 EC01      		cp r28,r24
 215 0082 9B01      		cpc r29,r25
  95:position.c    **** 	int angle_des; 
  96:position.c    **** 	if(x_des == x_loca)
 216               	abn	68,0,98,.LM16-.LFBB3
 217               	.LM16:
 218 0084 8091 0000 		lds r24,y_loca
 219 0088 9091 0000 		lds r25,(y_loca)+1
 220 008c C817      		cp r24,r22
 221 008e D907      		cpc r25,r23
 222 0090 01F4      		brlt .L15
  97:position.c    **** 	{
  98:position.c    **** 		if(y_des > y_loca)
 223               	2,lo8(-90)
 224               		ldi r23,hi8(-90)
 225 0092 8091 0000 		rjmp .L16
 226 0096 9091 0000 	.L15:
 227 009a 8617      		ldi r22,lo8(90)
 228 009c 9707      		ldi r23,hi8(90)
 229 009e 04F0      		rjmp .L16
 230 00a0 66EA      	.L14:
 232 00a4 00C0      	.LM17:
 233               		lds r24,y_loca
 234 00a6 6AE5      		lds r25,(y_loca)+1
 235 00a8 70E0      		lds r12,x_loca
 236 00aa 00C0      		lds r13,(x_loca)+1
 237               		sub r18,r24
  99:position.c    **** 			angle_des = 90;
 100:position.c    **** 		else
 101:position.c    **** 			angle_des = -90;
 102:position.c    **** 	}
 103:position.c    **** 	else
 104:position.c    **** 		angle_des = (int)((atan(((double)(y_des-y_loca))/((double)(x_des-x_loca))))*180.0/Pi) ;
 238               	ovw r22,r18
 239               		clr r24
 240 00ac 8091 0000 		sbrc r23,7
 241 00b0 9091 0000 		com r24
 242 00b4 C090 0000 		mov r25,r24
 243 00b8 D090 0000 		call __floatsisf
 244 00bc 281B      		movw r14,r22
 245 00be 390B      		movw r16,r24
 246 00c0 B901      		movw r22,r28
 247 00c2 8827      		sub r22,r12
 248 00c4 77FD      		sbc r23,r13
 249 00c6 8095      		clr r24
 250 00c8 982F      		sbrc r23,7
 251 00ca 0E94 0000 		com r24
 252 00ce 7B01      		mov r25,r24
 253 00d0 8C01      		call __floatsisf
 254 00d2 BE01      		movw r18,r22
 255 00d4 6C19      		movw r20,r24
 256 00d6 7D09      		movw r24,r16
 257 00d8 8827      		movw r22,r14
 258 00da 77FD      		call __divsf3
 259 00dc 8095      		call atan
 260 00de 982F      		ldi r18,lo8(0x43340000)
 261 00e0 0E94 0000 		ldi r19,hi8(0x43340000)
 262 00e4 9B01      		ldi r20,hlo8(0x43340000)
 263 00e6 AC01      		ldi r21,hhi8(0x43340000)
 264 00e8 C801      		call __mulsf3
 265 00ea B701      		ldi r18,lo8(0x40490fdb)
 266 00ec 0E94 0000 		ldi r19,hi8(0x40490fdb)
 267 00f0 0E94 0000 		ldi r20,hlo8(0x40490fdb)
 268 00f4 20E0      		ldi r21,hhi8(0x40490fdb)
 269 00f6 30E0      		call __divsf3
 270 00f8 44E3      		call __fixsfsi
 271 00fa 53E4      	.L16:
 273 0100 2BED      	.LM18:
 274 0102 3FE0      		lds r24,x_loca
 275 0104 49E4      		lds r25,(x_loca)+1
 276 0106 50E4      		cp r28,r24
 277 0108 0E94 0000 		cpc r29,r25
 278 010c 0E94 0000 		brge .L17
 105:position.c    **** 	
 106:position.c    **** 	if(x_des < x_loca)
 280               	(-(180))
 281               		rjmp .L18
 282 0110 8091 0000 	.L17:
 284 0118 C817      	.LM20:
 285 011a D907      		movw r24,r22
 286 011c 04F4      		subi r24,lo8(-(360))
 107:position.c    **** 		angle_des += 180; 
 287               	25,hi8(-(360))
 288               		ldi r22,lo8(360)
 289 011e 6C54      		ldi r23,hi8(360)
 290 0120 7F4F      		call __divmodhi4
 291 0122 00C0      		movw r22,r24
 292               	.L18:
 108:position.c    **** 	else
 109:position.c    **** 		angle_des = (angle_des+360)%360;
 293               	n	68,0,112,.LM21-.LFBB3
 294               	.LM21:
 295 0124 CB01      		movw r24,r22
 296 0126 8859      	/* epilogue start */
 297 0128 9E4F      		pop r29
 298 012a 68E6      		pop r28
 299 012c 71E0      		pop r17
 300 012e 0E94 0000 		pop r16
 301 0132 BC01      		pop r15
 302               		pop r14
 110:position.c    **** 	
 111:position.c    **** 	return angle_des;
 112:position.c    **** }
 303               	pop r12
 304               		ret
 309 013a 1F91      	.Lscope3:
 311 013e FF90      	.global	get_position
 313 0142 DF90      	get_position:
 315 0146 0895      	.LM22:
 316               	.LFBB4:
 317               	/* prologue: function */
 318               	/* frame size = 0 */
 320               	.LM23:
 321               		sts count,__zero_reg__
 322               	.L21:
 324               	.LM24:
 325               		call uartGetc
 327               	.LM25:
 328               		sbrs r24,7
 329               		rjmp .L21
 330               		rjmp .L26
 331               	.L23:

⌨️ 快捷键说明

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