4995|0

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

我的正弦信号发生器怎么变频率啊!急求。。。在线等 [复制链接]

想要变换频率,但是不会写变频函数  求求大虾帮我写下撒 汇编不会啊


      .mmregs
            .def      _c_int00
            .def       d_xs,d_sinx,d_xc,d_cosx,sinx,cosx
sin_x:      .usect     "sin_x",360
STACK:      .usect     "STACk",10H
k_theta     .set      286               ;theta=pi/360(索引值)
_c_int00:
            .text
            STM        #STACK+10H,sp    ;设置堆栈
            STM        k_theta,AR0      ;设置增量
            STM        #0,AR1           ;AR1=x=0
            STM        #sin_x,AR6       ;AR6指向sin_x
            STM        #90,BRC          ;产生sin0(deg.)至sin90(deg.)
            RPTB       loop1-1         
            LDM        AR1,A            ;取x
            LD         #d_xs,DP         ;设置页指针
            STL        A,@d_xs          ;x-->d_xs
            STL        A,@d_xc          ;x-->d_xc
            CALL       sinx             ;计算某一角度的正弦值
            CALL       cosx             ;计算某一角度的余弦值
            LD         #d_sinx,DP  ;切换到正弦指数数据区
            LD         @d_sinx,16,A     ;AH=sinx
            MPYA       @d_cosx          ;B=sinx*cosx
            STH        B,1,*AR6+        ;*AR6=2sinx*cosx
            MAR        *AR1+0           ;AR1=AR1+AR0
loop1:      STM        #sin_x+89,AR7    ;产生sin91(deg.)至sin179(deg.)
            STM        #88,BRC          ;重复的次数                     
            RPTB       loop2-1
            LD         *AR7-,A
            STL        A,*AR6+
loop2:      STM        #179,BRC       ;产生sin180(deg.)至sin360(deg.)                 
            STM        #sin_x,AR7     ;AR7指向sin_x
            RPTB       loop3-1
            LD         *AR7+,A
            NEG        A              ;取反
            STL        A,*AR6+
loop3:      STM        #sin_x,AR6     ;AR6指向sin_x
            STM        #1,AR1         ;AR1=1
            STM        #360,BK        ;设置缓冲区长度
            B          loop3          ;循环输出,产生正弦波
sinx:      
            .def        d_xs,d_sinx
            .data
table_s     .word      01C7H
            .word      030BH
            .word      0666H
            .word      1556H
d_coef_s    .usect     "coef_s",4      ;为存放c1,c2,c3,c4的地址保留4个存储空间
d_xs        .usect     "sin_vars",1    ;为存放x保留一个存储空间
d_squr_xs   .usect     "sin_vars",1    ;为存放x^2保留一个存储空间
d_temp_s    .usect     "sin_vars",1    ;保留一个暂存空间
d_sinx      .usect     "sin_vars",1    ;为存放结果保留一个存储空间
d_1_s       .usect     "sin_vars",1    ;为存放"1"保留一个存储空间
            .text
            SSBX       FRCT            ;设置小数运算
            STM        #d_coef_s,AR5   ;系数表
            RPT        #3              ;重复4次
            MVPD       #table_s,*AR5+  ;向系数表传送泰勒系数
            STM        #d_coef_s,AR3     ;c1=1/72,c2=1/42,c3=1/20,c4=1/6
            STM        #d_xs,AR2         ;x单元地址-->AR2
            STM        #d_1_s,AR4        ;"1"地址-->AR4
            ST         #7FFFH,d_1_s      ;数1-->d_1_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^2x)/72,T=x^2
            MPYA       A                 ;A=x^2(1-x^2)/72
            STH        A,*AR2            ;(d_temp)=x^2(x^2x/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          ;计算sinx的值存入d_sinx
            RET
cosx:      
            .def       d_xc,d_cosx
            .data
table_c     .word      0249H
            .word      0444H
            .word      0AABH
            .word      4000H
d_coef_c    .usect     "coef_c",4       ;为存放c1,c2,c3,c4的地址保留4个存储空间
d_xc        .usect     "cos_vars",1     ;为x保留一个存储空间
d_squr_xc   .usect     "cos_vars",1     ;为x^2保留一个存储空间
d_temp_c    .usect     "cos_vars",1     ;保留一个暂存空间
d_cosx      .usect     "cos_vars",1     ;为存放结果保留一个存储空间
c_1_c       .usect     "cos_vars",1     ;为存放"1"保留一个存储空间
            .text
             SSBX      FRCT             ;设置小数运算
             STM       #d_coef_c,AR5    ;系数表
             RPT       #3               ;重复4次
             MVPD      #table_c,*AR5+   ;向系数表传送泰勒系数
             STM       #d_coef_c,AR3      ;c1=1/56,c1=1/30,c3=1/12
             STM       #d_xc,AR2          ;x单元地址-->AR2
             STM       #c_1_c,AR4         ;"1"地址-->AR4
             ST        #7FFFH,c_1_c       ;数1-->c_1_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^1/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             ;-1/2
             NEG       A                  ;取反
             MPYA      *AR2+              ;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
             MAR       *AR2+              ;修改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             ;计算cosx的值存入d_cosx
             RET
             .end
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表