找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AD9850串行与并行编程实例

[复制链接]
跳转到指定楼层
楼主
ID:248641 发表于 2017-11-12 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
包括AD9850串行和并行代码所有资料51hei提供下载::
AD9850-串行.rar (46.25 KB, 下载次数: 29)
ad9850-并行.rar (39.72 KB, 下载次数: 23)

单片机源程序(串行)如下:
  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黑下载附件…………
复制代码





评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:198286 发表于 2017-11-25 19:57 | 只看该作者
看来关心的不多啊,玩信号的少
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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