📄 deqpsk.asm
字号:
********************************************
* *
* QPSK解调程序 *
* fc=1800Hz,RB=2400B(分a,b两路) *
* *
********************************************
.mmregs
.def m1,e1,m2,e2,mp,ep,temp,out
.copy "sin_cos.inc"
.def start
.bss m1,1 ;定义浮点乘法中间变量空间
.bss e1,1
.bss m2,1
.bss e2,1
.bss mp,1
.bss ep,1
.bss temp,1
.bss out,1 ;定义判决输出的空间
input .usect "data",32 ;QPSK数据输入空间
sinWt .usect "data",32 ;相干载波
cosWt .usect "data",32 ;
outa .usect "data",32 ;相乘后的a路数据
outb .usect "data",32 ;相乘后的b路数据
STACK .usect "STACK",100
start: .asg AR5,x1
.asg AR6,x2
.asg AR7,product
STM #STACK+100,SP ;设置堆栈指针
LD #m1,DP
*********************************************************
STM #sinWt,AR1
RPT #31
MVPD #sin,*AR1+
STM #cosWt,AR1
RPT #31
MVPD #cos,*AR1+
*********************************************************
loop: nop
STM #input,AR5
STM #cosWt,AR6
STM #outa,AR7
STM #31,BRC ;块循环重复执行32篇
RPTB next1-1 ;实现相乘器的功能
CALL MULT
MAR *AR5+
MAR *AR6+
MAR *AR7+
*********************************************************
next1: STM #outa,AR7 ;累加求和并判决输出
STM #31,BRC
LD #0,B
RPTB J1-1
LD *AR7+,A
XC 2,AGT
NOP
ADD #1,B
J1: STL B,-4,@out
*********************************************************
STM #input,AR5
STM #sinWt,AR6
STM #outb,AR7
STM #31,BRC ;块循环重复执行32篇
RPTB next2-1 ;实现相乘器的功能
CALL MULT
MAR *AR5+
MAR *AR6+
MAR *AR7+
*********************************************************
next2: STM #outb,AR7 ;累加求和并判决输出
STM #31,BRC
LD #0,B
RPTB J2-1
LD *AR7+,A
XC 2,AGT
NOP
ADD #1,B
J2: STL B,-4,@out
*********************************************************
nop
B loop
*********************************************************
MULT: LD *x1,16,A ;将x1规格化为浮点数
EXP A
ST T,@e1 ;保存x1的指数
NORM A
STH A,@m1 ;保存x1的尾数
LD *x2,16,A ;将x2规格化为浮点数
EXP A
ST T,@e2 ;保存x2的指数
NORM A
STH A,@m2 ;保存x2的尾数
*********************************************************
SSBX FRCT
SSBX SXM
LD @e1,A ;指数相加
ADD @e2,A
STL A,@ep ;乘积指数->ep
LD @m1,T ;尾数相乘
MPY @m2,A ;乘积尾数在累加器A中
EXP A ;对尾数乘积规格化
ST T,@temp ;规格化时产生的指数->temp
NORM A
STH A,@mp ;保存乘积尾数在mp中
LD @temp,A ;修正乘积指数
ADD @ep,A ;(ep)+(temp)->ep
STL A,@ep ;保存乘积指数在ep中
NEG A ;将浮点乘积转换成定点数
STL A,@temp ;乘积指数反号,并且加载到T寄存器
LD @temp,T ;再将尾数按T移位
LD @mp,16,A
NORM A
STH A,*product ;保存定点乘积
RET
.end
*********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -