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

📄 tea5767.lst

📁 tea5767_102模块,i2c总线控制方式
💻 LST
字号:
C51 COMPILER V7.07   TEA5767                                                               08/22/2008 23:25:42 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE TEA5767
OBJECT MODULE PLACED IN tea5767.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE tea5767.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include "TEA5767.h"
   3          #include "global.h"
   4          
   5          
   6          #define TEA5767_wr  0xC0//10100000
   7          #define TEA5767_rd  0xC1//10100001  
   8          
   9          #define i2c_5767_SCL_0  P2 &= 0xFD 
  10          #define i2c_5767_SCL_1  P2 |= 0x02 
  11          #define i2c_5767_DA_0  P2 &= 0xFE 
  12          #define i2c_5767_DA_1  P2 |= 0x01 
  13          sbit  i2c_5767_DA_receive  = P2^0 ;
  14          
  15          
  16          void Init_Tea5767(unsigned long freq)
  17          {
  18   1        //初始化IO端口
  19   1        
  20   1        Set_Freq(freq);
  21   1      
  22   1      }
  23          
  24          unsigned char Write_5767(unsigned char * senddata)
  25          {
  26   1          unsigned char i;
  27   1          
  28   1          stopInterupt();
  29   1      
  30   1              i2c_5767_start();                   //启动条件S(1)
  31   1          i2c_5767_write8bit(TEA5767_wr);        //TEA5767写地址
  32   1                                                                               
  33   1          if(i2c_5767_receive_ack())                           //收应答A
  34   1          {
  35   2             for(i=0;i<5;i++)                          //发数据
  36   2              {
  37   3                  i2c_5767_write8bit(senddata[i]);     
  38   3                  i2c_5767_receive_ack();      //收应答A
  39   3                      }
  40   2                  i2c_5767_stop();                                     //停止条件P
  41   2      
  42   2                      startInterupt();
  43   2        
  44   2                      return TRUE;
  45   2          }
  46   1          else
  47   1          {
  48   2                      i2c_5767_stop();    
  49   2      
  50   2      //              delay_us(10);
  51   2      
  52   2                      startInterupt();
  53   2      
  54   2                      return FALSE;
  55   2              }
C51 COMPILER V7.07   TEA5767                                                               08/22/2008 23:25:42 PAGE 2   

  56   1      }
  57            
  58          
  59          
  60          unsigned char Read_5767(unsigned char * receivedata)
  61          {
  62   1              unsigned char i ;
  63   1      
  64   1          stopInterupt();
  65   1      
  66   1          i2c_5767_start();               //启动条件S(1)
  67   1      
  68   1          i2c_5767_write8bit(TEA5767_rd);        //TEA5767写地址
  69   1      
  70   1          if(i2c_5767_receive_ack())
  71   1          {
  72   2              for(i=0;i<5;i++)
  73   2              {
  74   3                  receivedata[i]=i2c_5767_read8bit();    //读数据
  75   3      
  76   3                  i2c_5767_send_ack();
  77   3              }
  78   2       
  79   2                  i2c_5767_stop();                                             //停止条件P
  80   2      
  81   2                      delay_us(10);
  82   2      
  83   2                      startInterupt();
  84   2      
  85   2                      return TRUE;
  86   2          }
  87   1          else
  88   1          {
  89   2                      i2c_5767_stop(); 
  90   2                      
  91   2                      startInterupt();
  92   2      
  93   2      //              EA=0;
  94   2                         
  95   2                      return FALSE;
  96   2              }
  97   1      
  98   1      }
  99          
 100          void i2c_5767_start()
 101          {
 102   1              i2c_5767_SCL_0; 
 103   1              delay_us(10);
 104   1              i2c_5767_DA_1;
 105   1              delay_us(10);
 106   1              i2c_5767_SCL_1; 
 107   1              delay_us(10);
 108   1              i2c_5767_DA_0;
 109   1              delay_us(10);
 110   1              i2c_5767_SCL_0; 
 111   1      }
 112          void i2c_5767_stop()
 113          {
 114   1              i2c_5767_SCL_0; 
 115   1              delay_us(10);
 116   1              i2c_5767_DA_0;
 117   1              delay_us(10);
C51 COMPILER V7.07   TEA5767                                                               08/22/2008 23:25:42 PAGE 3   

 118   1              i2c_5767_SCL_1; 
 119   1              delay_us(10);
 120   1              i2c_5767_DA_1;
 121   1      }
 122          
 123          void i2c_5767_write8bit(unsigned char dat)
 124          {
 125   1          unsigned char i;
 126   1              i2c_5767_SCL_0;
 127   1          for(i=0;i<8;i++)
 128   1          {
 129   2               if(dat&0x80)
 130   2                  i2c_5767_DA_1;
 131   2               else
 132   2                  i2c_5767_DA_0;
 133   2               dat<<=1;
 134   2               delay_us(10);
 135   2               i2c_5767_SCL_1;
 136   2                       delay_us(10);
 137   2               i2c_5767_SCL_0;
 138   2              }
 139   1      }
 140          
 141          unsigned char  i2c_5767_read8bit(void)
 142          {
 143   1              unsigned char tmp,i;
 144   1      
 145   1              tmp = 0;
 146   1      
 147   1              for (i = 0; i < 8; i++)
 148   1              {
 149   2                      i2c_5767_SCL_0;
 150   2                      i2c_5767_DA_1;
 151   2                      delay_us(10);
 152   2                      i2c_5767_SCL_1;
 153   2                      delay_us(10);
 154   2      
 155   2                      if ( i2c_5767_DA_receive )
 156   2                              tmp++;
 157   2      
 158   2                      i2c_5767_SCL_0;
 159   2      
 160   2                      if (i != 7)
 161   2                              tmp <<=1;
 162   2              }
 163   1              return tmp;
 164   1      }
 165          
 166          unsigned char i2c_5767_receive_ack()
 167          {
 168   1              unsigned char tmp =0;
 169   1              i2c_5767_SCL_0;
 170   1              i2c_5767_DA_1;
 171   1              delay_us(10);
 172   1              i2c_5767_SCL_1;
 173   1              while ((i2c_5767_DA_receive)&&(tmp<255))
 174   1              {
 175   2                      tmp++;
 176   2              }
 177   1              i2c_5767_SCL_0;
 178   1      
 179   1              if (tmp == 255)
C51 COMPILER V7.07   TEA5767                                                               08/22/2008 23:25:42 PAGE 4   

 180   1                 return FALSE;
 181   1              else return TRUE;
 182   1      }
 183          
 184          
 185          void i2c_5767_send_ack(void)
 186          {
 187   1              i2c_5767_SCL_0;
 188   1              i2c_5767_DA_0;
 189   1              delay_us(10);
 190   1              i2c_5767_SCL_1;
 191   1              i2c_5767_DA_0;
 192   1              delay_us(10);
 193   1              i2c_5767_SCL_0;
 194   1              delay_us(10);
 195   1      }
 196          
 197          
 198          //由PLL计算频率
 199          unsigned long PLL_2_Freq(unsigned int pll)              
 200          {
 201   1          unsigned long frequency;
 202   1          unsigned char hlsi;
 203   1          unsigned int npll=pll;
 204   1      //    npll=pll;
 205   1          hlsi=0;//WriteData[2]&0x10;
 206   1          if (hlsi)
 207   1              frequency=(unsigned long)((float)npll*(float)8.192-225);    //频率单位:KHz
 208   1          else
 209   1              frequency=(unsigned long)((float)npll*(float)8.192+225);    //频率单位:KHz
 210   1          return (frequency+50);
 211   1      }
 212          //由频率计算PLL
 213          //Freq       0.1M
 214          unsigned int Freq_2_PLL(unsigned long Freq)     //      955,2d6e
 215          {
 216   1          unsigned char hlsi;
 217   1          unsigned int pll=0;
 218   1          hlsi=0;//WriteData[2]&0x10;
 219   1          if (hlsi)
 220   1              pll=(unsigned int)(((float)Freq+225)*4/32.768);    //频率单位:k
 221   1          else
 222   1              pll=(unsigned int)(((float)Freq-225)*4/32.768);    //频率单位:k
 223   1          return pll;
 224   1      }
 225          
 226          void Search_up(unsigned long freq)
 227          {
 228   1        unsigned char Data[5];
 229   1        
 230   1        unsigned int pll;
 231   1      
 232   1        pll =  Freq_2_PLL(freq);      
 233   1          
 234   1        Data[0] = ((pll>>8)&0x003F)|0x40 ;
 235   1        
 236   1        Data[1] = pll&0x00FF;
 237   1        
 238   1        Data[2] = 0xC0;   //向上搜索
 239   1        
 240   1        Data[3] = 0x90;
 241   1        Data[4] = 0x00;       
C51 COMPILER V7.07   TEA5767                                                               08/22/2008 23:25:42 PAGE 5   

 242   1      
 243   1        Write_5767(Data);
 244   1        
 245   1        
 246   1      }
 247          void Search_down(unsigned long freq)
 248          {
 249   1        unsigned char Data[5];
 250   1        
 251   1        unsigned int pll;
 252   1      
 253   1        pll =  Freq_2_PLL(freq);      
 254   1          
 255   1        Data[0] = ((pll>>8)&0x003F)|0x40 ;
 256   1        
 257   1        Data[1] = pll&0x00FF;
 258   1        
 259   1        Data[2] = 0x40;   //向下搜索
 260   1        
 261   1        Data[3] = 0x90;
 262   1        Data[4] = 0x00;       
 263   1      
 264   1        Write_5767(Data);
 265   1      
 266   1        
 267   1      }
 268          
 269          void Set_Freq(unsigned long freq)
 270          {
 271   1        unsigned char Data[5];
 272   1        
 273   1        unsigned int pll;
 274   1      
 275   1        pll =  Freq_2_PLL(freq);      
 276   1        
 277   1        Data[0] = (pll>>8)&0x003F ;
 278   1        
 279   1        Data[1] = pll&0x00FF;
 280   1        
 281   1        Data[2] = 0x40;
 282   1        
 283   1        Data[3] = 0x90;
 284   1        Data[4] = 0x00;       
 285   1      
 286   1        Write_5767(Data);
 287   1      
 288   1      }
 289          
 290          void Set_Mute(unsigned long freq)
 291          {
 292   1        unsigned char Data[5];
 293   1        
 294   1        unsigned int pll;
 295   1      
 296   1        pll =  Freq_2_PLL(freq);      
 297   1        
 298   1        Data[0] = ((pll>>8)&0x003F)|0x80 ;
 299   1        
 300   1        Data[1] = pll&0x00FF;
 301   1        
 302   1        Data[2] = 0x40;
 303   1        
C51 COMPILER V7.07   TEA5767                                                               08/22/2008 23:25:42 PAGE 6   

 304   1        Data[3] = 0x90;
 305   1        Data[4] = 0x00;       
 306   1      
 307   1        Write_5767(Data);
 308   1      
 309   1      }
 310          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    733    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      43
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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