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

📄 sin.asm

📁 CCS调试实验文件夹下共有9个文件夹
💻 ASM
字号:
;sin.asm
;sin(theta)=x(1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9))))
;cos(theta)=1-x^2/2(1-x^2/3*4(1-x^2/5*6(1-x^/7*8)))
;sin(2*theta)=2*sin(theta)*cos(theta)
		.title  "sin.asm"
		.mmregs
		.global reset,start
		.def  	start,_c_int00 
		.ref	sinx,d_xs,d_sinx,cosx,d_xc,d_cosx

sin_x:	.usect	"sin_x",360    ;
STACK:	.usect	"STACK",10
k_theta	.set	286	        ;pi/360*32767=286
PA13	.set	13 
TMP		.set	60h
DLEVEL	.set	61h
LEVEL	.set 	8000h   
        .text
_c_int00
		b start 
		nop
		nop
NMI		rete
		nop
		nop
		nop
SINT17	.space 4*16
SINT18  .space 4*16
SINT19  .space 4*16
SINT20  .space 4*16
SINT21  .space 4*16
SINT22  .space 4*16
SINT23  .space 4*16
SINT24  .space 4*16
SINT25  .space 4*16
SINT26  .space 4*16
SINT27  .space 4*16
SINT28  .space 4*16
SINT29  .space 4*16
SINT30  .space 4*16

INT0:   rsbx intm
	    rete
	    nop
	    nop
INT1    rsbx intm
        rete
        nop
        nop
INT2    rsbx intm
        rete
        nop
        nop
TINT:   rete
		nop
		nop
		nop
RINT0:	rete
		nop
		nop
		nop
XINT0:	rete
		nop
		nop
		nop	
RINT1:	rete
		nop
		nop
		nop	
XINT1:	rete
		nop
		nop
		nop		
INT3:	rete
		nop
		nop
		nop			 
		 
start:		
		STM		#STACK+10,SP
		LD      #LEVEL,A         ;[DLEVEL] = >800
		STL     A,DLEVEL
		LD		#0,A
        STM 	#sin_x,AR1	
        RPTZ 	A,#1024
        STL		A,*AR1+	
		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+90-1,AR7
		STM		#90-2,BRC
		RPTB	loop2-1
		LD		*AR7-,A
		STL		A,*AR6+
loop2:	STM		#360/2-1,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:	LD      *AR6+0%,A
        ADD     DLEVEL,A
		STH     A,12,TMP
		PORTW	TMP,PA13
		B		loop4
sinx:
		.def	d_xs,d_sinx
		.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
c_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		#c_l_s,AR4
		ST		#7FFFh,c_l_s
		SQUR	*AR2+,A
		ST		A,*AR2
		||LD	*AR4,B
		MASR	*AR2+,*AR3+,B,A
		MPYA	A
		STH		A,*AR2
		MASR	*AR2-,*AR3+,B,A
		MPYA	*AR2+
		ST		B,*AR2
		||LD	*AR4,B
		MASR	*AR2-,*AR3+,B,A
		MPYA	*AR2+
		ST		B,*AR2
		||LD	*AR4,B
		MASR	*AR2-,*AR3+,B,A
		MPYA	d_xs
		STH		B,d_sinx
		RET
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/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
		ST		A,*AR2
		||LD	*AR4,B
		MASR	*AR2+,*AR3+,B,A
		MPYA	A
		STH		A,*AR2
		MASR	*AR2-,*AR3+,B,A
		MPYA	*AR2+
		ST		B,*AR2
		||LD	*AR4,B
		MASR	*AR2-,*AR3+,B,A
		SFTA	A,-1,A
		NEG		A
		MPYA	*AR2+
		MAR		*AR2+
		RETD	
		ADD		*AR4,16,B
		STH		B,*AR2
		RET	
		.end		

⌨️ 快捷键说明

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