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

📄 spline.s

📁 ssd1325控制器液晶的驱动程序
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbsym r B 14 pD
	.dbsym l sl 90 pX
	.dbend
	.dbfunc e SPLINE_Generate _SPLINE_Generate fV
;        AMagOld -> y+44
;           AMag -> y+40
;              k -> y+0
;              i -> R10,R11
;             sl -> R12,R13
	.even
_SPLINE_Generate::
	xcall push_gset4
	movw R12,R16
	sbiw R28,63
	sbiw R28,1  ; offset = 64
	.dbline -1
	.dbline 203
;    {  B[i] = Work[i];
;    }
;    
; }
; 
; 
; 
; /****************************************************************************
; * 名称:SPLINE_Generate()
; * 功能:产生样条曲线图形。产生的各个端点保存到sl的结构内。
; * 入口参数:sl		要操作的样条曲线对象,SPLINE结构
; * 出口参数:无
; * 说明:sl要先使用SPLINE_SetSpline()设置各个特征点。
; ****************************************************************************/
; void  SPLINE_Generate(SPLINE *sl) 
; {  float  k[NPMAX];
	.dbline 208
;    float  AMag , AMagOld;
;    int    i;
; 
;    /* 设置A点值 */
;    for(i=0 ; i<=(sl->Np-2); i++ ) 
	clr R10
	clr R11
	xjmp L65
L62:
	.dbline 209
	.dbline 209
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R2,R16
	movw R4,R2
	add R4,R12
	adc R5,R13
	movw R30,R4
	ldd R6,z+4
	ldd R7,z+5
	ldd R8,z+6
	ldd R9,z+7
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R30,R4
	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 sub32f
	movw R24,R12
	subi R24,176  ; offset = 80
	sbci R25,255
	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 210
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R2,R16
	movw R24,R12
	adiw R24,44
	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,R12
	adiw R24,40
	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 sub32f
	movw R24,R12
	subi R24,136  ; offset = 120
	sbci R25,255
	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 211
L63:
	.dbline 208
	movw R24,R10
	adiw R24,1
	movw R10,R24
L65:
	.dbline 208
	movw R30,R12
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,2
	cp R24,R10
	cpc R25,R11
	brlt X8
	xjmp L62
X8:
	.dbline 214
;    {  sl->Ax[i] = sl->Px[i+1] - sl->Px[i];
; 	  sl->Ay[i] = sl->Py[i+1] - sl->Py[i];
;    }
; 		
;    /* 计算k变量 */
;    AMagOld = (float)sqrt(sl->Ax[0] * sl->Ax[0] + sl->Ay[0] * sl->Ay[0]);
	movw R30,R12
	subi R30,176  ; addi 80
	sbci R31,255
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	std z+48,R2
	std z+49,R3
	std z+50,R4
	std z+51,R5
	movw R30,R12
	subi R30,136  ; addi 120
	sbci R31,255
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	std z+52,R2
	std z+53,R3
	std z+54,R4
	std z+55,R5
	movw R30,R28
	ldd R2,z+48
	ldd R3,z+49
	ldd R4,z+50
	ldd R5,z+51
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R30,R28
 ; stack offset 4
	ldd R2,z+52
	ldd R3,z+53
	ldd R4,z+54
	ldd R5,z+55
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32fs
	movw R30,R28
 ; stack offset 4
	ldd R2,z+56
	ldd R3,z+57
	ldd R4,z+58
	ldd R5,z+59
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R30,R28
 ; stack offset 8
	ldd R2,z+60
	ldd R3,z+61
	ldd R4,z+62
	ldd R5,z+63
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32fs
	xcall add32f
	xcall _sqrt
	movw R30,R28
	std z+44,R16
	std z+45,R17
	std z+46,R18
	std z+47,R19
	.dbline 215
;    for(i=0 ; i<=(sl->Np-3); i++) 
	clr R10
	clr R11
	xjmp L69
L66:
	.dbline 216
	.dbline 216
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R24,R12
	subi R24,172  ; offset = 84
	sbci R25,255
	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,R28
	std z+56,R2
	std z+57,R3
	std z+58,R4
	std z+59,R5
	movw R24,R12
	subi R24,132  ; offset = 124
	sbci R25,255
	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,R28
	std z+60,R2
	std z+61,R3
	std z+62,R4
	std z+63,R5
	movw R30,R28
	ldd R2,z+56
	ldd R3,z+57
	ldd R4,z+58
	ldd R5,z+59
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R30,R28
 ; stack offset 4
	ldd R2,z+60
	ldd R3,z+61
	ldd R4,z+62
	ldd R5,z+63
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32fs
	movw R30,R28
 ; stack offset 4
	subi R30,192  ; addi 64
	sbci R31,255
	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
	subi R30,188  ; addi 68
	sbci R31,255
	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 empy32fs
	xcall add32f
	xcall _sqrt
	movw R30,R28
	std z+40,R16
	std z+41,R17
	std z+42,R18
	std z+43,R19
	.dbline 217
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R30,R16
	movw R24,R28
	add R30,R24
	adc R31,R25
	movw R26,R28
	adiw R26,44
	ld R2,x+
	ld R3,x+
	ld R4,x+
	ld R5,x
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R26,R28
 ; stack offset 4
	adiw R26,44
	ld R2,x+
	ld R3,x+
	ld R4,x+
	ld R5,x
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall div32f
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 218
	movw R30,R28
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	movw R30,R28
	std z+44,R2
	std z+45,R3
	std z+46,R4
	std z+47,R5
	.dbline 219
L67:
	.dbline 215
	movw R24,R10
	adiw R24,1
	movw R10,R24
L69:
	.dbline 215
	movw R30,R12
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,3
	cp R24,R10
	cpc R25,R11
	brlt X9
	xjmp L66
X9:
	.dbline 220
;    {  AMag = (float)sqrt(sl->Ax[i+1] * sl->Ax[i+1] + sl->Ay[i+1] * sl->Ay[i+1]);
; 	  k[i] = AMagOld / AMag;
; 	  AMagOld = AMag;
;    }
;    k[sl->Np-2] = 1.0f;
	movw R30,R12
	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 R30,R16
	movw R24,R28
	sbiw R24,8
	add R30,R24
	adc R31,R25
	ldi R16,<L26
	ldi R17,>L26
	xcall lpm32
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 223
; 
;    /* 矩阵计算 */
;    for(i=1; i<=(sl->Np-2); i++) 
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L74
L71:
	.dbline 224
	.dbline 224
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R30,R16
	movw R24,R12
	subi R24,192  ; offset = 320
	sbci R25,254
	add R30,R24
	adc R31,R25
	ldi R16,<L26
	ldi R17,>L26
	xcall lpm32
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 225
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R2,R16
	ldi R16,<L28
	ldi R17,>L28
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R24,R28
 ; stack offset 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
	movw R24,R28
 ; stack offset 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
	ldi R16,<L26
	ldi R17,>L26
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall add32fs
	xcall empy32f
	movw R24,R12
	subi R24,152  ; offset = 360
	sbci R25,254
	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 226
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R2,R16
	movw R24,R28
	sbiw 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
	movw R24,R28
 ; stack offset 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
	movw R24,R28
 ; stack offset 4
	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 empy32f
	movw R24,R12
	subi R24,112  ; offset = 400
	sbci R25,254
	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 227
L72:
	.dbline 223
	movw R24,R10
	adiw R24,1
	movw R10,R24
L74:
	.dbline 223
	movw R30,R12
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,2
	cp R24,R10
	cpc R25,R11
	brlt X10
	xjmp L71
X10:
	.dbline 228
;    {  sl->Mat[0][i] = 1.0f;
; 	  sl->Mat[1][i] = 2.0f * k[i-1] * (1.0f + k[i-1]);
; 	  sl->Mat[2][i] = k[i-1] * k[i-1] * k[i];
;    }
;    sl->Mat[1][0] = 2.0f;
	ldi R16,<L28
	ldi R17,>L28
	xcall lpm32
	movw R30,R12
	subi R30,152  ; addi 360
	sbci R31,254
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 229
;    sl->Mat[2][0] = k[0];
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R12
	subi R30,112  ; addi 400
	sbci R31,254
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 230
;    sl->Mat[0][sl->Np-1] = 1.0f;
	movw R30,R12
	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 R30,R16
	sbiw R30,4
	movw R24,R12
	subi R24,192  ; offset = 320
	sbci R25,254
	add R30,R24
	adc R31,R25
	ldi R16,<L26
	ldi R17,>L26
	xcall lpm32
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 231
;    sl->Mat[1][sl->Np-1] = 2.0f * k[sl->Np-2];
	movw R30,R12
	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
	ldi R16,<L28
	ldi R17,>L28
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R24,R28
 ; stack offset 4
	sbiw 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 empy32f
	movw R24,R12
	subi R24,152  ; offset = 360
	sbci R25,254
	movw R30,R2
	sbiw R30,4
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 233
;  
;    for(i=1; i<=(sl->Np-2);i++) 
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L83
L80:
	.dbline 234
	.dbline 234
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R2,R16
	movw R24,R12
	subi R24,176  ; offset = 80
	sbci R25,255
	movw R4,R24
	ldi R16,<L27
	ldi R17,>L27
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R30,R2
	sbiw R30,4
	add R30,R4
	adc R31,R5
	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
	adiw R24,4
	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
	movw R24,R28
 ; stack offset 12
	adiw R24,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
	movw R30,R2
	add R30,R4
	adc R31,R5
	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 add32fs
	xcall empy32f
	movw R24,R12
	subi R24,96  ; offset = 160
	sbci R25,255
	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 235
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R2,R16
	movw R24,R12
	subi R24,136  ; offset = 120
	sbci R25,255
	movw R4,R24
	ldi R16,<L27
	ldi R17,>L27
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R30,R2
	sbiw R30,4
	add R30,R4
	adc R31,R5
	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
	adiw R24,4
	movw R30,R2

⌨️ 快捷键说明

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