⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sp3767.lst

📁 T5767收音机IIC协议和控制部分源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -