登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看3306|回1|收藏
楼主 ID:248641 只看他
2017-11-12 16:49
包括AD9850串行和并行代码所有资料51hei提供下载::
AD9850-串行.rar (46.25 KB)
(下载次数: 29, 2017-11-12 16:47 上传)

下载积分: 黑币 -5


ad9850-并行.rar (39.72 KB)
(下载次数: 23, 2017-11-12 16:47 上传)

下载积分: 黑币 -5



单片机源程序(串行)如下:

代码:

  1. # include <reg51.h>
  2. # include <stdio.h>
  3. # include <intrins.h>
  4. sbit ad9850_w_clk    =P0^2;  //P2.2口接ad9850的w_clk脚/PIN7
  5. sbit ad9850_fq_up    =P0^1;  //P2.1口接ad9850的fq_up脚/PIN8
  6. sbit ad9850_rest     =P0^0;  //P2.0口接ad9850的rest脚/PIN12
  7. sbit ad9850_bit_data =P0^3;  //P1.3口接ad9850的D7脚/PIN25
  8. sbit ad9850_w_clks    =P0^6;  //P2.6口接ad9850的w_clk脚/PIN7
  9. sbit ad9850_fq_ups    =P0^5;  //P2.5口接ad9850的fq_up脚/PIN8
  10. sbit ad9850_rests     =P0^4;  //P2.4口接ad9850的rest脚/PIN12
  11. sbit ad9850_bit_datas =P0^7;  //P1.7口接ad9850的D7脚/PIN25
  12. //***************************************************//
  13. //              ad9850复位(串口模式)                 //
  14. //---------------------------------------------------//
  15. void ad9850_reset_serial()
  16. {
  17. ad9850_w_clk=0;
  18. ad9850_fq_up=0;
  19. //rest信号
  20. ad9850_rest=0;
  21. ad9850_rest=1;
  22. ad9850_rest=0;
  23. //w_clk信号
  24. ad9850_w_clk=0;
  25. ad9850_w_clk=1;
  26. ad9850_w_clk=0;
  27. //fq_up信号
  28. ad9850_fq_up=0;
  29. ad9850_fq_up=1;
  30. ad9850_fq_up=0;
  31. }
  32. void ad9850_reset_serials()
  33. {
  34. ad9850_w_clks=0;
  35. ad9850_fq_ups=0;
  36. //rest信号
  37. ad9850_rests=0;
  38. ad9850_rests=1;
  39. ad9850_rests=0;
  40. //w_clk信号
  41. ad9850_w_clks=0;
  42. ad9850_w_clks=1;
  43. ad9850_w_clks=0;
  44. //fq_up信号
  45. ad9850_fq_ups=0;
  46. ad9850_fq_ups=1;
  47. ad9850_fq_ups=0;
  48. }
  49. //***************************************************//
  50. //          向ad9850中写命令与数据(串口)             //
  51. //---------------------------------------------------//
  52. void ad9850_wr_serial(unsigned char w0,double frequence)
  53. {
  54. unsigned char i,w;
  55. long int y;
  56. double x;
  57. //计算频率的HEX值
  58. x=4294967295/125;//适合125M晶振
  59. //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz  !!!
  60. frequence=frequence/1000000;
  61. frequence=frequence*x;
  62. y=frequence;
  63. //写w4数据
  64. w=(y>>=0);
  65. for(i=0;i<8;i++)
  66. {
  67. ad9850_bit_data=(w>>i)&0x01;
  68. ad9850_w_clk=1;
  69. ad9850_w_clk=0;
  70. }
  71. //写w3数据
  72. w=(y>>8);
  73. for(i=0;i<8;i++)
  74. {
  75. ad9850_bit_data=(w>>i)&0x01;
  76. ad9850_w_clk=1;
  77. ad9850_w_clk=0;
  78. }
  79. //写w2数据
  80. w=(y>>16);
  81. for(i=0;i<8;i++)
  82. {
  83. ad9850_bit_data=(w>>i)&0x01;
  84. ad9850_w_clk=1;
  85. ad9850_w_clk=0;
  86. }
  87. //写w1数据
  88. w=(y>>24);
  89. for(i=0;i<8;i++)
  90. {
  91. ad9850_bit_data=(w>>i)&0x01;
  92. ad9850_w_clk=1;
  93. ad9850_w_clk=0;
  94. }
  95. //写w0数据
  96. w=w0;   
  97. for(i=0;i<8;i++)
  98. {
  99. ad9850_bit_data=(w>>i)&0x01;
  100. ad9850_w_clk=1;
  101. ad9850_w_clk=0;
  102. }
  103. //移入始能
  104. ad9850_fq_up=1;
  105. ad9850_fq_up=0;
  106. }
  107. void ad9850_wr_serials(unsigned char w0,double frequence)
  108. {
  109. unsigned char i,w;
  110. long int y;
  111. double x;
  112. //计算频率的HEX值
  113. x=4294967295/125;//适合125M晶振
  114. //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz  !!!
  115. frequence=frequence/1000000;
  116. frequence=frequence*x;
  117. y=frequence;
  118. //写w4数据
  119. w=(y>>=0);
  120. for(i=0;i<8;i++)
  121. {
  122. ad9850_bit_datas=(w>>i)&0x01;
  123. ad9850_w_clks=1;
  124. ad9850_w_clks=0;
  125. }
  126. //写w3数据
  127. w=(y>>8);
  128. for(i=0;i<8;i++)
  129. {
  130. ad9850_bit_datas=(w>>i)&0x01;
  131. ad9850_w_clks=1;
  132. ad9850_w_clks=0;
  133. }
  134. //写w2数据
  135. w=(y>>16);
  136. for(i=0;i<8;i++)
  137. {
  138. ad9850_bit_datas=(w>>i)&0x01;
  139. ad9850_w_clks=1;
  140. ad9850_w_clks=0;
  141. }
  142. //写w1数据
  143. w=(y>>24);
  144. for(i=0;i<8;i++)
  145. {
  146. ad9850_bit_datas=(w>>i)&0x01;
  147. ad9850_w_clks=1;
  148. ad9850_w_clks=0;
  149. }
  150. //写w0数据
  151. w=w0;   
  152. for(i=0;i<8;i++)
  153. {
  154. ad9850_bit_datas=(w>>i)&0x01;
  155. ad9850_w_clks=1;
  156. ad9850_w_clks=0;
  157. }
  158. //移入始能
  159. ad9850_fq_ups=1;
  160. ad9850_fq_ups=0;
  161. }
  162. void delay(int max)
  163. {
  164.         int i,j,k;
  165.         for(i=0;i<max;i++)
  166.         for(j=0;j<6144;j++)
  167.         k++;
  168. }
  169. //***************************************************//
  170. //                   测试程序1000Hz                  //
  171. //---------------------------------------------------//
  172. main()
  173. {
  174. ……………………

  175. …………限于本文篇幅 余下代码请从51黑下载附件…………





沙发 ID:198286 只看他
2017-11-25 19:57
看来关心的不多啊,玩信号的少

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版