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

📄 spline.s

📁 ssd1325控制器液晶的驱动程序
💻 S
📖 第 1 页 / 共 4 页
字号:
	ldd R24,z+0
	ldd R25,z+1
	adiw R24,1
	std z+1,R25
	std z+0,R24
	.dbline 126
L23:
	.dbline 114
	movw R24,R14
	adiw R24,1
	movw R14,R24
L25:
	.dbline 114
	movw R30,R6
	ldd R2,z+24
	ldd R3,z+25
	cp R2,R14
	cpc R3,R15
	brlt X2
	xjmp L22
X2:
	.dbline -2
L19:
	adiw R28,20
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r Y 10 I
	.dbsym r X 12 I
	.dbsym l h 12 D
	.dbsym l g 8 D
	.dbsym l f 4 D
	.dbsym r i 14 I
	.dbsym l t 0 D
	.dbsym r PointCount 20 pI
	.dbsym r points 22 pX
	.dbsym l y 34 D
	.dbsym l x 30 D
	.dbsym r cl 6 pX
	.dbend
	.dbfunc e SPLINE_SetSpline _SPLINE_SetSpline fV
;              i -> R20,R21
;             np -> y+6
;             pt -> R22,R23
;             sl -> R10,R11
	.even
_SPLINE_SetSpline::
	xcall push_gset3
	movw R22,R18
	movw R10,R16
	.dbline -1
	.dbline 144
; 	{  t = 1.0f / (float)cl->Ndiv * (float)i;
; 	   f = t * t * (3.0f - 2.0f * t);
; 	   g = t * (t - 1.0f) * (t-1.0f);
; 	   h = t * t * (t-1.0f);
; 		
; 	   X = (int)(x + cl->Ax*f + cl->Bx*g + cl->Cx*h);
; 	   Y = (int)(y + cl->Ay*f + cl->By*g + cl->Cy*h);
; 		
; 	   points[*PointCount].x = X;
; 	   points[*PointCount].y = Y;
; 	   (*PointCount)++;
; 	}
; }
; 
; 
; 
; /***************************************************************************/
; 
; 
; /****************************************************************************
; * 名称:SPLINE_Spline()
; * 功能:样条曲线初始化函数,将特征点输入到样条曲线对象中。
; * 入口参数:sl			要操作的样条曲线对象,SPLINE结构
; *		   pt			特征点数据		
; *          np			特征点个数
; * 出口参数:无
; * 说明:
; ****************************************************************************/
; void  SPLINE_SetSpline(SPLINE *sl, PointXY pt[], int np)
; {  int  i;
	.dbline 146
; 
;    sl->Np = np;
	movw R30,R10
	ldd R0,y+6
	ldd R1,y+7
	subi R30,72  ; addi 440
	sbci R31,254
	std z+1,R1
	std z+0,R0
	.dbline 149
; 
;    /* 将点数据复制到sl对象 */
;    for(i=0; i<sl->Np; i++) 
	clr R20
	clr R21
	xjmp L33
L30:
	.dbline 150
	.dbline 150
	ldi R16,4
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R2,R16
	movw R30,R2
	add R30,R22
	adc R31,R23
	ldd R4,z+0
	ldd R5,z+1
	ldi R16,<L34
	ldi R17,>L34
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R4
	lsr R17
	ror R16
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall empy32fs
	movw R16,R4
	andi R16,1
	andi R17,0
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall add32f
	movw R30,R2
	add R30,R10
	adc R31,R11
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 151
	ldi R16,4
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R2,R16
	movw R30,R2
	add R30,R22
	adc R31,R23
	ldd R4,z+2
	ldd R5,z+3
	ldi R16,<L34
	ldi R17,>L34
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R4
	lsr R17
	ror R16
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall empy32fs
	movw R16,R4
	andi R16,1
	andi R17,0
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall add32f
	movw R24,R10
	adiw R24,40
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 152
L31:
	.dbline 149
	subi R20,255  ; offset = 1
	sbci R21,255
L33:
	.dbline 149
	movw R30,R10
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R2,z+0
	ldd R3,z+1
	cp R20,R2
	cpc R21,R3
	brge X3
	xjmp L30
X3:
	.dbline -2
L29:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbsym l np 6 I
	.dbsym r pt 22 pX
	.dbsym r sl 10 pX
	.dbend
	.dbfunc e SPLINE_MatrixSolve _SPLINE_MatrixSolve fV
;              j -> R10,R11
;           Work -> y+40
;          WorkB -> y+0
;              i -> R12,R13
;              B -> R14,R15
;             sl -> y+90
	.even
_SPLINE_MatrixSolve::
	xcall push_arg4
	xcall push_gset5
	movw R14,R18
	sbiw R28,63
	sbiw R28,17  ; offset = 80
	.dbline -1
	.dbline 166
;    {  sl->Px[i] = (float)pt[i].x;  
; 	  sl->Py[i] = (float)pt[i].y;
;    }
; }
; 
; 
; 
; /****************************************************************************
; * 名称:SPLINE_MatrixSolve()
; * 功能:求解矩阵。
; * 入口参数:sl		要操作的样条曲线对象,SPLINE结构
; *          B		需操作B点数据(数组)
; * 出口参数:无
; * 说明:由SPLINE_Generate()调用,计算值保存在B返回。
; ****************************************************************************/
; void  SPLINE_MatrixSolve(SPLINE *sl, float B[]) 
; {  float  Work[NPMAX];
	.dbline 170
;    float  WorkB[NPMAX];
;    int    i, j;
; 		
;    for(i=0; i<=(sl->Np-1); i++) 
	clr R12
	clr R13
	xjmp L39
L36:
	.dbline 171
	.dbline 171
	ldi R16,4
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	movw R30,R2
	add R30,R14
	adc R31,R15
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
 ; stack offset 4
	movw R30,R28
	subi R30,162  ; addi 94
	sbci R31,255
	ldd R24,z+0
	ldd R25,z+1
	subi R24,152  ; offset = 360
	sbci R25,254
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall div32f
	movw R24,R28
	adiw R24,40
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 172
	ldi R16,4
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R24,R28
	adiw R24,40
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R24,R28
	movw R30,R16
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 173
L37:
	.dbline 170
	movw R24,R12
	adiw R24,1
	movw R12,R24
L39:
	.dbline 170
	movw R26,R28
	subi R26,166  ; addi 90
	sbci R27,255
	ld R30,x+
	ld R31,x
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,1
	cp R24,R12
	cpc R25,R13
	brlt X4
	xjmp L36
X4:
	.dbline 175
;    {  Work[i] = B[i] / sl->Mat[1][i];
; 	  WorkB[i] = Work[i];
;    }
; 
;    for(j=0; j<10; j++) 
	clr R10
	clr R11
L40:
	.dbline 176
;    {  Work[0] = (B[0] - sl->Mat[2][0] * WorkB[1]) / sl->Mat[1][0];
	.dbline 176
	movw R30,R14
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
 ; stack offset 4
	movw R26,R28
	subi R26,162  ; addi 94
	sbci R27,255
	ld R30,x+
	ld R31,x
	subi R30,112  ; addi 400
	sbci R31,254
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R30,R28
 ; stack offset 8
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32fs
	xcall sub32fs
 ; stack offset 4
	movw R26,R28
	subi R26,162  ; addi 94
	sbci R27,255
	ld R30,x+
	ld R31,x
	subi R30,152  ; addi 360
	sbci R31,254
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall div32f
	movw R30,R28
	std z+40,R16
	std z+41,R17
	std z+42,R18
	std z+43,R19
	.dbline 177
; 	  for(i=1; i<(sl->Np-1); i++ ) 
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L48
L45:
	.dbline 178
	.dbline 178
	ldi R16,4
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	movw R30,R2
	add R30,R14
	adc R31,R15
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
 ; stack offset 4
	movw R30,R28
	subi R30,162  ; addi 94
	sbci R31,255
	ldd R24,z+0
	ldd R25,z+1
	subi R24,192  ; offset = 320
	sbci R25,254
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	movw R24,R28
 ; stack offset 8
	adiw R24,4
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall empy32fs
	xcall sub32fs
 ; stack offset 4
	movw R30,R28
	subi R30,162  ; addi 94
	sbci R31,255
	ldd R24,z+0
	ldd R25,z+1
	subi R24,112  ; offset = 400
	sbci R25,254
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	movw R24,R28
 ; stack offset 8
	adiw R24,12
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall empy32fs
	xcall sub32fs
 ; stack offset 4
	movw R30,R28
	subi R30,162  ; addi 94
	sbci R31,255
	ldd R24,z+0
	ldd R25,z+1
	subi R24,152  ; offset = 360
	sbci R25,254
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall div32f
	movw R24,R28
	adiw R24,40
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 179
L46:
	.dbline 177
	movw R24,R12
	adiw R24,1
	movw R12,R24
L48:
	.dbline 177
	movw R26,R28
	subi R26,166  ; addi 90
	sbci R27,255
	ld R30,x+
	ld R31,x
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,1
	cp R12,R24
	cpc R13,R25
	brge X5
	xjmp L45
X5:
	.dbline 180
;   	  {  Work[i] = (B[i] - sl->Mat[0][i] * WorkB[i-1] - sl->Mat[2][i] * WorkB[i+1]) / sl->Mat[1][i];
; 	  }
; 	  Work[sl->Np-1] = (B[sl->Np-1] - sl->Mat[0][sl->Np-1] * WorkB[sl->Np-2]) / sl->Mat[1][sl->Np-1];
	movw R26,R28
	subi R26,166  ; addi 90
	sbci R27,255
	ld R30,x+
	ld R31,x
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R18,z+0
	ldd R19,z+1
	ldi R16,4
	ldi R17,0
	xcall empy16s
	movw R2,R16
	movw R24,R2
	sbiw R24,4
	movw R4,R24
	movw R30,R24
	add R30,R14
	adc R31,R15
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
 ; stack offset 4
	movw R30,R28
	subi R30,162  ; addi 94
	sbci R31,255
	ldd R24,z+0
	ldd R25,z+1
	subi R24,192  ; offset = 320
	sbci R25,254
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R24,R28
 ; stack offset 8
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	xcall empy32fs
	xcall sub32fs
 ; stack offset 4
	movw R30,R28
	subi R30,162  ; addi 94
	sbci R31,255
	ldd R24,z+0
	ldd R25,z+1
	subi R24,152  ; offset = 360
	sbci R25,254
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall div32f
	movw R24,R28
	adiw R24,36
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 182
; 
; 	  for(i=0; i<=(sl->Np-1); i++) 
	clr R12
	clr R13
	xjmp L56
L53:
	.dbline 183
	.dbline 183
	ldi R16,4
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R24,R28
	adiw R24,40
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R24,R28
	movw R30,R16
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 184
L54:
	.dbline 182
	movw R24,R12
	adiw R24,1
	movw R12,R24
L56:
	.dbline 182
	movw R26,R28
	subi R26,166  ; addi 90
	sbci R27,255
	ld R30,x+
	ld R31,x
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,1
	cp R24,R12
	cpc R25,R13
	brlt X6
	xjmp L53
X6:
	.dbline 185
L41:
	.dbline 175
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 175
	cpi R24,10
	ldi R30,0
	cpc R25,R30
	brge X7
	xjmp L40
X7:
	.dbline 187
; 	  {  WorkB[i] = Work[i];
; 	  }
;    }
;    
;    for(i=0; i<=(sl->Np-1); i++) 
	clr R12
	clr R13
	xjmp L60
L57:
	.dbline 188
	.dbline 188
	ldi R16,4
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R24,R28
	adiw R24,40
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R16
	add R30,R14
	adc R31,R15
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 189
L58:
	.dbline 187
	movw R24,R12
	adiw R24,1
	movw R12,R24
L60:
	.dbline 187
	movw R26,R28
	subi R26,166  ; addi 90
	sbci R27,255
	ld R30,x+
	ld R31,x
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,1
	cp R24,R12
	cpc R25,R13
	brge L57
	.dbline -2
L35:
	adiw R28,63
	adiw R28,17  ; offset = 80
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r j 10 I
	.dbsym l Work 40 A[40:10]D
	.dbsym l WorkB 0 A[40:10]D
	.dbsym r i 12 I

⌨️ 快捷键说明

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