资讯详情

I2C总线高频头控制程序(PLL芯片为TSA5522系列)【转载】

I2C总线高频头控制程序(PLL芯片为TSA5522系列【转载】

/*I2C总线高频头控制程序(PLL芯片为TSA5522系列)*/ //--------------------------------------------------------------------------// //公开源程序// //(c)Copyright2001-2003xuwenjun/ //AllRightsReserved// //V1.00// //--------------------------------------------------------------------------// //标 题:I2C总线高频头控制程序(PLL芯片为TSA5522系列)// //文件名:xwj_fi1256.c// //版 本:V1.00// ///修改人:徐文军E-mail:xuwenjun@21cn.com// //日 期:06-02-26首次公开// //描 述:I2C总线高频头控制程序(PLL芯片为SA5522系列)                       // //声 明:                                                                   // //        以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处. // //        如用于商业用途请与作者联系.    E-mail:xuwenjun@21cn.com           // //        有问题请mailto xuwenjun@21cn.com   欢迎与我交流!                  // //--------------------------------------------------------------------------// //老版本: 无                             老版本文件名:                      // //创建人: 徐文军                         E-mail:xuwenjun@21cn.com           // //日 期: 06-02-26                                                          // //描 述:                                                                   // //--------------------------------------------------------------------------//                                                                                                  /* 频率单位为KHz     */ #define FUENCY 38900                                                        /* 中频频率      电视机的图像中频信号是38MHZ.  音频的中频信号是6.5MHZ.      */ #define PLLdataH(f) ((f+FUENCY)*16/1000/256)        /* 频率数据高 第1字节*/ #define PLLdataL(f) ((f+FUENCY)*16/1000%256)        /* 频率数据低 第2字节*/ #define PLLCON1 0x8e                                                        /* 控制字1    第3字节*/                                                                                                 /* 控制字2    第4字节*/ #define PLLCON2(f) (((f)<(168000))?(0xa0):(((f)<(450000))?(0x90):(0x30))) #define PLLdata3(fchan) PLLdataH (fchan),PLLdataL (fchan),PLLCON2 (fchan) unsigned  char  code uc dataTab[][3]= {         PLL data3(49750),         /* 频道DS1 (VL)*/         PLL data3(57750),         /* 频道DS2*/         PLL data3(65750),         /* 频道DS3 */         PLL data3(77250),         /* 频道DS4 */         PLL data3(85250),         /* 频道DS5 */         PLL data3(112250),         /* 频道Z1 */         PLL data3(120250),         /* 频道Z2 */         PLL data3(128250),         /* 频道Z3 */         PLL data3(136250),         /* 频道Z4 */         PLL data3(144250),         /* 频道Z5 */         PLL data3(152250),         /* 频道Z6 */         PLL data3(160250),         /* 频道Z7 */         PLL data3(168250),         /* 频道DS6 (VH)*/         PLL data3(176250),         /* 频道DS7 */         PLL data3(184250),         /* 频道DS8 */         PLL data3(192250),         /* 频道DS9 */         PLL data3(200250),         /* 频道DS10 */         PLL data3(208250),         /* 频道DS11 */         PLL data3(216250),         /* 频道DS12 */         PLL data3(224250),         /* 频道Z8 */         PLL data3(232250),         /* 频道Z9 */         PLL data3(240250),         /* 频道Z10 */         PLL data3(248250),         /* 频道Z11 */         PLL data3(256250),         /* 频道Z12 */         PLL data3(264250),         /* 频道Z13 */         PLL data3(272250),         /* 频道Z14 */         PLL data3(280250),         /* 频道Z15 */         PLL data3(288250),         /* 频道Z16 */         PLL data3(296250),         /* 频道Z17 */         PLL data3(304250),         /* 频道Z18 */         PLL data3(312250),         /* 频道Z19 */         PLL data3(320250),         /* 频道Z20 */         PLL data3(328250),         /* 频道Z21 */         PLL data3(336250),         /* 频道Z22 */         PLL data3(344250),         /* 频道Z23 */         PLL data3(352250),         /* 频道Z24 */         PLL data3(360250),         /* 频道Z25 */         PLL data3(368250),         /* 频道Z26 */         PLL data3(376250),         /* 频道Z27 */         PLL data3(384250),         /* 频道Z28 */         PLL data3(392250),         /* 频道Z29 */         PLL data3(400250),         /* 频道Z30 */         PLL data3(408250),         /* 频道Z31 */         PLL data3(416250),         /* 频道Z32 */         PLL data3(424250),         /* 频道Z33 */         PLL data3(432250),         /* 频道Z34 */         PLL data3(440250),         /* 频道Z35 */         PLL data3(448250),         /* 频道Z36 */         PLL data3(456250),         /* 频道Z37 (UHF)*/         PLL data3(464250),         /* 频道Z38 */         PLL data3(471250),         /* 频道DS13 */         PLL data3(479250),         /* 频道DS14 */         PLL data3(487250),         /* 频道DS15 */         PLL data3(495250),         /* 频道DS16 */         PLL data3(503250),         /* 频道DS17 */         PLL data3(511250),         /* 频道DS18 */         PLL data3(519250),         /* 频道DS19 */         PLL data3(527250),         /* 频道DS20 */         PLL data3(535250),         /* 频道DS21 */         PLL data3(543250),         /* 频道DS22 */         PLL data3(551250),         /* 频道DS23 */         PLL data3(559250),         /* 频道DS24 */         PLL data3(607250),         /* 频道DS25 */         PLL data3(615250),         /* 频道DS26 */         PLL data3(623250),         /* 频道DS27 */         PLL data3(631250),         /* 频道DS28 */         PLL data3(639250),         /* 频道DS29 */         PLL data3(647250),         /* 频道DS30 */         PLL data3(655250),         /* 频道DS31 */         PLL data3(663250),         /* 频道DS32 */         PLL data3(671250),         /* 频道DS33 */         PLL data3(679250),         /* 频道DS34 */         PLL data3(687250),         /* 频道DS35 */         PLL data3(695250),         /* 频道DS36 */         PLL data3(703250),         /* 频道DS37 */         PLL data3(711250),         /* 频道DS38 */         PLL data3(719250),         /* 频道DS39 */         PLL data3(727250),         /* 频道DS40 */         PLL data3(735250),         /* 频道DS41 */         PLL data3(743250),         /* 频道DS42 */         PLL data3(751250),         /* 频道DS43 */         PLL data3(759250),         /* 频道DS44 */         PLL data3(767250),         /* 频道DS45 */         PLL data3(775250),         /* 频道DS46 */         PLL data3(783250),         /* 频道DS47 */         PLL data3(791250),         /* 频道DS48 */         PLL data3(799250),         /* 频道DS49 */         PLL data3(807250),         /* 频道DS50 */         PLL data3(815250),         /* 频道DS51 */         PLL data3(823250),         /* 频道DS52 */         PLL data3(831250),         /* 频道DS53 */         PLL data3(839250),         /* 频道DS54 */         PLL data3(847250),         /* 频道DS55 */         PLL data3(855250),         /* 频道DS56 */         PLL data3(863250),         /* 频道DS57 */         PLL data3(90100-6500), /* 经济台 (调频收音)*/         PLL data3(91000-6500), /* 经济台 */         PLL data3(91800-6500), /* 交通台 */         PLL data3(97500-6500), /* 文艺台 */         PLL data3(100300-6500), /* 交通台 */         PLL data3(103200-6500), /* 新闻台 */         PLL data3(105000-6500), /* 星沙之声 */         PLL data3(106500-6500), /* 音乐台 */ };                                    /*  有关I2C变量   */ #define AddPllWr 0xc2                                 /*TSA5522写地址*/ #define AddPllRd 0xc3                                 /*TSA5522读地址*/ sbit         SDA   = P0^4;                                   /*串行数据-----------P0.4*/ sbit         SCL   = P0^5;                                   /*串行时钟-----------P0.5*/                                   /*  I2C相关函数   */ void Start( void);  void Stop( void);  void SendACK( void);  void SendNoACK( void);  unsigned  char SendByte( unsigned  char d);  unsigned  char ReadByte( void);  void SetChan( unsigned  char chan);  unsigned  char ReadChan( void);  /*--------选择频道--------------------------------------------*/ void SetChan( unsigned  char chan) {         Start();                                                  /* 发送I2C 总线起始条件  */         SendByte(AddPllWr);                           /* 发送被控器总线写地址    */         SendByte(uc dataTab[chan][0]);          /* 发送频率数据高 第1字节*/         SendByte(uc dataTab[chan][1]);          /* 发送频率数据低 第2字节*/         SendByte(PLLCON1);                                  /* 发送控制字1    第3字节*/         SendByte(uc dataTab[chan][2]);          /* 发送控制字1    第4字节*/         Stop();                                                  /*发送I2C 总线停止条件   */ } /*-----------读状态----------------------------------------------*/ unsigned  char ReadChan( void) {          unsigned  char i;          Start();                                                  /* 发送I2C 总线起始条件*/         SendByte(AddPllRd);                          /*发送被控器总线读地址*/         i = ReadByte();          SendNoACK();                                          /*最后一个字节,发送非应答信号*/         Stop();                                                  /*发送I2C 总线停止条件*/          return (i);  } /*------------字节数据传送子程序发送一个字节数据或地址给被控器---------------*/ unsigned  char SendByte( unsigned  char a) {          unsigned  char i,j;           for(i = 0;i < 8;i++)         {                 if((a & 0x80) == 0)                         SDA = 0;                   else                         SDA = 1;                  _nop_();                          SCL = 1;  /*置时钟线为高通知被控器开始*/                 _nop_();_nop_(); /*保证时钟高周期大于4 us*/                 SCL = 0;                  _nop_();                  a = a << 1;          }         _nop_();          SDA = 1;          _nop_();                  SCL = 1;          j = 0;           while (SDA == 0)                  if ((++j) == 0) {SCL = 0; return (1);}  /*检测256次还未收到应答,返回1*/         _nop_();          SCL = 0;           return (0);   /*成功,返回0*/ } /*---------------------------------------------------------------------------*/ unsigned  char ReadByte( void)                 /*数据接收子程序从被控器接收一个字节数据*/ {          unsigned  char i;           unsigned  char  bdata Sin;          SDA = 1;           for (i = 0;i < 8;i++)         {                 Sin <<= 1;                  SCL = 0;                  _nop_();                  SCL = 1;                  if(SDA == 1)                         Sin|= 0x01;                   else                         Sin&= 0xfe;                  _nop_();          }          return(Sin);  } /*-----------发送应答位--------------------------------------------------*/ void SendACK() {         SCL = 0;          _nop_();          SDA = 0;          _nop_();          SCL = 1;          _nop_();          SCL = 0;  } /*------------发送非应答位-----------------------------------------------*/ void SendNoACK() {         SCL = 0;          _nop_();          SDA = 1;          _nop_();          SCL = 1;          _nop_();          SCL = 0;  } /*---------------------------------------------------------------------------*/ void Start( void)                 /*START 启动I2C 总线子程序发送I2C 起始条件*/ {         SDA = 1;                                  /* 发送起始条件的数据信号*/         _nop_();          SCL = 1;                                  /*发送起始条件的时钟信号*/         _nop_();          /*起始条件建立时间大于4.7 s*/         SDA = 0;                                  /*发送起始信号*/         _nop_();          /*起始条件定时间大于4 s*/         SCL = 0;                                  /*钳住I2C 总线准备发送或接收数据*/ } /*-----------STOP 停止I2C 总线子程序发送I2C 总线停止条件-------------------*/ void Stop( void) {         SDA = 0;          _nop_();          SCL = 1;          _nop_();          SDA = 1;          _nop_();  }

标签: ds30p1传感器ds30nb传感器ds30c1光电传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台