Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56195
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-23 10:35
文章存档

2016年(1)

2012年(7)

2011年(10)

分类: C/C++

2011-09-22 15:33:17

  1. //***************************************************//
  2. //函数1: ad9850_reset() //
  3. //函数2: ad9850_reset_serial() //
  4. //函数3: ad9850_wr_parrel(unsigned char w0,double frequence)//
  5. //函数4: ad9850_wr_serial(unsigned char w0,double frequence)//
  6. //版本: V1.1 //
  7. //日期: 2008/12/19 //
  8. //修改日期: 2008/12/19 //
  9. //编写者: my_dds(my_dds@163.com) //
  10. //***************************************************//
  11. // 子程序说明 //
  12. //***************************************************//
  13. //函数1: ad9850_reset()
  14. // 复位ad9850,之后为并口写入模式
  15. //函数2: ad9850_reset_serial()
  16. // 复位ad9850,之后为串口写入模式
  17. //函数3: ad9850_wr_parrel(unsigned char w0,double frequence)
  18. // 并口写ad9850数据,w0为ad9850中w0的数据,frequence
  19. // 为写入的频率    
  20. //函数4: ad9850_wr_serial(unsigned char w0,double frequence)
  21. // 串口写ad9850数据,w0为ad9850中w0的数据,frequence
  22. // 为写入的频率    
  23. //需定义的位:
  24.          //ad9850_w_clk ;
  25.          //ad9850_fq_up ;
  26.          //ad9850_rest ;
  27.          //ad9850_bit_data ;
  28. //例:
  29.          //sbit ad9850_w_clk =P3^4;
  30.          //sbit ad9850_fq_up =P3^5;
  31.          //sbit ad9850_rerst =P3^7;
  32.          //sbit ad9850_bit_data =P1^7;
  33. //***************************************************//
  34. // 写数据说明 //
  35. //***************************************************//
  36. //写数据例:
  37. // ad9850_reset()
  38. // wr_lcd02_data(unsigned char x)
  39. // ad9850_wr_parrel(0x01,1000)
  40. // ad9850_wr_serial(0x01,1000)
  41. //***************************************************//
  42. //---------------------------------------------------//
  43. // 程序 //
  44. //---------------------------------------------------//
  45. # include <reg52.h>
  46. # include <stdio.h>
  47. # include <intrins.h>
  48. sbit ad9850_w_clk =P3^4; //P3.4口接ad9850的w_clk脚/PIN7
  49. sbit ad9850_fq_up =P3^5; //P3.5口接ad9850的fq_up脚/PIN8
  50. sbit ad9850_rerst =P3^7; //P2.0口接ad9850的rerst脚/PIN22
  51. sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25
  52. //P1为8位数据口
  53. //***************************************************//
  54. // ad9850复位(并口模式) //
  55. //---------------------------------------------------//
  56. void ad9850_reset()
  57. {
  58. ad9850_w_clk=0;
  59. ad9850_fq_up=0;
  60. //rest信号
  61. ad9850_rerst=0;
  62. ad9850_rerst=1;
  63. ad9850_rerst=0;
  64. }
  65. //***************************************************//
  66. // ad9850复位(并口模式) //
  67. //---------------------------------------------------//
  68. void ad9850_reset_serial()
  69. {
  70. ad9850_w_clk=0;
  71. ad9850_fq_up=0;
  72. //rest信号
  73. ad9850_rerst=0;
  74. ad9850_rerst=1;
  75. ad9850_rerst=0;
  76. //w_clk信号
  77. ad9850_w_clk=0;
  78. ad9850_w_clk=1;
  79. ad9850_w_clk=0;
  80. //fq_up信号
  81. ad9850_fq_up=0;
  82. ad9850_fq_up=1;
  83. ad9850_fq_up=0;
  84. }
  85. //***************************************************//
  86. // 向ad9850中写命令与数据(并口) //
  87. //---------------------------------------------------//
  88. void ad9850_wr_parrel(unsigned char w0,double frequence)
  89. {
  90. unsigned char w;
  91. long int y;
  92. double x;
  93. //计算频率的HEX值
  94. x=4294967295/125;//适合125M晶振
  95. //如果时钟频率不为125MHZ,修改该处的频率值,单位MHz !!!
  96. frequence=frequence/1000000;
  97. frequence=frequence*x;
  98. y=frequence;
  99. //写w0数据
  100. w=w0;
  101. P1=w; //w0
  102. ad9850_w_clk=1;
  103. ad9850_w_clk=0;
  104. //写w1数据
  105. w=(y>>24);
  106. P1=w; //w1
  107. ad9850_w_clk=1;
  108. ad9850_w_clk=0;
  109. //写w2数据
  110. w=(y>>16);
  111. P1=w; //w2
  112. ad9850_w_clk=1;
  113. ad9850_w_clk=0;
  114. //写w3数据
  115. w=(y>>8);
  116. P1=w; //w3
  117. ad9850_w_clk=1;
  118. ad9850_w_clk=0;
  119. //写w4数据
  120. w=(y>>=0);
  121. P1=w; //w4
  122. ad9850_w_clk=1;
  123. ad9850_w_clk=0;
  124. //移入始能
  125. ad9850_fq_up=1;
  126. ad9850_fq_up=0;
  127. }
  128. //***************************************************//
  129. // 向ad9850中写命令与数据(串口) //
  130. //---------------------------------------------------//
  131. void ad9850_wr_serial(unsigned char w0,double frequence)
  132. {
  133. unsigned char i,w;
  134. long int y;
  135. double x;
  136. //计算频率的HEX值
  137. x=4294967295/125;//适合125M晶振
  138. //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!
  139. frequence=frequence/1000000;
  140. frequence=frequence*x;
  141. y=frequence;
  142. //写w4数据
  143. w=(y>>=0);
  144. for(i=0;i<8;i )
  145. {
  146. ad9850_bit_data=(w>>i)&0x01;
  147. ad9850_w_clk=1;
  148. ad9850_w_clk=0;
  149. }
  150. //写w3数据
  151. w=(y>>8);
  152. for(i=0;i<8;i )
  153. {
  154. ad9850_bit_data=(w>>i)&0x01;
  155. ad9850_w_clk=1;
  156. ad9850_w_clk=0;
  157. }
  158. //写w2数据
  159. w=(y>>16);
  160. for(i=0;i<8;i )
  161. {
  162. ad9850_bit_data=(w>>i)&0x01;
  163. ad9850_w_clk=1;
  164. ad9850_w_clk=0;
  165. }
  166. //写w1数据
  167. w=(y>>24);
  168. for(i=0;i<8;i )
  169. {
  170. ad9850_bit_data=(w>>i)&0x01;
  171. ad9850_w_clk=1;
  172. ad9850_w_clk=0;
  173. }
  174. //写w0数据
  175. w=w0;
  176. for(i=0;i<8;i )
  177. {
  178. ad9850_bit_data=(w>>i)&0x01;
  179. ad9850_w_clk=1;
  180. ad9850_w_clk=0;
  181. }
  182. //移入始能
  183. ad9850_fq_up=1;
  184. ad9850_fq_up=0;
  185. }
  186. //***************************************************//
  187. // 测试程序1000Hz //
  188. //---------------------------------------------------//
  189. main()
  190. {
  191. //P0=0x00;
  192. P1=0x00;
  193. //P2=0x00;
  194. P3=0x00;
  195. //--------------------------------------- 注:暂存的内容只能恢复到当前文章的编辑器中,如需恢复到其他文章中,请编辑该文章并从暂存箱中恢复;或者直接复制以上内容,手工恢复到相关文章。
  196. 恢复到编辑器  关闭
阅读(1933) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~