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

📄 sin.asm

📁 基于dsp的sinxcosx的泰勒级数展开式
💻 ASM
字号:
************************************** 
*    利用泰勒公式产生正弦波的程序    *
**************************************
	.title	"sin.asm"
	.mmregs
	.def	start

sin_x:	.usect	"sin_x",360
STACK:	.usect "STACK",10H
		.bss    dis_buff,1
k_theta	.set	286
PA0	.set	0x0002
	.text
start:	STM	#STACK+10H,SP
	STM	k_theta,AR0
	STM	0,AR1
	STM	#sin_x,AR6
	STM	#90,BRC
	RPTB	loop1-1
	LDM	AR1,A
	LD	#d_xs,DP
	STL	A,@d_xs
	STL	A,@d_xc
	CALL	sinx
	CALL	cosx
	LD	#d_sinx,DP
	LD	@d_sinx,16,A
	MPYA	@d_cosx
	STH	B,1,*AR6+
	MAR	*AR1+0
loop1:	STM	#sin_x+89,AR7
	STM	#88,BRC
	RPTB	loop2-1
	LD	*AR7-,A
	STL	A,*AR6+
loop2:	STM	#179,BRC
	STM	#sin_x,AR7
	RPTB	loop3-1
	LD	*AR7+,A
	NEG	A
	STL	A,*AR6+
loop3:	STM	#sin_x,AR6
	STM	#1,AR0
	STM	#360,BK
loop4:	PORTW	*AR6+0%,PA0
	LD  *AR6,A
	MVDK *AR6,@dis_buff	
	B	loop4
******************************************************
*用泰勒级数开展开式计算角度的正弦值 	     	     *
*sin(x)=x(1-x*x/2*3(1-x*x/4*5(1-x*x/6*7(1-x*x/8*9))))*
******************************************************
sinx:
	.def	d_xs,d_sinx
	.data
	.data
table_s
	.word	01C7H		;c1=1/(8*9)
	.word	030BH		;c2=1/(6*7)
	.word	0666H		;c3=1/(4*5)
	.word	1556H		;c4=1/(2*3)
d_coef_s	.usect	"coef_s",4
d_xs		.usect	"sin_vars",1
d_squr_xs	.usect	"sin_vars",1
d_temp_s	.usect	"sin_vars",1
d_sinx		.usect	"sin_vars",1
d_l_s		.usect	"sin_vars",1
	.text
	SSBX	FRCT
	STM	#d_coef_s,AR5
	RPT	#3
	MVPD	#table_s,*AR5+
	STM	#d_coef_s,AR3
	STM	#d_xs,AR2
	STM	#d_l_s,AR4
	ST	#7FFFH,d_l_s
	SQUR	*AR2+,A			;A=x^2
	ST	A,*AR2				;(AR2)=x^2
	||LD	*AR4,B			;B=1
	MASR	*AR2+,*AR3+,B,A	;A=1-x^2/72,T=x^2
	MPYA	A				;A=T*A=x^2(1-x^2/72)
	STH	A,*AR2				;(d_temp)=x^2(1-x^2/72)
	MASR	*AR2-,*AR3+,B,A	;A=1-x^2/42(1-x^2/72),T=x^2(1-x^2/72)
	MPYA	*AR2+			;B=x^2(1-x^2/42(1-x^2/72))
	ST	B,*AR2				;(d_temp)=x^2(1-x^2/42(1-x^2/72))
	||LD	*AR4,B			;B=1
	MASR	*AR2-,*AR3+,B,A	;A=1-x^2/20(1-x^2/42(1-x^2/72))
	MPYA	*AR2+			;B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))
	ST	B,*AR2				;(d_temp)=B
	||LD	*AR4,B			;B=1
	MASR	*AR2-,*AR3+,B,A	;A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))
	MPYA	d_xs			;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))
	STH	B,d_sinx			;sin(theta)
	RET
*************************************************
*用泰勒级数开展开式计算角度的余弦值 	     	*
*cos(x)=1-x*x/2(1-x*x/3*4(1-x*x/5*6(x*x/7*8)))	*
*************************************************
cosx:
	.def	d_xc,d_cosx
d_coef_c	.usect	"coef_c",4
	.data
table_c:
	.word	0249H		;c1=1/(7*8)
	.word	0444H		;c2=1/(5*6)
	.word	0AABH		;c3=1/(3*4)
	.word	4000H		;c4=1/(1*2)
d_xc		.usect	"cos_vars",1
d_squr_xc 	.usect	"cos_vars",1
d_temp_c	.usect	"cos_vars",1
d_cosx		.usect	"cos_vars",1
c_l_c		.usect	"cos_vars",1
	.text
	SSBX	FRCT
	STM	#d_coef_c,AR5
	RPT	#3
	MVPD	#table_c,*AR5+
	STM	#d_coef_c,AR3
	STM	#d_xc,AR2
	STM	#c_l_c,AR4
	ST	#7FFFH,c_l_c
	SQUR	*AR2+,A			;A=x^2
	ST	A,*AR2				;(AR2)=x^2
	||LD	*AR4,B			;B=1
	MASR	*AR2+,*AR3+,B,A	;A=1-x^2/56,T=x^2
	MPYA	A				;A=T*A=x^2(1-x^2/56)
	STH	A,*AR2				;(d_temp)=x^2(1-x^2/56)
	MASR	*AR2-,*AR3+,B,A	;A=1-x^2/30(1-x^2/56),T=x^2(1-x^2/56)
	MPYA	*AR2+			;B=x^2(1-x^2/30(1-x^2/56))
	ST	B,*AR2				;(d_temp)=x^2(1-x^2/30(1-x^2/56))
	||LD	*AR4,B			;B=1
	MASR	*AR2-,*AR3+,B,A	;A=1-x^2(1-x^2/30(1-x^2/56))
	SFTA	A,-1,A			;A右移一位即A除以2
	NEG	A
	MPYA	*AR2+			;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
	MAR	*AR2+
	RETD
	ADD	*AR4,16,B			;B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
	STH	B,*AR2				;cos(theta)
	RET
	.end

⌨️ 快捷键说明

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