找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6282|回复: 4
打印 上一主题 下一主题
收起左侧

MSP430控制的DDS输出波形为正弦波和方波c语言程序

[复制链接]
跳转到指定楼层
楼主
ID:51337 发表于 2013-7-14 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //***************************************************//
  2. //                  子程序说明                       //
  3. //***************************************************//
  4. //函数1:  ad9850_reset()
  5. //        复位ad9850,之后为并口写入模式        
  6. //函数2:  ad9850_reset_serial()
  7. //        复位ad9850,之后为串口写入模式
  8. //函数3:  ad9850_wr_parrel(unsigned char w0,double frequence)
  9. //        并口写ad9850数据,w0为ad9850中w0的数据,frequence
  10. //        为写入的频率   
  11. //函数4:  ad9850_wr_serial(unsigned char w0,double frequence)
  12. //        串口写ad9850数据,w0为ad9850中w0的数据,frequence
  13. //        为写入的频率   
  14. //需定义的位:
  15.          //ad9850_w_clk    ;
  16.          //ad9850_fq_up    ;
  17.          //ad9850_rest     ;
  18.          //ad9850_bit_data ;
  19. //例:
  20.          //sbit ad9850_w_clk    =P2^2;
  21.          //sbit ad9850_fq_up    =P2^1;
  22.          //sbit ad9850_rest     =P2^0;
  23.          //sbit ad9850_bit_data =P1^7;
  24. //***************************************************//
  25. //                 写数据说明                        //
  26. //***************************************************//
  27. //写数据例:
  28. //       ad9850_reset()
  29. //       wr_lcd02_data(unsigned char x)
  30. //       ad9850_wr_parrel(0x01,1000)
  31. //       ad9850_wr_serial(0x01,1000)
  32. //***************************************************//
  33. //---------------------------------------------------//
  34. //                   程序                            //
  35. //---------------------------------------------------//
  36. # include <msp430f149.h>
  37. # include <stdio.h>

  38. #define ad9850_w_clk_High   P2OUT|=0x04
  39. #define ad9850_w_clk_Low    P2OUT&=~0x04
  40. #define ad9850_fq_up_High   P2OUT|=0x02
  41. #define ad9850_fq_up_Low    P2OUT&=~0x02
  42. #define ad9850_rest_High    P2OUT|=0x01
  43. #define ad9850_rest_Low     P2OUT&=~0x01
  44. #define ad9850_bit_data     P1OUT

  45. //***************************************************//
  46. //              ad9850复位(并口模式)                 //
  47. //---------------------------------------------------//
  48. void ad9850_reset()
  49. {
  50.   ad9850_w_clk_Low;
  51.   ad9850_fq_up_Low;
  52.   ad9850_rest_Low;
  53.   ad9850_rest_High;
  54.   ad9850_rest_Low;
  55. }
  56. //***************************************************//
  57. //              ad9850复位(并口模式)                 //
  58. //---------------------------------------------------//
  59. void ad9850_reset_serial()
  60. {
  61. ad9850_w_clk_Low;
  62. ad9850_fq_up_Low;
  63. //rest信号
  64.   ad9850_rest_Low;
  65.   ad9850_rest_High;
  66.   ad9850_rest_Low;
  67. //w_clk信号
  68. ad9850_w_clk_Low;
  69. ad9850_w_clk_High;
  70. ad9850_w_clk_Low;
  71. //fq_up信号
  72. ad9850_fq_up_Low;
  73. ad9850_fq_up_High;
  74. ad9850_fq_up_Low;
  75. }
  76. //***************************************************//
  77. //          向ad9850中写命令与数据(并口)             //
  78. //---------------------------------------------------//
  79. void ad9850_wr_parrel(unsigned char w0,double frequence)
  80. {
  81. unsigned char w;
  82. long int y;
  83. double x;
  84. //计算频率的HEX值
  85. x=4294967295/125;//适合125M晶振
  86. //如果时钟频率不为125MHZ,修改该处的频率值,单位MHz !!!
  87. frequence=frequence/1000000;
  88. frequence=frequence*x;
  89. y=(double)frequence;
  90. //写w0数据
  91. w=w0;   
  92. ad9850_bit_data=w;      //w0
  93. ad9850_w_clk_High;
  94. ad9850_w_clk_Low;
  95. //写w1数据
  96. w=(y>>24);
  97. ad9850_bit_data=w;      //w1
  98. ad9850_w_clk_High;
  99. ad9850_w_clk_Low;
  100. //写w2数据
  101. w=(y>>16);
  102. ad9850_bit_data=w;      //w2
  103. ad9850_w_clk_High;
  104. ad9850_w_clk_Low;
  105. //写w3数据
  106. w=(y>>8);
  107. ad9850_bit_data=w;      //w3
  108. ad9850_w_clk_High;
  109. ad9850_w_clk_Low;
  110. //写w4数据
  111. w=(y>>=0);
  112. ad9850_bit_data=w;      //w4
  113. ad9850_w_clk_High;
  114. ad9850_w_clk_Low;
  115. //移入始能
  116. ad9850_fq_up_High;
  117. ad9850_fq_up_Low;
  118. }

  119. //***************************************************//
  120. //                   测试程序1000Hz                  //
  121. //---------------------------------------------------//
  122. main()
  123. {
  124.    WDTCTL=WDTPW+WDTHOLD;
  125.    P1DIR=0XFF;
  126.    P2DIR=0XFF;
  127. //---------------------------------------------------//
  128. //并行写1000Hz程序
  129. ad9850_reset();
  130. ad9850_wr_parrel(0x00,1);
  131. //---------------------------------------------------//
  132. while(1)
  133. {
  134. }
  135. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:51540 发表于 2013-8-22 08:40 | 只看该作者
看了很不错!可实用!
回复

使用道具 举报

板凳
ID:157106 发表于 2016-12-23 12:36 | 只看该作者
这要用到那几个模块
回复

使用道具 举报

地板
ID:194371 发表于 2017-4-27 21:22 | 只看该作者
非常不错!谢谢楼主!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表