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

📄 tea5767.lst

📁 本程序演示 :以非利普TEA5767 为核心的
💻 LST
字号:
C51 COMPILER V7.50   TEA5767                                                               04/09/2008 23:05:37 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEA5767
OBJECT MODULE PLACED IN tea5767.OBJ
COMPILER INVOKED BY: F:\C51\BIN\C51.EXE tea5767.c LARGE OPTIMIZE(7,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"reg52.h"
   2          #include"24c02.h"
   3          #include"lcm.h"
   4          #define max_freq 108000
   5          #define min_freq 87500
   6          unsigned char radio_write_data[5]={0xb1,0xa0,0x20,0x11,0x00};        //要写入TEA5767的数据
   7          unsigned char radio_write_data1[5]={0x31,0xa0,0x20,0x11,0x00};        //要写入TEA5767的数据
   8          unsigned char radio_read_data[5];        //TEA5767读出的状态
   9          unsigned int default_pll=0x29c2;//0x29f9;        //默认存台的pll,87.8MHz
  10          unsigned int pll=0;
  11          float frequency=0;
  12          void get_frequency(void);
  13          extern void sta();
  14          extern void wrbyt(unsigned char byt);
  15          extern bit iic_testack() ;
  16          extern void mack();
  17          extern void stop();
  18          extern unsigned char rdbyt();
  19          extern uchar frq[10];
  20          sbit ds_1302=P1^5; 
  21          void radio_write(void)
  22          {
  23   1          unsigned char i;
  24   1              stop();
  25   1          sta();
  26   1          wrbyt(0xc0);        //TEA5767写地址
  27   1          if(!iic_testack())
  28   1          {
  29   2              for(i=0;i<5;i++)
  30   2              {
  31   3                  wrbyt(radio_write_data1[i]);
  32   3                  mack();
  33   3              }
  34   2          }
  35   1          stop();    
  36   1      }
  37          
  38          //读TEA5767状态,并转换成频率
  39          void radio_read(void)
  40          {
  41   1          unsigned char i;
  42   1          unsigned char temp_l,temp_h;
  43   1          pll=0;
  44   1              stop();
  45   1      
  46   1          sta();
  47   1          wrbyt(0xc1);        //TEA5767读地址
  48   1          if(!iic_testack())
  49   1          {
  50   2              for(i=0;i<5;i++)
  51   2              {
  52   3                  radio_read_data[i]=rdbyt();
  53   3                  mack();
  54   3              }
  55   2          }
C51 COMPILER V7.50   TEA5767                                                               04/09/2008 23:05:37 PAGE 2   

  56   1          stop();
  57   1          temp_l=radio_read_data[1];
  58   1          temp_h=radio_read_data[0];
  59   1          temp_h&=0x3f;
  60   1          pll=temp_h*256+temp_l;
  61   1          get_frequency();
  62   1      }
  63          
  64          //由频率计算PLL
  65          void get_pll(void)
  66          {
  67   1          unsigned char hlsi;
  68   1          unsigned int twpll=0;
  69   1          hlsi=radio_write_data[2]&0x10;
  70   1          if (hlsi)
  71   1              pll=(unsigned int)((float)((frequency+225)*4)/(float)32.768);    //频率单位:k
  72   1          else
  73   1              pll=(unsigned int)((float)((frequency-225)*4)/(float)32.768);    //频率单位:k
  74   1      }
  75          //由PLL计算频率
  76          void get_frequency(void)
  77          {
  78   1          unsigned char hlsi;
  79   1          unsigned int npll=0;
  80   1          npll=pll;
  81   1          hlsi=radio_write_data[2]&0x10;
  82   1          if (hlsi)
  83   1              frequency=(unsigned long)((float)(npll)*(float)8.192-225);    //频率单位:KHz
  84   1          else
  85   1              frequency=(unsigned long)((float)(npll)*(float)8.192+225);    //频率单位:KHz
  86   1      }
  87          
  88          //手动设置频率,mode=1,+0.1MHz; mode=0:-0.1MHz ,不用考虑TEA5767用于搜台的相关位:SM,SUD
  89          void search(bit mode)
  90          {
  91   1          radio_read();        
  92   1          if(mode)
  93   1          {
  94   2              frequency+=50;
  95   2              if(frequency>max_freq)
  96   2                  frequency=min_freq;
  97   2          }
  98   1          else
  99   1          {
 100   2              frequency-=50;
 101   2              if(frequency<min_freq)
 102   2                  frequency=max_freq;
 103   2          }          
 104   1          EA=0;             
 105   1          get_pll();
 106   1          radio_write_data1[0]=pll/256;
 107   1          radio_write_data1[1]=pll%256;
 108   1          radio_write_data1[2]=0x20;
 109   1          radio_write_data1[3]=0x11;
 110   1          radio_write_data1[4]=0x00;
 111   1              radio_write();
 112   1              lcddigit(frequency/10,60,50);
 113   1              EA=1;
 114   1      }
 115          void set_frq(uchar *frq_m)
 116          {
 117   1          
C51 COMPILER V7.50   TEA5767                                                               04/09/2008 23:05:37 PAGE 3   

 118   1          EA=0;     
 119   1          frequency=(float)((*frq_m)*1000+(*(frq_m+1))*100+(*(frq_m+2))*10+(*(frq_m+3)))*100;    
 120   1              if((frequency<87500)||(frequency>108500))
 121   1              {
 122   2              EA=1;
 123   2              *frq_m=0;
 124   2              *(frq_m+1)=0;
 125   2              *(frq_m+2)=0;
 126   2              *(frq_m+3)=0;
 127   2              return;
 128   2              }
 129   1          get_pll();
 130   1          radio_write_data1[0]=pll/256;
 131   1          radio_write_data1[1]=pll%256;
 132   1          radio_write_data1[2]=0x20;
 133   1          radio_write_data1[3]=0x11;
 134   1          radio_write_data1[4]=0x00;
 135   1              radio_write();
 136   1              lcddigit(frequency/10,60,50);
 137   1              EA=1;
 138   1      }
 139          //自动搜台  没做中频判段 会有假台
 140          void auto_search(void)
 141          {
 142   1      char i=0;
 143   1      char j=0;
 144   1      int k=0;
 145   1      int y=0;
 146   1      char m=0;
 147   1      unsigned char aa[6]={0}; 
 148   1      ds_1302=0;
 149   1      radio_write();
 150   1      while(frequency<max_freq)
 151   1      {
 152   2      while((!((radio_read_data[2]<0xc0)&&(radio_read_data[2]>0xbc)&&((radio_read_data[3]>>4)>0x0d)))&&(y<5))
 153   2      {
 154   3      EA=0;
 155   3       y++;
 156   3       ds_1302=0;
 157   3       radio_read();
 158   3       radio_write();
 159   3       lcddigit(frequency/10,10,10);
 160   3       EA=1;
 161   3       for(k=0;k<2500;k++);
 162   3       
 163   3      }
 164   2      if(y<5)
 165   2      {
 166   3        m=0;
 167   3      }
 168   2      else
 169   2      y=0;
 170   2          EA=0;
 171   2          radio_read();        
 172   2          frequency+=50;        
 173   2          get_pll();
 174   2          radio_write_data1[0]=pll/256;
 175   2          radio_write_data1[1]=pll%256;
 176   2          radio_write_data1[2]=0x20;
 177   2          radio_write_data1[3]=0x11;
 178   2          radio_write_data1[4]=0x00;
 179   2              radio_write();
C51 COMPILER V7.50   TEA5767                                                               04/09/2008 23:05:37 PAGE 4   

 180   2              EA=1;
 181   2       }
 182   1      }
 183          
 184          
 185          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1226    ----
   CONSTANT SIZE    =      6    ----
   XDATA SIZE       =     23      22
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -