📄 ad9851.lst
字号:
C51 COMPILER V8.02 AD9851 04/04/2008 19:55:14 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE AD9851
OBJECT MODULE PLACED IN ad9851.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ad9851.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*===============================================================*/
2 /*函数名称: ad9851.c */
3 /*函数功能: 发送1hz--100khz的正弦波 */
4 /*参数说明: ctr_word[0]---------------------------------相位控制字
5 ctr_word[1,2,3,4]------------------------频率控制字
6 D7------------------------------------------------P6.7
7 D6------------------------------------------------P6.6
8 D5------------------------------------------------P6.5
9 D4------------------------------------------------P6.4
10 D3------------------------------------------------P6.3
11 D2------------------------------------------------P6.2
12 D1------------------------------------------------P6.1
13 D0------------------------------------------------P6.0
14 W_CLK---------------------------------------------P3.5
15 ------------------------------------字装入控制信号
16 FQ_UD---------------------------------------------P3.6
17 ----------------------------------频率更新控制信号
18 RESET---------------------------------------------P3.7
19 ------------------------------软件复位,高电平有效
20 */
21 /*有无返回: 有 */
22 /*修改记录: 无修改记录 */
23 /*编写作者: t483-4-19chenY_Absong */
24 /*编写日期: 2007-4-06 */
25 /*===============================================================*/
26 #include "common.h"
27 #include "ad9851.h"
28 #include "delay.h"
29 #include "TS12864A.h"
30 #include "show.h"
31
32
33 extern unsigned long FrequencyLong_HZ;
34 void ad9851(void)
35 {
36 1 unsigned char key_code;
37 1 // show_frequncy();
38 1 key_code=P7&0xff;
39 1 switch(key_code)
40 1 {
41 2 case 0xfe:
42 2 if(FrequencyLong_HZ>=10)
43 2 {
44 3 FrequencyLong_HZ=FrequencyLong_HZ-10;
45 3 sin_send(FrequencyLong_HZ);
46 3 // Show_FloatData(FrequencyLong_HZ,5,3);
47 3 delay_nms(10);
48 3 }
49 2 break; //步进为10自减
50 2 case 0xfd:
51 2 if(FrequencyLong_HZ<=10000)
52 2 {
53 3 FrequencyLong_HZ=FrequencyLong_HZ+10;
54 3 sin_send(FrequencyLong_HZ);
55 3 // Show_FloatData(FrequencyLong_HZ,5,3);
C51 COMPILER V8.02 AD9851 04/04/2008 19:55:14 PAGE 2
56 3 delay_nms(10);
57 3 }
58 2 break; //步进为10自加
59 2 case 0xfb:
60 2 FrequencyLong_HZ=0; //10--100000自动加扫频
61 2 while(FrequencyLong_HZ<=10000)
62 2 {
63 3 FrequencyLong_HZ=FrequencyLong_HZ+10;
64 3 sin_send(FrequencyLong_HZ);
65 3 // Show_FloatData(FrequencyLong_HZ,5,3);
66 3 delay_nms(500);
67 3 }
68 2 break;
69 2 case 0xf7:
70 2 FrequencyLong_HZ=10000; //10--100000自动减扫频
71 2 while(FrequencyLong_HZ>=10)
72 2 {
73 3 FrequencyLong_HZ=FrequencyLong_HZ-10;
74 3 sin_send(FrequencyLong_HZ);
75 3 // Show_FloatData(FrequencyLong_HZ,5,3);
76 3 delay_nms(500);
77 3 }
78 2 break;
79 2 default: break;
80 2 }
81 1
82 1 }
83
84 void sin_send(unsigned long freqword)
85 {
86 1
87 1 unsigned int ctr_word[5];
88 1 unsigned long f_value;
89 1
90 1 //提取控制字
91 1 freqword = (long)(freqword*1073.741824); //2^32/4000000
92 1 f_value = (long)freqword;
93 1 ctr_word[4] = f_value;
94 1 ctr_word[4] &= 0x00ff;
95 1 f_value >>= 8;
96 1 ctr_word[3] = f_value;
97 1 ctr_word[3] &= 0x00ff;
98 1 f_value >>= 8;
99 1 ctr_word[2] = f_value;
100 1 ctr_word[2] &= 0x00ff;
101 1 f_value >>= 8;
102 1 ctr_word[1] = f_value;
103 1 ctr_word[1] &= 0x00ff;
104 1 wr_word();
105 1 }
106
107 void wr_word(void) //写控制字
108 {
109 1 unsigned int i;
110 1 unsigned int ctr_word[5];
111 1
112 1 AD9851_W_CLK=0; //清控制字
113 1 AD9851_FQ_UD=0;
114 1
115 1 AD9851_W_CLK=0;
116 1 // DATA_PORT=0x09; //6倍频控制
117 1 DATA_PORT=0x00; //不进行6倍频
C51 COMPILER V8.02 AD9851 04/04/2008 19:55:14 PAGE 3
118 1 delay_nus(10);
119 1 AD9851_W_CLK=1;
120 1 delay_nus(10);
121 1
122 1 for (i=1;i<5;i++) //写频率控制字
123 1 {
124 2 AD9851_W_CLK=0;
125 2 DATA_PORT=ctr_word[i];
126 2 delay_nus(10);
127 2 AD9851_W_CLK=1;
128 2 delay_nus(10);
129 2 }
130 1 AD9851_W_CLK=0;
131 1 AD9851_FQ_UD=1; //根据控制字更改输出的频率和相位
132 1 AD9851_FQ_UD=1;
133 1 delay_nms(10);
134 1 AD9851_FQ_UD=0;
135 1 }
136
137 void Initial_AD9851(void) //对 RESET端进行复位
138 {
139 1 AD9851_RESET=0;
140 1 AD9851_RESET=1;
141 1 delay_nms(100);
142 1 AD9851_RESET=0;
143 1 AD9851_FQ_UD=0;
144 1 AD9851_W_CLK=0;
145 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 465 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 26
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -