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

📄 ex_support.s

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 S
📖 第 1 页 / 共 2 页
字号:
L3:
	.dbline 157
;         }
;     }
;     else if (fNumberB > 0)
	movw R24,R28
	adiw R24,4
	ldi R16,<L5
	ldi R17,>L5
	rcall lpm32
	st -y,R25
	st -y,R24
	rcall fpcmp1
	brlt X11
	rjmp L16
X11:
X5:
	.dbline 158
;     {
	.dbline 159
;         if (fNumberA < 0)
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	ldi R16,<L5
	ldi R17,>L5
	rcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	rcall fpcmp2
	brge L18
X6:
	.dbline 160
;         {
	rjmp L21
L20:
	.dbline 162
;             while((fNumberA + fNumberB) < fNumberB)
;             {
	.dbline 163
;                 fNumberA += fNumberB;
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	movw R24,R28
	adiw R24,4
	st -y,R25
	st -y,R24
	rcall fpadd1
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 164
;             }
L21:
	.dbline 161
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	movw R24,R28
	adiw R24,4
	st -y,R25
	st -y,R24
	rcall fpadd1
	movw R24,R28
	adiw R24,4
	st -y,R25
	st -y,R24
	rcall fpcmp1
	brlt L20
X7:
	.dbline 166
;             
;             return fNumberA;
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	rjmp L2
L18:
	.dbline 168
;         }
;         else if (fNumberA > 0)
	movw R24,R28
	ldi R16,<L5
	ldi R17,>L5
	rcall lpm32
	st -y,R25
	st -y,R24
	rcall fpcmp1
	brge L23
X8:
	.dbline 169
;         {
	rjmp L26
L25:
	.dbline 171
;             while(fNumberA > fNumberB)
;             {
	.dbline 172
;                 fNumberA -= fNumberB;
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	movw R24,R28
	adiw R24,4
	st -y,R25
	st -y,R24
	rcall fpsub1
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 173
;             }
L26:
	.dbline 170
	movw R24,R28
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	st -y,R25
	st -y,R24
	rcall fpcmp1
	brlt L25
X9:
	.dbline 175
;             
;             return fNumberA;
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	rjmp L2
L23:
	.dbline 178
;         }
;         else
;         {
	.dbline 179
;             return 0.0;
	ldi R16,<L5
	ldi R17,>L5
	rcall lpm32
	rjmp L2
L16:
	.dbline 183
;         }
;     }
;     else
;     {
	.dbline 184
;         return 0.0;
	ldi R16,<L5
	ldi R17,>L5
	rcall lpm32
	.dbline -2
L2:
	.dbline 0 ; func end
	adiw R28,4
	ret
	.dbsym l fNumberB 4 D
	.dbsym l fNumberA 0 D
	.dbend
	.dbfunc e PROC_Get_Relative_Location _PROC_Get_Relative_Location fc
;        cflags0 -> R10
;        fTempY0 -> y+8
;        fTempX0 -> y+4
;    fTempAngle0 -> y+0
	.even
_PROC_Get_Relative_Location::
	st -y,R10
	st -y,R11
	sbiw R28,12
	.dbline -1
	.dbline 196
;     }
; }
; 
; 
; /***********************************************************
; *   函数说明:  相对坐标转换函数                           *
; *   输入:      无                                         *
; *   输出:      FALSE                                      *
; *   调用函数:  无                                         *
; ***********************************************************/
; BOOL PROC_Get_Relative_Location(void)
; {
	.dbline 199
;     float fTempAngle,fTempX,fTempY;
;     
;     SAFE_CODE_PERFORMANCE
	.dbline 199
	in R10,0x3f
	.dbline 199
	cli
	.dbline 199
	lds R4,_g_fAbsoluteAngle+2
	lds R5,_g_fAbsoluteAngle+2+1
	lds R2,_g_fAbsoluteAngle
	lds R3,_g_fAbsoluteAngle+1
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	.dbline 199
	lds R4,_g_fAbsoluteX+2
	lds R5,_g_fAbsoluteX+2+1
	lds R2,_g_fAbsoluteX
	lds R3,_g_fAbsoluteX+1
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	.dbline 199
	lds R4,_g_fAbsoluteY+2
	lds R5,_g_fAbsoluteY+2+1
	lds R2,_g_fAbsoluteY
	lds R3,_g_fAbsoluteY+1
	std y+8,R2
	std y+9,R3
	std y+10,R4
	std y+11,R5
	.dbline 199
	.dbline 199
	out 0x3f,R10
	.dbline 199
	.dbline 206
;     (
;         fTempAngle = g_fAbsoluteAngle;
;         fTempX = g_fAbsoluteX;
;         fTempY = g_fAbsoluteY;
;     )
;     
;     g_fAngle = K_ANGLE * (float)g_wCounter + fTempAngle;  
	ldi R16,<L29
	ldi R17,>L29
	rcall lpm32
	movw R2,R16
	movw R4,R18
	lds R16,_g_wCounter
	lds R17,_g_wCounter+1
	rcall uint2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	rcall fpmule2
	movw R24,R28
	st -y,R25
	st -y,R24
	rcall fpadd1
	sts _g_fAngle+1,R17
	sts _g_fAngle,R16
	sts _g_fAngle+2+1,R19
	sts _g_fAngle+2,R18
	.dbline 207
;     g_fX = fTempX + RELATIVE_L * cos(fTempAngle);        
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	rcall _cosf
	movw R2,R16
	movw R4,R18
	ldd R6,y+4
	ldd R7,y+5
	ldd R8,y+6
	ldd R9,y+7
	ldi R16,<L30
	ldi R17,>L30
	rcall lpm32
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	rcall fpmule2x
	movw R16,R6
	movw R18,R8
	rcall fpadd2
	sts _g_fX+1,R17
	sts _g_fX,R16
	sts _g_fX+2+1,R19
	sts _g_fX+2,R18
	.dbline 208
;     g_fY = fTempY + RELATIVE_L * sin(fTempAngle); 
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	rcall _sinf
	movw R2,R16
	movw R4,R18
	ldd R6,y+8
	ldd R7,y+9
	ldd R8,y+10
	ldd R9,y+11
	ldi R16,<L30
	ldi R17,>L30
	rcall lpm32
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	rcall fpmule2x
	movw R16,R6
	movw R18,R8
	rcall fpadd2
	sts _g_fY+1,R17
	sts _g_fY,R16
	sts _g_fY+2+1,R19
	sts _g_fY+2,R18
	.dbline 210
;     
;     return FALSE;
	clr R16
	.dbline -2
L28:
	.dbline 0 ; func end
	adiw R28,12
	ld R11,y+
	ld R10,y+
	ret
	.dbsym r cflags0 10 c
	.dbsym l fTempY0 8 D
	.dbsym l fTempX0 4 D
	.dbsym l fTempAngle0 0 D
	.dbend
	.dbfunc e Delay_MS _Delay_MS fV
;          wTime -> R16,R17
	.even
_Delay_MS::
	.dbline -1
	.dbline 220
; }
; 
; /***********************************************************
; *   函数说明:系统毫秒延时函数                             *
; *   输入:    需要延时的时间长度                           *
; *   输出:    无                                           *
; *   调用函数:无                                           *
; ***********************************************************/
; void Delay_MS(uint16 wTime)
; {
	.dbline 221
;     s_wSystemDelayTimerCounter = wTime;
	sts _s_wSystemDelayTimerCounter+1,R17
	sts _s_wSystemDelayTimerCounter,R16
L32:
	.dbline 223
;     
;     while(s_wSystemDelayTimerCounter);
L33:
	.dbline 223
	lds R2,_s_wSystemDelayTimerCounter
	lds R3,_s_wSystemDelayTimerCounter+1
	tst R2
	brne L32
	tst R3
	brne L32
X12:
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbsym r wTime 16 i
	.dbend
	.dbfunc e Insert_Timer0_OVF_ISR_Code _Insert_Timer0_OVF_ISR_Code fV
	.even
_Insert_Timer0_OVF_ISR_Code::
	.dbline -1
	.dbline 233
; }
; 
; /***********************************************************
; *   函数说明:定时器0中断处理程序代码插入函数              *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:无                                           *
; ***********************************************************/
; void Insert_Timer0_OVF_ISR_Code(void)
; {
	.dbline 234
;     g_wSystemTimer++;
	lds R24,_g_wSystemTimer
	lds R25,_g_wSystemTimer+1
	adiw R24,1
	sts _g_wSystemTimer+1,R25
	sts _g_wSystemTimer,R24
	.dbline 236
; 
;     if (s_wSystemDelayTimerCounter)
	lds R2,_s_wSystemDelayTimerCounter
	lds R3,_s_wSystemDelayTimerCounter+1
	tst R2
	brne X13
	tst R3
	breq L36
X13:
	.dbline 237
;     {
	.dbline 238
;         s_wSystemDelayTimerCounter--;
	movw R24,R2
	sbiw R24,1
	sts _s_wSystemDelayTimerCounter+1,R25
	sts _s_wSystemDelayTimerCounter,R24
	.dbline 239
;     }
L36:
	.dbline 241
;     
;     if (!(g_wSystemTimer & (BIT(9) - 1)))
	lds R24,_g_wSystemTimer
	lds R25,_g_wSystemTimer+1
	andi R25,1
	cpi R24,0
	cpc R24,R25
	brne L38
X14:
	.dbline 242
;     {
	.dbline 243
;         PORTC ^= BIT(PC2);
	ldi R24,4
	in R2,0x8
	eor R2,R24
	out 0x8,R2
	.dbline 244
;     }
L38:
	.dbline -2
L35:
	.dbline 0 ; func end
	ret
	.dbend
	.area lit(rom, con, rel)
L30:
	.word 0x8000,0x4317
L29:
	.word 0xfdb,0x3bc9
L5:
	.word 0x0,0x0
; }
; 

⌨️ 快捷键说明

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