📄 tuner.lst
字号:
232 // calculate searched station frequency from dataword bits
233 if(FlagHighInjection)
234 tdwtestVCO =(unsigned long)((float)twPLL*(float)REFERENCE_FREQ*(float)0.25-225);
235 else
236 tdwtestVCO =(unsigned long)((float)twPLL*(float)REFERENCE_FREQ*(float)0.25+225);
237
238 }
239 ///****************test
240 */
241
C51 COMPILER V7.06 TUNER 03/16/2009 19:12:51 PAGE 5
242 void Tuner_Preset (BIT Mute, BIT SetMono,BIT Pin15,unsigned long VCO)
243 {/*
244 1 //***********test
245 1 unsigned char bLevel;
246 1 unsigned char bIFCounter;
247 1 unsigned char brf;
248 1 unsigned char bstero;
249 1 //************test
250 1 */
251 1 FlagSearch = False; // Set global parameters
252 1 FlagMono = SetMono;
253 1 FlagSWPORT2 = Pin15;
254 1 gdwPresetVCO = VCO;
255 1 FlagMute=Mute; //0301 mao
256 1 // RF_Have=1;
257 1
258 1 AssembleData();
259 1 Tuner_I2cSendData();
260 1 // Delay10us(25000); //200ms
261 1 Delay_ms(100);
262 1 /*
263 1 //**********test*********
264 1 Delay_ms(100);
265 1 Tuner_I2cReadData();
266 1 brf=((ReadDataWord[0]>> 7) & 0x01); //RF位
267 1 bstero=((ReadDataWord[2]>>7) & 0x01); //立体声标志
268 1 bIFCounter = ReadDataWord[2] & 0x7F; //中频计数
269 1 bLevel = (ReadDataWord[3] & 0xF0) >> 4; //ADC电平
270 1 DisAssembleFrequencyWord();
271 1 */
272 1 }
273
274 //自动向上收下一台 收到台为返回1 收到头返回0
275 bit Autosearch_Up()
276 {
277 1 unsigned char bLevel;
278 1 unsigned char bIFCounter;
279 1 unsigned char brf;
280 1 unsigned char bstero;
281 1 unsigned char bandlimint;
282 1 while(Flash_Times>0)
283 1 {WatchDog;}
284 1 do
285 1 {
286 2 if(gdwPresetVCO<HighestFM)
287 2 {
288 3 WatchDog;
289 3 gdwPresetVCO+=100;
290 3 bandlimint=0; //频率边界标志 向上频率大与108 为1
291 3 AssembleFrequencyWord();
292 3 Frequency_Change(gdwPresetVCO);
293 3 WatchDog;
294 3 WriteDataWord[0]= ((WriteDataWord[0]|0x80)&0xBF); //打开静音/定点模式
295 3 Tuner_I2cSendData();
296 3 if(SearchDelayMs(1000))
297 3 {
298 4 while((Up_Key!=1)||(Down_Key!=1))//如果还有按下时,表示有人为的停下要求了
299 4 {
300 5 WatchDog;
301 5 }
302 4 break;
303 4 }
C51 COMPILER V7.06 TUNER 03/16/2009 19:12:51 PAGE 6
304 3 WatchDog;
305 3 Tuner_I2cReadData();
306 3 brf=((ReadDataWord[0]>> 7) & 0x01); //RF位
307 3 bstero=((ReadDataWord[2]>>7) & 0x01); //立体声标志
308 3 bIFCounter = ReadDataWord[2] & 0x7F; //中频计数
309 3 bLevel = (ReadDataWord[3] & 0xF0) >> 4; //ADC电平
310 3 }
311 2 else
312 2 {
313 3 bandlimint=1;
314 3 break;
315 3 }
316 2 }
317 1 while(!((brf==1)&&(bLevel>=8)&&(bIFCounter>=0x32)&&(bIFCounter<=0x3E))); //收台判断条件
318 1 if (bandlimint==1)
319 1 {
320 2 Auto_Search_Flag=1;//使能闪烁功能
321 2 Flash_Times=4;//闪烁次数
322 2 return 0; //收到频率顶端,返回0
323 2 }
324 1 else
325 1 {
326 2 WriteDataWord[0]=WriteDataWord[0]&0x3F; //关闭静音
327 2 Tuner_I2cSendData(); //写收到的台输出
328 2 Auto_Search_Flag=1;
329 2 Flash_Times=4;
330 2 Flag_500ms=0;
331 2 return 1;
332 2 }
333 1 }
334
335
336 //自动向下收下一台 收到台为返回1 收到头返回0
337 bit Autosearch_Down()
338 {
339 1 unsigned char bLevel;
340 1 unsigned char bIFCounter;
341 1 unsigned char brf;
342 1 unsigned char bstero;
343 1 unsigned char bandlimint;
344 1 while(Flash_Times>0)
345 1 {WatchDog;}
346 1 do
347 1 {
348 2 if(gdwPresetVCO>LowestFM)
349 2 {
350 3 WatchDog;
351 3 gdwPresetVCO-=100;
352 3 bandlimint=0; //频率边界标志 向下频率小与875为1
353 3 AssembleFrequencyWord();
354 3 Frequency_Change(gdwPresetVCO);
355 3 WatchDog;
356 3 WriteDataWord[0 ]= ((WriteDataWord[0]|0x80)&0xBF); //打开静音/定点模式
357 3 Tuner_I2cSendData();
358 3 if(SearchDelayMs(1000))
359 3 {
360 4 while((Up_Key!=1)||(Down_Key!=1))//如果还有按下时,表示有人为的停下要求了
361 4 {
362 5 WatchDog;
363 5 }
364 4 break;
365 4 }
C51 COMPILER V7.06 TUNER 03/16/2009 19:12:51 PAGE 7
366 3 WatchDog;
367 3 Tuner_I2cReadData();
368 3 brf=((ReadDataWord[0]>> 7) & 0x01); //RF位
369 3 bstero=((ReadDataWord[2]>>7) & 0x01); //立体声标志
370 3 bIFCounter = ReadDataWord[2] & 0x7F; //中频计数
371 3 bLevel = (ReadDataWord[3] & 0xF0) >> 4; //ADC电平
372 3
373 3 }
374 2 else
375 2 {
376 3 bandlimint=1;
377 3 break;
378 3 }
379 2 }
380 1 while(!((brf==1)&&(bLevel>=8)&&(bIFCounter>=0x34)&&(bIFCounter<=0x3E)));
381 1 if (bandlimint==1)
382 1 {
383 2 Auto_Search_Flag=1;//使能闪烁功能
384 2 Flash_Times=4;//闪烁次数
385 2 return 0; //收到频率顶端,返回0
386 2 }
387 1 else
388 1 {
389 2 WriteDataWord[0]=WriteDataWord[0]&0x3F; //关闭静音
390 2 Tuner_I2cSendData();
391 2 Auto_Search_Flag=1;//使能闪烁功能
392 2 Flash_Times=4;//闪烁次数
393 2 Flag_500ms=0;
394 2 return 1;
395 2 }
396 1 }
397
398
399 void Tuner_Init(void)
400 {
401 1 BYTE i;
402 1 for(i=0;i<5;i++) //Clear 5767 data buffer =0
403 1 {
404 2 ReadDataWord[i] = False;
405 2 WriteDataWord[i] =False;
406 2 }
407 1
408 1 WriteDataWord[0] = 0x2a|0x80; //init FM89.8MHz ok. //init FM89.8MHz ok.
409 1
410 1 WriteDataWord[1] = 0x0b6;
411 1 WriteDataWord[2] = 0x41; //ADC输出为7,高充电流为0;
412 1 WriteDataWord[3] = 0x13; //soft Mute关,立体声去噪打开
413 1 WriteDataWord[4] = 0x00;//50us去加重电路
414 1 Tuner_I2cSendData();
415 1 Delay10us(100);
416 1
417 1 // WriteDataWord[0] = 0x2a; // init FM89.8MHz ok.
418 1 // WriteDataWord[1] = 0x0b6;
419 1 // WriteDataWord[2] = 0x41; //p1 high
420 1 // WriteDataWord[3] = 0x11;
421 1 // WriteDataWord[4] = 0x40;
422 1 /// Tuner_I2cSendData();
423 1
424 1 // Tuner_Preset( False, True,High,89800 ) ;
425 1 // gdwPresetVCO=89800;
426 1 // Frequency_Change(gdwPresetVCO);
427 1
C51 COMPILER V7.06 TUNER 03/16/2009 19:12:51 PAGE 8
428 1
429 1 }
430 /*
431 void Check_Ch(void)
432 {
433
434 if(Check_ADC_Count>50)//计时大于3秒了
435 {
436 Check_ADC_Count=0;//清强度检测计时器
437 Tuner_I2cReadData();
438 ADC_Val=(ReadDataWord[3] & 0xF0) >> 4; //ADC电平
439 if(ADC_Val<District)//检测不到台的下限值
440 {
441 WriteDataWord[0]= ((WriteDataWord[0]|0x80)&0xBF); //打开静音/定点模式
442 Tuner_I2cSendData();
443
444 }//Tuner_Preset (True, True,False,gdwPresetVCO);//静音
445 else
446 {
447 WriteDataWord[0]= (WriteDataWord[0]&0x3F); //打开静音/定点模式
448 Tuner_I2cSendData();
449 }//Tuner_Preset (False, True,Low,gdwPresetVCO);//不静音
450
451 }
452 }
453 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1062 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 18
IDATA SIZE = 10 ----
BIT SIZE = 12 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -