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

📄 iic.lst

📁 车载DVD的主控MCU的源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   IIC                                                                   12/11/2007 11:28:42 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN .\BIN\IIC.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\IIC.C LARGE OPTIMIZE(9,SPEED) DEBUG OBJECTEXTEND PRINT(.\LST\IIC.lst) O
                    -BJECT(.\BIN\IIC.obj)

stmt level    source

   1          /*==========================================
   2          ==========================================*/
   3          #include "include.h"
   4          ////////////////////////////////////////////////////////
   5          /*==========================================
   6          ==========================================*/
   7          void DDC2(void)
   8          {
   9   1      //      ISCL = 0;               //sherry ????
  10   1      //      ISCL = 1;
  11   1      }
  12          /*==========================================
  13          ==========================================*/
  14          void SetISCL(Bit flag)
  15          {
  16   1              if(flag)
  17   1                      PTB_REG |= PB4;
  18   1              else
  19   1                      PTB_REG &= ~PB4;
  20   1      }
  21          void SetISDA(Bit flag)
  22          {
  23   1              if(flag)
  24   1                      PTB_REG |= PB5;
  25   1              else
  26   1                      PTB_REG &= ~PB5;
  27   1      }
  28          void IIC_Start(void)
  29          {
  30   1              SetISCL(1);
  31   1      //      _nop_();
  32   1       //     _nop_();
  33   1              SetISDA(1);
  34   1       //     _nop_();
  35   1       //     _nop_();
  36   1              SetISDA(0);
  37   1              SetISCL(0);
  38   1      }
  39          /*==========================================
  40          ==========================================*/
  41          void IIC_Stop(void)
  42          {
  43   1              SetISDA(0);
  44   1              SetISCL(1);
  45   1      //      _nop_();
  46   1      //      _nop_();
  47   1              SetISDA(1);
  48   1      }
  49          Bit ReadISDA()
  50          {
  51   1              Byte tmp;
  52   1              RDPB_REG = 0x20;
  53   1              _nop_();
  54   1      //      _nop_();
C51 COMPILER V7.06   IIC                                                                   12/11/2007 11:28:42 PAGE 2   

  55   1      //      _nop_();
  56   1      //      _nop_();
  57   1              tmp=PTB_REG & PB5;
  58   1              RDPB_REG = 0x00;
  59   1              if(tmp == PB5)
  60   1                      return 1;
  61   1              else
  62   1                      return 0;
  63   1      }
  64          void IIC_ReStart(void)  //s0310
  65          {
  66   1              SetISCL(1);
  67   1      //      _nop_();
  68   1      //      _nop_();
  69   1              SetISDA(1);
  70   1      //      _nop_();
  71   1      //      _nop_();
  72   1              SetISDA(0);
  73   1              SetISCL(0);
  74   1      }
  75          /*==========================================
  76          ==========================================*/
  77          void CheckIIC(void)
  78          {
  79   1      //      ISCL = 1;
  80   1      //      ISDA = 1;
  81   1      //      while(!ISDA || !ISCL)   //waiting for IIC released
  82   1      //              {
  83   1      //              ISCL = 0;
  84   1      //              IIC_Stop();
  85   1      //              }
  86   1      }
  87          /*==========================================
  88          ==========================================*/
  89          Byte IIC_Tx(Byte Data)
  90          {       //subroutine total time 630us
  91   1              Byte AckLoop,Ack;
  92   1              Byte i;
  93   1      
  94   1              for(i=0;i<8;i++)
  95   1                      {
  96   2                  SetISCL(0);
  97   2      //              _nop_();
  98   2      //              _nop_();
  99   2                      SetISDA((Data & 0x80));
 100   2      //          _nop_();
 101   2      //              _nop_();
 102   2      //              _nop_();
 103   2      //              _nop_();
 104   2                      _nop_();
 105   2                      SetISCL(1);
 106   2      //              _nop_();
 107   2                      _nop_();
 108   2      //              _nop_(); 
 109   2                      Data =Data<<1;
 110   2                      }
 111   1      
 112   1             
 113   1              SetISCL(0);
 114   1      //      _nop_();
 115   1      //      _nop_(); 
 116   1              SetISDA(1);
C51 COMPILER V7.06   IIC                                                                   12/11/2007 11:28:42 PAGE 3   

 117   1              SetISCL(1);
 118   1              Ack = NACK;
 119   1              for(AckLoop=0;AckLoop<50;AckLoop++) //260us
 120   1                      {
 121   2                      if(!(ReadISDA()))
 122   2                              {
 123   3                              Ack = ACK;
 124   3                              break;
 125   3                              }
 126   2                      }
 127   1              SetISCL(0);
 128   1              return Ack;                     //return success=0 / failure=1
 129   1      
 130   1      }
 131          /*==========================================
 132          ==========================================*/
 133          Byte IIC_Rx(Bit Ack)
 134          {
 135   1              Byte Data;
 136   1              Byte i;
 137   1              Data = 0;
 138   1              for(i=0;i<8;i++)
 139   1                      {
 140   2                      Data <<= 1;
 141   2                      SetISCL(0);
 142   2                      SetISDA(1);
 143   2                      SetISCL(1);
 144   2              CLRWDT = 0x55;
 145   2                      if((ReadISDA()))
 146   2                              Data |= 1;
 147   2                      else
 148   2                              Data &= 0xfe;
 149   2                      }
 150   1              SetISCL(0);
 151   1              SetISDA(Ack);
 152   1              SetISCL(1);
 153   1              SetISCL(0);
 154   1              return Data;
 155   1      
 156   1      }
 157          /*==========================================
 158          ==========================================*/
 159          void WriteIIC(Byte device,Byte addr,Byte ch)
 160          {
 161   1              IIC_Start();
 162   1              IIC_Tx(device);
 163   1              IIC_Tx(addr);
 164   1              IIC_Tx(ch);
 165   1              IIC_Stop();
 166   1      }
 167          /*==========================================
 168          ==========================================*/
 169          void WriteIIC563(unsigned short addr,unsigned char ch)
 170          {
 171   1              CheckRegPage(addr);
 172   1              IIC_Start();    
 173   1              IIC_Tx(SCALER_ADDR);    
 174   1              IIC_Tx(addr);   
 175   1              IIC_Tx(ch);
 176   1              IIC_Stop();
 177   1      }
 178          /*==========================================
C51 COMPILER V7.06   IIC                                                                   12/11/2007 11:28:42 PAGE 4   

 179          ==========================================*/
 180          void WriteWordIIC563(unsigned short addr,unsigned short value)
 181          {
 182   1              CheckRegPage(addr);
 183   1              IIC_Start();
 184   1              IIC_Tx(SCALER_ADDR);
 185   1              IIC_Tx((Byte)addr);
 186   1              IIC_Tx((Byte)value);
 187   1              IIC_Tx((Byte)(value>>8));       
 188   1              IIC_Stop();
 189   1      }

⌨️ 快捷键说明

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