?? sp3767.lst
字號:
261 1
262 1
263 1 bFmWriteData[2] = 0x00;//low injection ,stereo on,left not muted,right not muted,SW port1 low
264 1 #ifdef BAND_USA
265 1 bFmWriteData[3] = 0x1e;//SW port2 low,standby off,US/Europe FM band limit,xtal=32.768kHz,Soft-mute on,HCC
- on,SNC on,pin 14 is SW port1;
266 1 #else
bFmWriteData[3] = 0x3e;
#endif
269 1 bFmWriteData[4] = 0x40;
270 1 #define SP3767_ID 0x00
271 1 #define SP3767_RSV 0x00
272 1 if(SP3767Read())
273 1 {
274 2 if((bFmReadData[3] & 0x0F) == SP3767_ID && bFmReadData[4] == SP3767_RSV)
275 2 return 1;
276 2 else return 0;
277 2 }
278 1 else return 0;
279 1 }
280
281 bit FmSetFreq(void)
282 {
283 1 WORD TP_WORD_0;
284 1 #define wPLL TP_WORD_0
285 1 wPLL = CalculatePLL();
286 1 if (fHILOInjection)
287 1 bFmWriteData[2] |= FM_HI_INJECTION_EN;
288 1 else
289 1 bFmWriteData[2] &= FM_LO_INJECTION_EN;
290 1
291 1 bFmWriteData[0]=((wPLL >> 8) & FM_CMD_MUTE_DIS) & FM_CMD_SEARCH_DIS; //not mute and not in search mode
292 1 bFmWriteData[1] = wPLL ;
293 1 bFmWriteData[2] &= 0xF0;
294 1
295 1 return SP3767Write();
296 1 }
297
298 bit Search(bit fSearchUp)
299 {
300 1 unsigned short wPLL; // TP_WORD_1 //TP_BYTE_2
301 1 unsigned short wTimeOut2; // TP_WORD_3 // TP_BYTE_6
302 1 unsigned char bNowStopLevel;// TP_BYTE_14
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 6
303 1
304 1 unsigned char bLevel;
305 1 unsigned char bIFCounter;
306 1 unsigned short wFreqSave;
307 1
308 1
309 1 //===========指定頻率 =============
310 1 if(fHand)
311 1 {
312 2 // fHILOInjection = FM_LO_INJEC;
313 2 fHILOInjection = FM_HI_INJEC;
314 2 bNowStopLevel = FM_CMD_STOP_HIGH; // Use Low Level for search default
315 2 wFreqSave = wFmFreq;
316 2 printf("wFmFreq: %d.%d MHz\n",(unsigned short)(wFmFreq / 10),(unsigned short)(wFmFreq % 10));
317 2 wPLL = CalculatePLL();
318 2 printf("PLL: %x\n",(unsigned short)wPLL);
319 2 bFmWriteData[0] = ((BYTE)(wPLL >> 8) & (~FM_CMD_SEARCH_EN) | FM_CMD_MUTE_EN);
320 2 bFmWriteData[1] = (BYTE)wPLL;
321 2 bFmWriteData[2] = (((BYTE)fSearchUp) << 7) | bNowStopLevel;
322 2 bFmWriteData[2] |= FM_HI_INJECTION_EN;
323 2
324 2 SP3767Write(); //Start Search
325 2 DelayMs(10);
326 2 SP3767Read();
327 2 bLevel = (bFmReadData[3] & 0xF0) >> 4;
328 2 DelayMs(100);
329 2 SP3767Read();
330 2 bIFCounter = bFmReadData[2] & FM_GET_IF;
331 2 printf("bLevel: %d, bIFCounter: %x\n",(unsigned short)bLevel,(unsigned short)bIFCounter);
332 2 return 1;
333 2 }
334 1 //===================end=======================
335 1
336 1 //===================下面是自動=======================
337 1 RETRY:
338 1 bNowStopLevel = FM_CMD_STOP_MID; // Use Low Level for search default
339 1 fHILOInjection = FM_HI_INJEC;
340 1
341 1 while(1)
342 1 {
343 2 wFreqSave = wFmFreq;
344 2 wPLL = CalculatePLL();
345 2 printf("Search wFmFreq: %d.%d MHz\n",(unsigned short)(wFmFreq / 10),(unsigned short)(wFmFreq % 10));
346 2 printf("Search PLL: %x\n",(unsigned short)wPLL);
347 2 bFmWriteData[0] = ((BYTE)(wPLL >> 8) | FM_CMD_SEARCH_EN | FM_CMD_MUTE_EN);
348 2 bFmWriteData[1] = (BYTE)wPLL;
349 2 bFmWriteData[2] = (((BYTE)fSearchUp) << 7) | bNowStopLevel;
350 2 bFmWriteData[2] |= FM_HI_INJECTION_EN;
351 2
352 2 SP3767Write(); //Start Search
353 2 DelayMs(100);
354 2 wTimeOut2 = 0xFFFF;
355 2 SP3767Read();
356 2 do
357 2 {
358 3 wPLL = bFmReadData[0] & 0x3F;
359 3 wPLL = (wPLL << 8) | bFmReadData[1];
360 3 wFmFreq = ConvertPLL(wPLL);
361 3 printf("current freq: %d\n",wFmFreq);
362 3 wPLL = CalculatePLL();
363 3 bFmWriteData[0] = ((BYTE)(wPLL >> 8) | FM_CMD_SEARCH_EN | FM_CMD_MUTE_EN);
364 3 bFmWriteData[1] = (BYTE)wPLL;
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 7
365 3 SP3767Write(); //Start Search
366 3 DelayMs(100);
367 3 if(!SP3767Read()) return FALSE;
368 3 wTimeOut2 --;
369 3 if(wTimeOut2 == 0) return FALSE; //Time Out
370 3 if(bFmReadData[0] & FM_SEARCH_BAND) //Reach the band limit
371 3 {
372 4 printf("band over\n");
373 4 if(fSearchUp)
374 4 wFmFreq = 875;
375 4 else wFmFreq = 1080;
376 4 goto RETRY;
377 4 }
378 3 }while((bFmReadData[0] & FM_SEARCH_FINISH) == FALSE); //wait search finish
379 2
380 2 bIFCounter = bFmReadData[2] & FM_GET_IF;
381 2 bLevel = (bFmReadData[3] & 0xF0) >> 4;
382 2
383 2 if(0x31 < bIFCounter && bIFCounter < 0x3E && bLevel >= 7)
384 2 {
385 3 if(wFmFreq == wFreqSave)
386 3 {
387 4 if(fSearchUp)
388 4 wFmFreq ++;
389 4 else wFmFreq --;
390 4 goto RETRY;
391 4 }
392 3 }
393 2 else
394 2 {
395 3 if(fSearchUp)
396 3 wFmFreq ++;
397 3 else wFmFreq --;
398 3
399 3 if(wFmFreq >= BAND_MAX)
400 3 wFmFreq = BAND_MIN;
401 3 if(wFmFreq <= BAND_MIN)
402 3 wFmFreq = BAND_MAX;
403 3 goto RETRY;
404 3 }
405 2
406 2 wPLL = ((WORD)(bFmReadData[0] & 0x3f)) << 8;
407 2 wPLL |= bFmReadData[1];
408 2 wFmFreq = ConvertPLL(wPLL);
409 2 printf("bLevel: %d, bIFCounter: %x\n",(unsigned short)bLevel,(unsigned short)bIFCounter);
410 2 printf("radio return revise PLL: %x\n", wPLL);
411 2 printf("radio return revise freq: %d.%d MHz\n",(unsigned short)(wFmFreq / 10),(unsigned short)(wFmFreq %
- 10));
412 2 return 1;
413 2 }
414 1 }
415
416 void mInitSTDIO()
417 {
418 1 SCON = 0x50;
419 1 PCON = 0x80;
420 1 TMOD = 0x20;
421 1 TH1 = 0xf3; /* 24MHz晶振, 9600bps */
422 1 TR1 = 1;
423 1 TI = 1;
424 1 }
425
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 8
426 void main(void)
427 {
428 1 unsigned char cnt;
429 1
430 1 DelayMs(100);
431 1
432 1 cnt = 0;
433 1 mInitSTDIO();
434 1
435 1 cnt = 5;
436 1 printf("\nstart...\n");
437 1 while(cnt -- > 0)
438 1 {
439 2 LED = 0;
440 2 DelayMs(100);
441 2 LED = 1;
442 2 DelayMs(100);
443 2 }
444 1
445 1
446 1 printf("Init SP3767\n");
447 1 if(FmInit())
448 1 printf("SP3767 OK\n");
449 1 else printf("SP3767 Err\n");
450 1 cnt = 36;
451 1 printf("Search...\n");
452 1 #ifdef HAND
453 1 index = 0;
454 1 fHand = 1;
455 1 wFmFreq = FRQ_TAB[index];
456 1 #else
wFmFreq = 875;
#endif
459 1 if(Search(1))
460 1 {
461 2 if(FmSetFreq())
462 2 printf("set ok!\n\n");
463 2 else
464 2 printf("set error!\n\n");
465 2 }
466 1 else
467 1 printf("search err\n\n");
468 1
469 1 while(1)
470 1 {
471 2 if(!UpKey)
472 2 {
473 3 while(!UpKey);
474 3 #ifdef HAND
475 3 if(index == NUM) index = 0;
476 3 else index ++;
477 3 wFmFreq = FRQ_TAB[index];
478 3 fHand = 1;
479 3 #else
wFmFreq ++;
#endif
482 3 if(Search(1))
483 3 {
484 4 if(!FmSetFreq())
485 4 printf("set err\n\n");
486 4 else printf("set ok\n\n");
487 4 }
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 9
488 3 else printf("search err\n\n");
489 3 }
490 2 if(!DnKey)
491 2 {
492 3 while(!DnKey);
493 3 #ifdef HAND
494 3 if(index == 0)
495 3 index = NUM;
496 3 else index --;
497 3 wFmFreq = FRQ_TAB[index];
498 3 fHand = 1;
499 3 #else
wFmFreq --;
#endif
502 3 if(Search(0))
503 3 {
504 4 if(!FmSetFreq())
505 4 printf("set err\n\n");
506 4 else printf("set ok\n\n");
507 4 }
508 3 else printf("search err\n\n");
509 3 fHand = 0;
510 3 }
511 2 }
512 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1425 ----
CONSTANT SIZE = 385 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 13
IDATA SIZE = ---- ----
BIT SIZE = 2 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -