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

📄 tv_tuner.lst

📁 mtv512mg + mx88v462 液晶电视驱动C完整程序
💻 LST
字号:
C51 COMPILER V7.50   TV_TUNER                                                              12/14/2006 10:36:46 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TV_TUNER
OBJECT MODULE PLACED IN .\TV_Tuner.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Source\TV_Tuner.C LARGE DEBUG OBJECTEXTEND PRINT(.\TV_Tuner.lst) OBJECT(
                    -.\TV_Tuner.obj)

line level    source

   1          #include        "..\inc\public2.h"
   2          #include        "..\inc\Tuner_FP_Tab.h"
   3          
   4          BYTE    RegB,RegC,RegE;
   5          
   6          void            I2C_SendStart2();
   7          void            I2C_SendStop2();
   8          void            I2C_SendByte2(BYTE);
   9          BYTE            I2C_GetByte2(bit);
  10          
  11          long int        _Fp = Fp_VL_Start;
  12          BYTE            _SIF = 0;
  13          BYTE            _CS = 0;
  14          BYTE            _FINE = 0x80;
  15          
  16          extern  void    I2C_Delay(unsigned char);
  17          
  18          void    TV_Init()
  19          {
  20   1              #ifdef  DEMOD_WRID
  21   1                      Set_SIF(2);
  22   1                      Set_DEMOD();
  23   1              #endif
  24   1              
  25   1              Set_Fosc(Fp_VL_Start,_FINE);
  26   1      }
  27          
  28          unsigned int    Set_VL()
  29          {
  30   1              Set_Fosc(Fp_VL_Start,0x80);
  31   1              return  Fp_VL_Start;    
  32   1      }
  33          
  34          unsigned int    Set_VH()
  35          {
  36   1              Set_Fosc(Fp_VH_Start,0x80);
  37   1              return  Fp_VH_Start;
  38   1      }
  39          
  40          unsigned int    Set_UHF()
  41          {
  42   1              Set_Fosc(Fp_UHF_Start,0x80);
  43   1              return  Fp_UHF_Start;
  44   1      }
  45          
  46          void    Set_Fosc( unsigned int fp_p, unsigned char fine)
  47          {
  48   1              BYTE    i, tmp;
  49   1      
  50   1              if ( (fp_p >= Fp_VL_Start) && (fp_p < Fp_VH_Start) )
  51   1                      tmp = PLL_CTR2_VL;                                      // V-L
  52   1              else if ( (fp_p >= Fp_VH_Start) && (fp_p < Fp_UHF_Start) )
  53   1                      tmp = PLL_CTR2_VH;                                      // V-H
  54   1              else if ( fp_p <= Fp_UHF_End )
C51 COMPILER V7.50   TV_TUNER                                                              12/14/2006 10:36:46 PAGE 2   

  55   1                      tmp = PLL_CTR2_UHF;                                     // UHF
  56   1              else
  57   1              {
  58   2                      tmp = PLL_CTR2_VL;
  59   2                      fp_p = Fp_VL_Start;
  60   2              }
  61   1      
  62   1          I2C_SendStart2();
  63   1          I2C_SendByte2(PLL_WRID);                            //Write W_ID
  64   1              if ( fp_p >= _Fp )
  65   1              {
  66   2                  I2C_SendByte2((Fp_Table[fp_p]+Fif+fine-0x80)/256);
  67   2                  I2C_SendByte2((Fp_Table[fp_p]+Fif+fine-0x80)%256);
  68   2                  I2C_SendByte2(PLL_CTR1);
  69   2                  I2C_SendByte2(tmp);                                 //VL VH UH select
  70   2              }
  71   1              else
  72   1              {
  73   2                  I2C_SendByte2(PLL_CTR1);
  74   2                  I2C_SendByte2(tmp);                                 //VL VH UH select
  75   2                  I2C_SendByte2((Fp_Table[fp_p]+Fif+fine-0x80)/256);
  76   2                  I2C_SendByte2((Fp_Table[fp_p]+Fif+fine-0x80)%256);
  77   2              }       
  78   1              I2C_SendStop2();                                                //Stop 
  79   1                      
  80   1              _Fp = fp_p;
  81   1              _FINE = fine;
  82   1                      
  83   1              for(i=0;i<200;i++)
  84   1              {
  85   2                      I2C_SendStart2();
  86   2                      I2C_SendByte2(PLL_WRID|0x1);            //Write W_ID
  87   2                      tmp = I2C_GetByte2(1);
  88   2                      I2C_SendStop2();
  89   2                      if ( (tmp&0xC0) == 0x40 )                       // Locked 
  90   2                              break;
  91   2              }
  92   1      
  93   1              for(i=0;i<200;i++);                                             // Delay
  94   1              
  95   1              #ifdef  DEMOD_WRID
  96   1                      if ( TV_If_AFC() )
  97   1                              for(i=0;i<250;i++);                             // Delay
  98   1              #endif
  99   1      }
 100          
 101          #ifdef  DEMOD_WRID
 102          
 103                  void    Set_CS(BYTE     cs)
 104                  {
 105   1                      _CS = cs;
 106   1              }
 107          
 108                  void    Set_SIF(BYTE sif)
 109                  {
 110   1                      _SIF = sif;
 111   1              }
 112                  
 113                  void    Set_DEMOD()
 114                  {
 115   1                      BYTE    sif;
 116   1      
C51 COMPILER V7.50   TV_TUNER                                                              12/14/2006 10:36:46 PAGE 3   

 117   1                      switch (_CS)
 118   1                      {
 119   2                              case    NTSC    :
 120   2                              case    NTSC443 :
 121   2                              case    NTSCN   :
 122   2                                      _CS     = NTSC;
 123   2                                      break;
 124   2                              default                 :
 125   2                                      _CS = PAL;
 126   2                                      break;
 127   2                      }
 128   1              
 129   1                      switch ( _SIF )
 130   1                      {
 131   2                              case    M:
 132   2                                      sif = 0;
 133   2                                      break;
 134   2                              case    BG:
 135   2                                      sif = 1;
 136   2                                      break;
 137   2                              case    DK:
 138   2                                      sif = 3;
 139   2                                      break;
 140   2                              case    I:
 141   2                                      sif = 2;
 142   2                                      break;
 143   2                              case    L:
 144   2                                      _CS = SECAM;
 145   2                                      sif = 3;
 146   2                                      break;
 147   2                      }
 148   1      
 149   1                      switch (_CS)
 150   1                      {
 151   2                              case    NTSC:
 152   2                                      RegB = 0x16;
 153   2                                      RegC = 0x30;                                    // -16dB takeover
 154   2                                      RegE = 0x00;
 155   2                                      break;
 156   2                              case    PAL:
 157   2                                      RegB = 0xD6;//0xD6;
 158   2                                      RegC = 0x70;//60                                // -16dB takeover
 159   2                                      RegE = 0x00;//0x40;
 160   2                                      break;
 161   2                              case    SECAM:                                          // SECAM L
 162   2                                      RegB = 0x06;//0x46;
 163   2                                      RegC = 0x70;//0x50;                             // 0 dB takeover
 164   2                                      RegE = 0x00;//40
 165   2                                      break;
 166   2                      }
 167   1                      
 168   1      //              RegB = RegB | 0x01;                                             // Sound trap bypass
 169   1              
 170   1                      #ifdef  PIF_38_9
 171   1                              RegE = RegE | 0x08 | sif;                       // 08 for VIF38.9MHz
 172   1                      #endif
 173   1      
 174   1                      #ifdef  PIF_38_0
                                      RegE = RegE | 0x0C | sif;                       // 0C for VIF38.0MHz
                              #endif
 177   1                      
 178   1      /*
C51 COMPILER V7.50   TV_TUNER                                                              12/14/2006 10:36:46 PAGE 4   

 179   1                      RegB = 0xC6;//0x16;
 180   1                      RegC = 0x60;//0x70;
 181   1                      RegE = 0x89;
 182   1      */              
 183   1                      I2C_SendStart2();
 184   1                      I2C_SendByte2(DEMOD_WRID);                              // Write W_ID
 185   1                      I2C_SendByte2(0x0);
 186   1              
 187   1                      I2C_SendByte2(RegB);
 188   1                      I2C_SendByte2(RegC);
 189   1                      I2C_SendByte2(RegE);
 190   1              
 191   1                      I2C_SendStop2();        
 192   1              }
 193                  
 194                  bit             TV_If_AFC()
 195                  {
 196   1                      BYTE    d_status;
 197   1                      
 198   1                      I2C_SendStart2();
 199   1                      I2C_SendByte2(DEMOD_WRID|0x01);                 //Write W_ID
 200   1                      d_status = I2C_GetByte2(1);
 201   1                      I2C_SendStop2();
 202   1              
 203   1                      if ( (d_status&0xC0) == 0xC0 )
 204   1                              return  1;
 205   1                      else
 206   1                              return  0;
 207   1              }
 208          
 209                  bit             TV_If_Locked()
 210                  {
 211   1                      BYTE    d_status;
 212   1                      
 213   1                      I2C_SendStart2();
 214   1                      I2C_SendByte2(DEMOD_WRID|0x01);                 //Read W_ID
 215   1                      d_status = I2C_GetByte2(1)&0xDF;
 216   1                      I2C_SendStop2();
 217   1              
 218   1                      if ( (d_status==0xC4) ||(d_status==0xC2) || (d_status==0xC0) || (d_status==0xDE) || (d_status==0xDC) )
 219   1                              return  1;
 220   1                      else
 221   1                              return  0;
 222   1              }
 223          #endif
 224          
 225          void    I2C_SendStart2(void)
 226          {
 227   1              I2C_SDA2 = 1;
 228   1              I2C_Delay(2);
 229   1              I2C_SCL2 = 1;
 230   1              I2C_Delay(2);
 231   1                      
 232   1              I2C_SDA2 = 0;
 233   1              I2C_Delay(2);   
 234   1              I2C_SCL2 = 0;
 235   1              I2C_Delay(2);
 236   1      }
 237          
 238          void    I2C_SendStop2(void)
 239          {
 240   1              I2C_SDA2 = 0;
C51 COMPILER V7.50   TV_TUNER                                                              12/14/2006 10:36:46 PAGE 5   

 241   1              I2C_Delay(2);   
 242   1              I2C_SCL2 = 1;           
 243   1              I2C_Delay(2);
 244   1              I2C_SDA2 = 1;           
 245   1              I2C_Delay(2);
 246   1      }
 247          
 248          void    I2C_SendByte2(BYTE val)
 249          {
 250   1              BYTE i;
 251   1      
 252   1          for (i=0; i<8; i++)
 253   1          {
 254   2              I2C_SDA2 = (bit)(val & 0X80);
 255   2              I2C_Delay(2);
 256   2                      I2C_SCL2 = 1;
 257   2                      val <<= 1;
 258   2                      I2C_Delay(2);
 259   2                      I2C_SCL2 = 0;
 260   2                      I2C_Delay(2);
 261   2          }
 262   1      
 263   1              I2C_SDA2 = 1;
 264   1              I2C_Delay(2);
 265   1              I2C_SCL2 = 1;
 266   1              I2C_Delay(2);
 267   1              I2C_SCL2 = 0;
 268   1              I2C_Delay(2);
 269   1      }
 270          
 271          BYTE    I2C_GetByte2(bit ACK_NACK)
 272          {
 273   1          BYTE i;
 274   1          BYTE rd_byte;
 275   1      
 276   1          rd_byte = 0;
 277   1      
 278   1          for(i=0; i<8; i++)
 279   1          {
 280   2                      I2C_SCL2 = 1;
 281   2              rd_byte <<= 1;
 282   2                      I2C_Delay(2);
 283   2                      rd_byte |= I2C_SDA2;
 284   2                      I2C_SCL2 = 0;
 285   2                      I2C_Delay(2);
 286   2          }
 287   1      
 288   1              I2C_SDA2 = ACK_NACK;
 289   1              I2C_Delay(2);
 290   1              I2C_SCL2 = 1;
 291   1              I2C_Delay(2);
 292   1              I2C_SCL2 = 0;
 293   1              I2C_Delay(2);
 294   1              I2C_SDA2 = 1;
 295   1              I2C_Delay(2);
 296   1              
 297   1          return(rd_byte);
 298   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1000    ----
C51 COMPILER V7.50   TV_TUNER                                                              12/14/2006 10:36:46 PAGE 6   

   CONSTANT SIZE    =    806    ----
   XDATA SIZE       =     10      12
   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 + -