📄 tuning.lst
字号:
197 3
198 3 flo1=lo1i*fref;
199 3 flo2_desired=flo1- rf_freq-fif2;
200 3 n_lo1adjust=n_lo1adjust+1;
201 3 }
202 2 else return;
203 2
204 2 }
205 1 while(1);
206 1 }
207
208
209 bit is_spurin_band()//假信号检查
210 {
211 1 float f_test;
212 1 char n1;
213 1 char n2;
214 1 char n_max=5;
215 1
216 1 n1=1;
217 1 do{
218 2 n2=-n1;
219 2 f_test=n1*(flo1-flo2_desired);
220 2 do{
221 3 n2=n2-1;
222 3 f_test=f_test-flo2_desired;
223 3
224 3 if(fabs((fabs(f_test))-fif2)<(f_ifbw_width/2))
225 3 return(1);
226 3 else
227 3 {
228 4 if((f_test>(flo2_desired-fif2-f_ifbw_width))|(n2>-n_max))
229 4 continue;
230 4 else break;
231 4 }
232 3 }
233 2 while(1);
234 2
235 2 n1=n1+1;
236 2 if(n1<n_max)
237 2 continue;
238 2 else return (0);
239 2
240 2 }
241 1 while(1);
C51 COMPILER V7.01 TUNING 08/17/2003 17:24:40 PAGE 5
242 1 }
243
244 void select_vco()//以flo1的频率初步选择vco1 步骤3.3 -最优vco1选择
245 {
246 1 if(1128.75<=flo1<1291.50)
247 1 sel=4;
248 1 else if(1291.50<=flo1<1449.00)
249 1 sel=3;
250 1 else if(1449.00<=flo1<1617.00)
251 1 sel=2;
252 1 else if(1617.00<=flo1<1790.25)
253 1 sel=1;
254 1 else if(1790.25<=flo1<1958.25)
255 1 sel=0;
256 1 else if(flo1<1128.75 )
257 1 sel=4;
258 1 else sel=0;
259 1 }
260
261 void calculate_lon()//步骤3.4 计算lo1n lo1a lo2i lo2n lo2a NUM fnon
262 {
263 1 unsigned int as;
264 1
265 1
266 1 lo1n=(unsigned int)(lo1i/8);
267 1 lo1a=lo1i-(lo1n*8);
268 1 lo2i=(unsigned int)(flo2_desired/fref);
269 1 lo2n=(unsigned int)(lo2i/8);
270 1 lo2a=lo2i-(lo2n*8);
271 1 num=(unsigned int)((flo2_desired/fref-lo2i)*3780);
272 1 step=3780*fstep/fref;
273 1 as=(unsigned int)(num/step+1/2);
274 1 num=step*as+1;
275 1 fnon=7;
276 1 }
277
278
279 void write_registers()//步骤3.5 -写寄存器
280 {
281 1 unsigned char reg[14];
282 1 reg[0]=lo1n-1;
283 1 reg[1]=((sel<<4)&0xf0)|(lo1a&0x0f);
284 1 reg[2]=0x86;
285 1 reg[3]=0;
286 1 if(sel<2)
287 1 reg[4]=128+48+fnon;
288 1 else reg[4]=48+fnon;
289 1 reg[5]=((lo2a<<5)&0xe0)|(lo2n-1);
290 1 if( rf_freq<400)
291 1 reg[6]=0xe4;
292 1 else reg[6]=0xf4;
293 1 reg[7]=8+xogc;
294 1 reg[8]=0;
295 1 reg[9]=0;
296 1 reg[10]=0;
297 1 reg[11]=num;
298 1 reg[12]=128+((num>>8)&0x0f);
299 1 reg[13]=0;
300 1 write_a(tuning_address,0,reg,14);
301 1 }
302
303
C51 COMPILER V7.01 TUNING 08/17/2003 17:24:40 PAGE 6
304 bit check_lo_lock()//步骤3.6 -检查LO-PLL锁定
305 {
306 1 unsigned char n_lock;
307 1 unsigned char bdata lock;
308 1 bit locka;
309 1 bit lockb;
310 1
311 1 n_lock=0;
312 1 do
313 1 {
314 2 lock=i2c_read_a(tuning_address,status);
315 2 locka=lock^1;
316 2 lockb=lock^2;
317 2 if(locka&lockb)
318 2 return(1);
319 2 n_lock++;
320 2 delay1(2000);
321 2 if(n_lock>10)
322 2 return(0);
323 2 }
324 1 while(1);
325 1 }
326
327
328 bit optimize_vco()//步骤3.7 -优化VCO
329 {
330 1 unsigned char tad1;
331 1 unsigned char r;
332 1 unsigned char t;
333 1 unsigned char x;
334 1 r=0;
335 1 t=0;
336 1 x=sel;
337 1 do{
338 2 tad1=i2c_read_a(tuning_address,tun_a_d);
339 2 tad1=tad1&0x07;
340 2
341 2 if((tad1==0)|(tad1==1))
342 2 return(0);
343 2 else {
344 3 if(tad1==2)
345 3 {
346 4 if(sel==0)
347 4 {
348 5 sel=x+1;
349 5 t++;
350 5 if(t>4)
351 5 {
352 6 #if(DEBUG)
353 6 printf("VCO优化 T>4\n");
354 6 #endif
355 6 return(1);
356 6 }
357 5 }
358 4 else
359 4 sel--;
360 4 }
361 3 else
362 3 {
363 4 if(sel<4)
364 4 sel++;
365 4 else
C51 COMPILER V7.01 TUNING 08/17/2003 17:24:40 PAGE 7
366 4 {
367 5 sel=x-1;
368 5 r++;
369 5 if(r>4)
370 5 {
371 6 #if(DEBUG)
372 6 printf("VCO优化 R>4\n");
373 6 #endif
374 6 return(1);
375 6 }
376 5 }
377 4 }
378 3 }
379 2 write_b(tuning_address,sel_lo1a, ((sel<<4)&0xf0)|(lo1a&0x0f));
380 2 delay1(1000);
381 2
382 2 }
383 1 while(1);
384 1 }
385
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2105 ----
CONSTANT SIZE = 66 ----
XDATA SIZE = 45 43
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -