📄 sin_gan.asm
字号:
;THIS FUNCTION GENERATES THE SINE WAVE OF ANGLE USING THE TAYLOR SERIES EXPANSION
;sin(2@)=2*sin@*cos@
.mmregs
.global _main
_main:
.def start
.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 ;theta increment pi/360
PA0 .set 0
start:
.text
RSBX CPL
STM #STACK+10 , SP
STM #k_theta , AR0
STM #0 , AR1
STM #sin_x , AR6 ;AR6->sin(2@)
STM #90 , BRC ;sin(0)->sin(90)
RPTB loop1-1
LDM AR1 , A ;base degree
LD #d_xs , DP ;init DP
STL A , @d_xs ;input data for sin(@)
STL A , @d_xc ;input data for cos(@)
CALL sinx ;compute sin(@)
CALL cosx ;compute cos(@)
LD #d_sinx , DP ;modify DP-> #d_sinx page number
LD @d_sinx , 16 , A ;A(31..15)<=sin(@)
MPYA @d_cosx ;B<=A(31..15)*(smem)
STH B , 1 , *AR6+ ;sin2@=2*sin@*cos@
MAR *AR1+0 ;*AR1<=*AR1+0.5degree
loop1:
STM #sin_x+89 , AR7 ;AR7->sin90
STM #88 , BRC ;compute sin91->sin179
RPTB loop2-1
LD *AR7- , A
STL A ,*AR6+
loop2: STM #179 , BRC ;compute sin180->sin359
STM #sin_x , AR7
RPTB loop3-1
LD *AR7+ , A
NEG A
STL A ,*AR6+
loop3:
STM #sin_x , AR6 ;generate sine wave
STM #1 , AR0
STM #360 , BK
loop4: PORTW * AR6+0% , PA0
B loop4
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -