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

📄 tuner.lst

📁 用TEA7567做的调频收音机,本人经测试通过的
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   TUNER                                                                 03/16/2009 19:12:51 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TUNER
OBJECT MODULE PLACED IN tuner.OBJ
COMPILER INVOKED BY: G:\Keil\C51\BIN\C51.EXE tuner.c OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //#include <intrins.h>
   2          #include "global.h"
   3          #include "tuner.h"
   4          
   5          void Delay10us(UINT16 twDelay)
   6          {
   7   1       UINT16 i;
   8   1       for( i=0;i<twDelay;i++ )
   9   1       {
  10   2       //     _nop_();
  11   2       //     _nop_();
  12   2       WatchDog;
  13   2       }
  14   1      }       
  15          
  16          
  17          
  18          /****************************************************************************/
  19          /*    Command Delay                                                         */
  20          /****************************************************************************/
  21          void CMD_Delay(BYTE i)
  22          {
  23   1          for (; i!=0; i--) ;
  24   1      }  
  25          
  26          void CMD_CheckHighSCL()
  27          {
  28   1          I2cSCL = 1;
  29   1      }
  30          
  31          void CMD_SendStart()
  32          {
  33   1          I2cSCL = 1;
  34   1          CMD_Delay(CMD_DELAY);
  35   1          I2cSDA = 0;
  36   1          CMD_Delay(CMD_DELAY);
  37   1          I2cSCL = 0;
  38   1          CMD_Delay(CMD_DELAY);
  39   1      }
  40          
  41          void CMD_SendStop()
  42          {
  43   1          I2cSDA = 0;
  44   1          CMD_CheckHighSCL();
  45   1          CMD_Delay(CMD_DELAY);
  46   1          I2cSDA = 1;
  47   1          CMD_Delay(CMD_DELAY);
  48   1      }
  49          
  50          BYTE  CMD_SendByte(BYTE bByte)
  51          {
  52   1          BYTE i;
  53   1          BIT  Acknowledge=1;
  54   1          for(i=0;i<8;i++)
  55   1             {
C51 COMPILER V7.06   TUNER                                                                 03/16/2009 19:12:51 PAGE 2   

  56   2               if(bByte&0x80)
  57   2                  I2cSDA=1;
  58   2               else
  59   2                  I2cSDA=0;
  60   2               bByte<<=1;
  61   2               CMD_Delay(CMD_DELAY);
  62   2               CMD_CheckHighSCL();
  63   2               I2cSCL  =0;
  64   2             }
  65   1          I2cSDA=1;
  66   1          I2cSCL=1;
  67   1          CMD_Delay(CMD_DELAY);
  68   1          if (I2cSDA) Acknowledge=0;
  69   1          I2cSCL=0;
  70   1          CMD_Delay(CMD_DELAY);
  71   1          return Acknowledge;
  72   1      }
  73          
  74          BYTE CMD_GetByte(BYTE Acknowledge)
  75          {
  76   1          BYTE i,bByte=0, bMask=0x80;
  77   1          for(i=0;i<8;i++)
  78   1             {
  79   2                CMD_Delay(CMD_DELAY);
  80   2                I2cSCL=1;
  81   2                      if(I2cSDA)bByte|=bMask;
  82   2                      bMask >>= 1;
  83   2                      I2cSCL  =0;
  84   2             }
  85   1          I2cSDA =(Acknowledge)?1:0; 
  86   1          CMD_CheckHighSCL();
  87   1          CMD_Delay(CMD_DELAY);
  88   1          I2cSCL  =0;                
  89   1          I2cSDA  =1;
  90   1          CMD_Delay(CMD_DELAY);
  91   1          return bByte;
  92   1      }
  93          
  94          //////////////////////////////////////////////
  95          
  96          void Tuner_I2cSendData()
  97          {
  98   1          BYTE i;
  99   1              EA=0;
 100   1          CMD_SendStart();
 101   1          if (CMD_SendByte(0x0c0))                    //chip addr of write data to driver
 102   1          {
 103   2              for (i=0; i<5; i++)
 104   2              {
 105   3                 if (!CMD_SendByte(WriteDataWord[i]))    //0 err
 106   3                  {
 107   4                      break;
 108   4                  }
 109   3              }
 110   2          }
 111   1          CMD_SendStop();         //???
 112   1          EA=1;
 113   1              CMD_Delay(CMD_DELAY);
 114   1          CMD_Delay(CMD_DELAY);       
 115   1          
 116   1      }
 117          
C51 COMPILER V7.06   TUNER                                                                 03/16/2009 19:12:51 PAGE 3   

 118          void Tuner_I2cReadData()
 119          {
 120   1      
 121   1         BYTE i;
 122   1         EA=0;       
 123   1          CMD_SendStart();
 124   1          if (CMD_SendByte(0x0c1))                                        //chip addr of read data 
 125   1             {
 126   2              for (i=0;i<5;i++)
 127   2                  ReadDataWord[i] =(i==4)? CMD_GetByte(1):CMD_GetByte(0); //the last byte with ACK.
 128   2              CMD_SendStop();
 129   2             }
 130   1          else CMD_SendStop();
 131   1              EA=1;
 132   1      }
 133          
 134          // BYTE tbRead1;                      //for test only
 135          // BYTE tbRead2;
 136          // BYTE tbRead3;
 137          // BYTE tbRead4;
 138          
 139           BIT Stereo=False;
 140           BIT Ready=False;           
 141          
 142          static void AssembleFrequencyWord(void)         
 143          {
 144   1         UINT16 twPLL =0;                                     //Dec 
 145   1         UINT32 tdwPresetVCO  =gdwPresetVCO;                  //Khz
 146   1         BYTE tbTmp1;
 147   1         BYTE tbTmp2;
 148   1                        
 149   1        // calcu1ate frequency dataword bits from given station frequency BCD:  
 150   1          if(FlagHighInjection)
 151   1           twPLL =(unsigned int)((float)((tdwPresetVCO +225)*4)/(float)REFERENCE_FREQ);
 152   1          else
 153   1           twPLL =(unsigned int)((float)((tdwPresetVCO -225)*4)/(float)REFERENCE_FREQ);
 154   1        //convert BCD to Hex.
 155   1           tbTmp1 =(unsigned char)(twPLL%256);             //6789=Hex1A85 -->133=Hex85
 156   1           tbTmp2 =(unsigned char)(twPLL/256);             //             -->26=Hex1A  
 157   1          
 158   1           WriteDataWord[0]=tbTmp2;                    //high block                            
 159   1           WriteDataWord[1]=tbTmp1;  
 160   1             
 161   1      } 
 162          
 163          //BYTE Write1;
 164          
 165          static void AssembleData(void)
 166          {
 167   1        WriteDataWord[3] = 0x11;                      //32k /p1 found.        
 168   1        WriteDataWord[4] = 0x00;              //70us去加重电路
 169   1      
 170   1        
 171   1      
 172   1        if (FlagSearch )                                                       // search mode                 
 173   1        {                              
 174   2          WriteDataWord[0] |= 0x40;               // Set to 1 for search start; other =0.
 175   2      
 176   2              // Set the bits of BYTE3 of search 
 177   2          if(FlagSearchtUp) WriteDataWord[2] |= 0x80;                                         
 178   2              else  WriteDataWord[2] &= 0x7f;                                                                 //0111 1111
 179   2      
C51 COMPILER V7.06   TUNER                                                                 03/16/2009 19:12:51 PAGE 4   

 180   2              if ((FlagLevel & 0x02) == 0x02) WriteDataWord[2] |=0x40 ;       
 181   2              else WriteDataWord[2] &=0x0bf;                                                                  //1011 1111     
 182   2              
 183   2              if ((FlagLevel & 0x01) == 0x01) WriteDataWord[2] |=0x20;        
 184   2              else WriteDataWord[2] &=0x0df;                                                                  //1101 1111      
 185   2      //      Write1= WriteDataWord[0]   ;
 186   2      
 187   2         
 188   2        }
 189   1        /////PreSet mode
 190   1        else
 191   1        {     
 192   2            AssembleFrequencyWord();            
 193   2                WriteDataWord[0] &= 0x0bf;            // Set to 0 for Preset mode. 1011,1111
 194   2        }
 195   1          if(FlagMute) WriteDataWord[0] |= 0x80;      
 196   1        else  WriteDataWord[0] &= 0x7f        ;                                   //0111 1111
 197   1       //set the public data bit of BYTE3 
 198   1          if(FlagHighInjection)   WriteDataWord[2] |= 0x10 ;                
 199   1              else  WriteDataWord[2] &= 0x0ef;                                                //1110 1111
 200   1      
 201   1              if(FlagMono) WriteDataWord[2] |= 0x08   ;
 202   1              else  WriteDataWord[2] &= 0x0f7 ;                               //1111 0111
 203   1      
 204   1       //set the public data bit of BYTE4 
 205   1              if(FlagSWPORT2) WriteDataWord[3] |= 0x80;       
 206   1              else  WriteDataWord[3] &= 0x7f  ;                                   //0111 1111
 207   1      
 208   1          if(FlagSoftMute) WriteDataWord[3] |= 0x08;  
 209   1              else  WriteDataWord[3] &= 0xf7  ;                                   //1111 0111
 210   1      
 211   1          if(FlagSWPORT1) WriteDataWord[3] |= 0x01;   
 212   1              else  WriteDataWord[3] &= 0xfe  ;                                   //1111 1110
 213   1      
 214   1      
 215   1        
 216   1      
 217   1      }
 218          /*
 219          ///****************test
 220           void DisAssembleFrequencyWord(void)            
 221          {
 222             UINT16 twPLL =0;                                           //Dec 
 223             UINT32 tdwtestVCO ;                    //Khz
 224          
 225             BYTE tbTmp1=ReadDataWord[1];
 226             BYTE tbTmp2=ReadDataWord[0];
 227             tbTmp2&=0x3f;
 228          
 229          
 230             twPLL=65535;
 231                    

⌨️ 快捷键说明

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