?? ad9850.lst
字號:
C51 COMPILER V7.10 AD9850 08/17/2007 18:41:25 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE AD9850
OBJECT MODULE PLACED IN AD9850.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AD9850.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<math.h>
2 #include<reg52.h>
3 #include"12864_serial.h"
4 #include"AD9850.H"
5 #include "intrins.h"
6
7 //unsigned char CON_word[5];
8 //Word data[7] data[6] data[5] data[4] data[3] data[2] data[1] data[0]
9 //W0 Phase b Phase b3 Phase b2 Phase b1 Phase b0 Power Down Control Control
10 //W1 Freq-b31 Freq-b30 Freq-b29 Freq-b28 Freq-b27 Freq-b26 Freq-b25 Freq-b24
11 //W2 Freq-b23 Freq-b22 Freq-b21 Freq-b20 Freq-b19 Freq-b18 Freq-b17 Freq-b16
12 //W3 Freq-b15 Freq-b14 Freq-b13 Freq-b12 Freq-b11 Freq-b10 Freq-b9 Freq-b8
13 //W4 Freq-b7 Freq-b6 Freq-b5 Freq-b4 Freq-b3 Freq-b2
14 //--------------------------------------------------------------------------------------------------
15 // 函數名稱: delay
16 // 入口參數: N
17 // 函數功能:延時子程序,實現(16*N+24)us的延時
18 // 系統采用12MHz的時鐘時,延時滿足要求,其它情況需要改動
19 //--------------------------------------------------------------------------------------------------
20 void delay(unsigned int N)
21 {
22 1 int i;
23 1 for(i=0;i<N;i++);
24 1 }
25 //--------------------------------------------------------------------------------------------------
26 // 函數名稱: WRITE_AD9850
27 // 函數功能: 將控制字寫入AD9850
28 //--------------------------------------------------------------------------------------------------
29 void WRITE_AD9850(unsigned char CON_word[5])
30 {
31 1 unsigned char i;
32 1 FQ_UD=0;
33 1 W_CLK=0;
34 1 delay(0);
35 1 CON_word[0]=CON_word[0]&0xFC; //置工作方式選擇位為00
36 1 for(i=0;i<5;i++)
37 1 {
38 2 data_OUT=CON_word[i]; //送控制字
39 2 W_CLK=0;
40 2 delay(0);
41 2 W_CLK=1; //上升延
42 2 delay(0);
43 2 }
44 1 FQ_UD=1; //上升延要求AD9850改變輸出
45 1 }
46
47
48 /*
49 void AD9850_init(void)
50 {
51 reset=0;
52 reset=1;
53 fq_ud=0;
54 w_clk=0;
55 reset=0;
C51 COMPILER V7.10 AD9850 08/17/2007 18:41:25 PAGE 2
56
57 WriteLCD(0x80," (AD9850) ");
58 WriteLCD(0x90,"頻率:000.000 HZ");
59 WriteLCD(0x88,"相位: 0 度");
60 WriteLCD(0x98," Just Do It... ");
61 }*/
62 /*
63 void send_fivewords(unsigned char DATA[5])//順序為F0_31,三位控制,P0_4)
64 { unsigned char i;
65
66 for(i=0;i<5;i++)
67 {
68 control_words=DATA[i];
69 w_clk=1;
70 _nop_ ();
71 //for(i=0;i<100;i++);
72 w_clk=0;
73 }
74 fq_ud=1;
75 fq_ud=0;
76
77 } */
78 void AD9850_DISPLAY(float F,float P)
79 { unsigned char decimal_code[10]={'0','1','2','3','4','5','6','7','8','9'} ;
80 1 unsigned char display_tmp[8]={'0','0','0','.','0','0','0','\0'};
81 1 unsigned char phasic[6]={'0','0','0','.','0','0'};
82 1 unsigned int bufh,bufl;
83 1 unsigned char i;
84 1 if(F>=1000000)
85 1 { F/=1000;
86 2 bufh=(unsigned int)(F/1000);
87 2 bufl=(unsigned int)(F-bufh*1000);
88 2 display_tmp[0]=decimal_code[bufh/100]; bufh%=100;
89 2 display_tmp[1]=decimal_code[bufh/10] ; bufh%=10 ;
90 2 display_tmp[2]=decimal_code[bufh] ;
91 2 display_tmp[4]=decimal_code[bufl/100] ; bufl%=100 ;
92 2 display_tmp[5]=decimal_code[bufl/10] ; bufl%=10 ;
93 2 display_tmp[6]=decimal_code[bufl] ;
94 2 for(i=0;i<2;i++)
95 2 if(display_tmp[i]=='0')
96 2 display_tmp[i]=' ';
97 2 else break;
98 2 for(i=6;i>=4;i--)
99 2 if(display_tmp[i]=='0')
100 2 {
101 3 display_tmp[i]=' ';
102 3 if(i==4)display_tmp[3]=' ';
103 3 else;
104 3 }
105 2 else break;
106 2 WriteLCD(0x93,display_tmp);
107 2 WriteLCD(0x97,"M ");
108 2 }
109 1 else if(F>=1000)
110 1 { bufh=(unsigned int) (F/1000);
111 2 bufl=(unsigned int)(F-bufh*1000);
112 2 display_tmp[0]=decimal_code[bufh/100]; bufh%=100;
113 2 display_tmp[1]=decimal_code[bufh/10] ; bufh%=10 ;
114 2 display_tmp[2]=decimal_code[bufh] ;
115 2 display_tmp[4]=decimal_code[bufl/100] ; bufl%=100 ;
116 2 display_tmp[5]=decimal_code[bufl/10] ; bufl%=10 ;
117 2 display_tmp[6]=decimal_code[bufl] ;
C51 COMPILER V7.10 AD9850 08/17/2007 18:41:25 PAGE 3
118 2 for(i=0;i<2;i++)
119 2 if(display_tmp[i]=='0')
120 2 display_tmp[i]=' ';
121 2 else break;
122 2 for(i=6;i>=4;i--)
123 2 if(display_tmp[i]=='0')
124 2 {display_tmp[i]=' ';
125 3 if(i==4)display_tmp[3]=' ';
126 3 else; }
127 2 else break;
128 2 WriteLCD(0x93,display_tmp);
129 2 WriteLCD(0x97,"K ");
130 2 }
131 1 else if(F>0)
132 1 { bufh=(unsigned int )F;
133 2 bufl=(unsigned int)(F*1000-bufh*1000);
134 2 display_tmp[0]=decimal_code[bufh/100]; bufh%=100;
135 2 display_tmp[1]=decimal_code[bufh/10] ; bufh%=10 ;
136 2 display_tmp[2]=decimal_code[bufh] ;
137 2 display_tmp[4]=decimal_code[bufl/100] ; bufl%=100 ;
138 2 display_tmp[5]=decimal_code[bufl/10] ; bufl%=10 ;
139 2 display_tmp[6]=decimal_code[bufl] ;
140 2 for(i=0;i<2;i++)
141 2 if(display_tmp[i]=='0')
142 2 display_tmp[i]=' ';
143 2 else break;
144 2 for(i=6;i>=4;i--)
145 2 if(display_tmp[i]=='0')
146 2 {display_tmp[i]=' ';
147 3 if(i==4)display_tmp[3]=' ';
148 3 else; }
149 2 else break;
150 2 WriteLCD(0x93,display_tmp);
151 2 WriteLCD(0x97,"HZ");
152 2
153 2 }
154 1 if((unsigned int)(P*100)%100==0 )
155 1 phasic[3]=0;
156 1 bufh=(unsigned int )P;
157 1 bufl=(unsigned int)(F*100-bufh*100);
158 1 phasic[0]=decimal_code[bufh/100] ;bufh%=100 ;
159 1 phasic[1]=decimal_code[bufh/10] ;bufh%=10 ;
160 1 phasic[2]=decimal_code[bufh] ;
161 1 phasic[4]=decimal_code[bufl/10] ;bufl%=10 ;
162 1 phasic[5]=decimal_code[bufl];
163 1 for(i=0;i<2;i++)
164 1 if(phasic[i]=='0')
165 1 phasic[i]=' ';
166 1 else break;
167 1 for(i=5;i>=4;i--)
168 1 if(phasic[i]=='0')
169 1 {phasic[i]=' ';
170 2 if(i==4)display_tmp[3]=' ';
171 2 else; }
172 1 else break;
173 1 WriteLCD(0x8B,phasic);
174 1 }
175
176 void frequency_to_phase(unsigned long F,unsigned char DATA[5])//轉換為DATA[1]-----DATA[4]
177 { unsigned long phase;
178 1 phase=F/125.0/1000*1024.0/1000*1024.0*4096;
179 1 DATA[1]=phase/16777216;
C51 COMPILER V7.10 AD9850 08/17/2007 18:41:25 PAGE 4
180 1 DATA[2]=phase/65536;
181 1 DATA[3]=phase/256;
182 1 DATA[4]=phase;
183 1
184 1
185 1 }
186 void phasic_to_phase(float P ,unsigned char DATA[5]) //轉換為DATA[0]的高5位
187 {
188 1 DATA[0]=(unsigned char)(P/11.25+0.5)<<3;
189 1
190 1 }
191 /***************串行程序*********************/
192 /*
193 void DDS_set_freq (void)
194 {
195 unsigned char byte_temp;
196 unsigned long freq_word =0x0505AAFF ;//頻率控制字
197 float fTemp;
198 fTemp=mulFreq;
199 fTemp=fTemp*65536/DDS_CLK_IN*65536;
200 freq_word =fTemp;
201 //freq_word =(float)mulFreq*65536/DDS_CLK_IN*65536;
202
203 _nop_(); _nop_(); _nop_(); _nop_();
204 DDS_UPDATE = 0;
205 _nop_(); _nop_(); _nop_(); _nop_();
206 DDS_CLK = 0;
207 _nop_(); _nop_(); _nop_(); _nop_();
208
209 for ( byte_temp = 0; byte_temp < 32; byte_temp++ )
210 {
211 freq_word = freq_word >> 1;
212 DDS_DATA = CY;
213 DDS_CLK = 1;
214 _nop_(); _nop_(); _nop_(); _nop_(); //實際應用應在延遲
215 DDS_CLK = 0;
216 }
217 for ( byte_temp = 0; byte_temp < 8; byte_temp++ )
218 {
219 DDS_DATA = 0;
220 DDS_CLK = 1;
221 _nop_(); _nop_(); _nop_(); _nop_();
222 DDS_CLK = 0;
223 }
224
225 DDS_UPDATE = 1;
226 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
227 DDS_UPDATE = 0;
228 } */
229
230 void init_dds(void)
231 {
232 1 DDS_RESET=0;
233 1 delay(2);
234 1 DDS_RESET=1;
235 1 delay(2);
236 1 DDS_RESET=0;
237 1 WriteLCD(0x80," (AD9850) ");
238 1 WriteLCD(0x90,"頻率:000.000 HZ");
239 1 WriteLCD(0x88,"相位: 0 度");
240 1 WriteLCD(0x98," Just Do It... ");
241 1 /***************串行初始化程序*****************/
C51 COMPILER V7.10 AD9850 08/17/2007 18:41:25 PAGE 5
242 1 /*
243 1 DDS_DATA=0;
244 1 DDS_CLK=0;
245 1 DDS_UPDATE=0;
246 1 DDS_UPDATE=1;
247 1 DDS_UPDATE=0;
248 1
249 1 DDS_CLK=1;
250 1 DDS_CLK=0;
251 1 DDS_UPDATE=1;
252 1 DDS_UPDATE=0;
253 1
254 1 mulFreq=0;
255 1 DDS_set_freq(); */
256 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1680 ----
CONSTANT SIZE = 101 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 51
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 + -