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

📄 sp3767.lst

📁 T5767收音机IIC协议和控制部分源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SP3767                                                                06/15/2007 16:08:30 PAGE 1   


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

stmt level    source

   1          #include <reg52.h>
   2          #include <stdio.h>
   3          #include <intrins.h>
   4          
   5          #include "SP3767.h"
   6          
   7          #define         NOP()           _nop_()
   8          
   9          
  10          sbit    UpKey = P1 ^ 0;
  11          sbit    DnKey = P1 ^ 1;
  12          sbit    LED = P1 ^ 2;
  13          sbit    SDA = P1 ^ 4;
  14          sbit    SCL = P1 ^ 5;
  15          
  16          
  17          
  18          
  19          
  20          #define HAND    1
  21          //#define HAND
  22          #define NUM 20
  23          unsigned short code FRQ_TAB[] =
  24          {
  25                  880,
  26                  920,
  27                  960,
  28                  1000,
  29                  1040,
  30                  876,
  31                  885,
  32                  897,
  33                  926,
  34                  937,
  35                  966,
  36                  975,
  37                  997,
  38                  1011,
  39                  1017,
  40                  1024,
  41                  1043,
  42                  1058,
  43                  1066,
  44                  1071,
  45                  1079,
  46          };
  47          unsigned char index;
  48          
  49          void DelayMs(unsigned char i)
  50          {
  51   1              unsigned char j;
  52   1              j = 200; 
  53   1              do{
  54   2                      do{
  55   3                              _nop_();
C51 COMPILER V7.06   SP3767                                                                06/15/2007 16:08:30 PAGE 2   

  56   3                              _nop_();
  57   3                              _nop_();
  58   3                              _nop_();
  59   3                              _nop_();
  60   3                              _nop_();
  61   3                              _nop_();
  62   3                              _nop_();
  63   3                              _nop_();
  64   3                              _nop_();
  65   3                      }while(j --);
  66   2              }while(i --);
  67   1      }
  68          
  69          void I2CStart(void)
  70          {/*
  71   1              SDA = 1;
  72   1              SCL = 1;
  73   1              NOP();
  74   1              SDA = 0;
  75   1              NOP();
  76   1              SCL = 0;*/
  77   1              
  78   1              SCL = 1;
  79   1              SDA = 1;
  80   1              SDA = 0;
  81   1              NOP();
  82   1              NOP();
  83   1              NOP();
  84   1              SCL = 0;
  85   1      }
  86          
  87          void I2CStop(void)
  88          {/*
  89   1              SCL = 0;
  90   1              SDA = 0;
  91   1              NOP();
  92   1              SCL = 1;
  93   1              NOP();
  94   1              SDA = 1;
  95   1              EA = 1;*/
  96   1              
  97   1              SCL = 1;
  98   1              SDA = 0;
  99   1              NOP();
 100   1              NOP();
 101   1              NOP();
 102   1              SDA = 1;
 103   1              NOP();
 104   1              NOP();
 105   1              NOP();
 106   1      }
 107          
 108          bit WaitAck(void)
 109          {
 110   1              unsigned char retry = 255;              //因故障接收方无ACK,重试255次
 111   1              SDA = 1;
 112   1              NOP();
 113   1              SCL = 1;
 114   1              NOP();
 115   1      //      m24C01Error = 0x00;
 116   1              while(SDA)
 117   1          {
C51 COMPILER V7.06   SP3767                                                                06/15/2007 16:08:30 PAGE 3   

 118   2                      retry --;
 119   2                      if(!retry)
 120   2                      {
 121   3                              I2CStop();
 122   3      //                      m24C01Error = ERROR;            // 24C01出错
 123   3                              return 0;
 124   3                      }
 125   2              }
 126   1              SCL = 0;
 127   1              return 1;
 128   1      }
 129          
 130          void SendAck(void)
 131          {
 132   1              SDA = 0;
 133   1              NOP();
 134   1              SCL = 1;
 135   1              NOP();
 136   1              SCL = 0;
 137   1      }
 138          
 139          void SendNotAck(void)
 140          {
 141   1              SDA = 1;
 142   1              NOP();
 143   1              SCL = 1;
 144   1              NOP();
 145   1              SCL = 0;
 146   1      }
 147          
 148          void I2CSendByte(unsigned char ch)
 149          {
 150   1              unsigned char i = 8;
 151   1              while(i--)
 152   1          {
 153   2                      SCL = 0;
 154   2                      NOP();
 155   2                      SDA = (bit)(ch & 0x80);
 156   2                      SCL = 1;
 157   2                      ch <<= 1;
 158   2                      NOP();
 159   2              }
 160   1              SCL = 0;
 161   1      }
 162          unsigned char I2CRecvByte(void)
 163          {
 164   1              unsigned char i = 8;
 165   1              unsigned char dat = 0;
 166   1              SDA = 1;
 167   1              while(i--)
 168   1              {
 169   2                      dat <<= 1;
 170   2                      SCL = 0;
 171   2                      NOP();
 172   2                      SCL = 1;
 173   2                      NOP();
 174   2                      NOP();
 175   2                      NOP();
 176   2                      dat |= SDA;
 177   2              }
 178   1              SCL = 0;
 179   1              return(dat);
C51 COMPILER V7.06   SP3767                                                                06/15/2007 16:08:30 PAGE 4   

 180   1      }
 181          
 182          BYTE SP3767Read(void)
 183          {
 184   1              unsigned char i;
 185   1      
 186   1              I2CStart();                                     // 启动总线
 187   1              I2CSendByte(0xc1);                      // 发送设备写地址
 188   1      
 189   1              if(WaitAck())                           // 等待应答
 190   1              {
 191   2                      for(i = 0; i < 5; i ++)
 192   2                      {
 193   3                              bFmReadData[i] = I2CRecvByte();
 194   3                              SendAck();                      // 发送应答
 195   3                      }
 196   2                      SendNotAck();                           // 发送NoAck
 197   2                      I2CStop();                                      // 停止总线     
 198   2                      return 1;
 199   2              }
 200   1              else return 0;
 201   1      
 202   1      }
 203          
 204          BYTE SP3767Write(void)
 205          {
 206   1              unsigned char i;
 207   1      
 208   1              I2CStart();                                             // 启动总线
 209   1              I2CSendByte(0xc0);                              // 发送设备地址
 210   1              
 211   1              if(WaitAck())                                   // 等待应答
 212   1              {
 213   2                      for(i = 0; i < 5; i ++)
 214   2                      {
 215   3                              I2CSendByte(bFmWriteData[i]);
 216   3                              if(!WaitAck())
 217   3                              {
 218   4                                      I2CStop();
 219   4                                      printf("write 3767 err0\n");
 220   4                                      return 0;
 221   4                              }
 222   3                      }
 223   2                      I2CStop();                                              // 停止总线
 224   2                      return 1;
 225   2              }
 226   1              else
 227   1              {
 228   2                      I2CStop();                                              // 停止总线
 229   2                      printf("write 3767 err1\n");
 230   2                      return 0;
 231   2              }
 232   1      }
 233          
 234          WORD CalculatePLL(void)
 235          {
 236   1              if(fHILOInjection)
 237   1                      return (WORD)((((DWORD)wFmFreq * 100000) + 225000) >> 13);//HILO injection=1
 238   1              else
 239   1                      return (WORD)((((DWORD)wFmFreq * 100000) - 225000) >> 13);//HILO injection=0
 240   1      }
 241          
C51 COMPILER V7.06   SP3767                                                                06/15/2007 16:08:30 PAGE 5   

 242          WORD ConvertPLL(WORD wPll)
 243          {
 244   1              if(fHILOInjection)
 245   1                      return (((((DWORD)wPll << 13) - 225000) / 100000) + 1); // HILo injection=1;
 246   1              else
 247   1                      return (((((DWORD)wPll << 13) + 225000) / 100000) + 1);// HILo injection=0;
 248   1      }
 249          
 250          bit FmInit(void)
 251          {
 252   1              unsigned char TP_BYTE_0;
 253   1      
 254   1              for(TP_BYTE_0 = 0; TP_BYTE_0 < 5; TP_BYTE_0 ++)
 255   1              {
 256   2                      bFmReadData[TP_BYTE_0] = 0;
 257   2                      bFmWriteData[TP_BYTE_0] = 0;
 258   2              }
 259   1      
 260   1              fHILOInjection = FM_HI_INJEC;

⌨️ 快捷键说明

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