iic.lst

来自「myson的MTV332的DEMO程序 主要功能有菜单的设计和无线遥控以及视频」· LST 代码 · 共 497 行 · 第 1/2 页

LST
497
字号
C51 COMPILER V7.09   IIC                                                                   09/06/2006 13:39:47 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN ..\OUTPUT\IIC.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\code\IIC.C LARGE ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND PRINT(.\IIC.lst)
                    - OBJECT(..\OUTPUT\IIC.obj)

line level    source

   1          #include "global.h"
   2          
   3          #define EEPROM_PBYTE 16   // 24c16
   4          #define EEPROM_PTIME 7     // wait 7 ms
   5          
   6          
   7          /****************************************************************************/
   8          void Short_Delay(BYTE Time)
   9          { 
  10   1              while(Time --);
  11   1      }
  12          
  13          void DoWait(WORD Time)             // delay   1ms
  14          {
  15   1              BYTE   Counter;
  16   1         
  17   1              for(; Time > 0;   Time --)
  18   1              {
  19   2                      Counter   = 250;
  20   2                      while(--Counter);
  21   2      
  22   2                      Counter   = 250;
  23   2                      while(--Counter);
  24   2              }
  25   1      }
  26          
  27          /****************************************************************************/
  28          //                                     Software IIC
  29          /****************************************************************************/
  30          #ifdef _IICSW_
  31          
  32          //---------------------------------------------------------------------------
  33          void IIC_Start(void)
  34          {
  35   1              ResSDA;
  36   1              ResSCL;
  37   1      }
  38          
  39          //---------------------------------------------------------------------------
  40          void IIC_Stop(void)
  41          {
  42   1              SetSDA;
  43   1              ResSDA;
  44   1              SetSCL;
  45   1              while(!GetSCL);
  46   1              SetSDA;
  47   1      }
  48          
  49          //---------------------------------------------------------------------------
  50          void Initial_I2C(void)
  51          {
  52   1              EEP_Wait = 0;
  53   1      
  54   1              IIC_Stop();
C51 COMPILER V7.09   IIC                                                                   09/06/2006 13:39:47 PAGE 2   

  55   1      }
  56          
  57          //---------------------------------------------------------------------------
  58          void IIC_Send1Byte(BYTE senddata)
  59          {
  60   1              BYTE i;
  61   1      
  62   1              for(i = 0; i < 8; i++)
  63   1              {
  64   2                      if(senddata & 0x80)
  65   2                              SetSDA;
  66   2                      else
  67   2                              ResSDA;
  68   2                      
  69   2                      senddata <<=1;          
  70   2      
  71   2                      SetSCL;
  72   2                    while(!GetSCL);
  73   2                      ResSCL;   
  74   2              }
  75   1              
  76   1              ResSCL;
  77   1              SetSDA;
  78   1              SetSCL;
  79   1             while(!GetSCL);
  80   1      
  81   1              if (GetSDA)
  82   1                      bNoAck = 1;
  83   1              else
  84   1                      bNoAck = 0;
  85   1              ResSCL;
  86   1      
  87   1      }
  88          
  89          //---------------------------------------------------------------------------
  90          BYTE IIC_Read1Byte(BIT noack)
  91          {
  92   1              BYTE i,readdata=0;
  93   1      
  94   1              for(i = 0; i < 8; i++)
  95   1              {
  96   2                      readdata <<= 1;
  97   2      
  98   2                      SetSDA;
  99   2                      SetSCL;
 100   2                      while(!GetSCL);
 101   2                      
 102   2                      if(GetSDA)
 103   2                              readdata |= 0x01;
 104   2                      ResSCL;
 105   2              }       
 106   1              if(noack)
 107   1                      SetSDA;
 108   1              else
 109   1                      ResSDA;
 110   1      
 111   1              SetSCL;
 112   1            while(!GetSCL);
 113   1              ResSCL;
 114   1      
 115   1              return readdata;
 116   1      
C51 COMPILER V7.09   IIC                                                                   09/06/2006 13:39:47 PAGE 3   

 117   1      }
 118          
 119          /****************************************************************************/
 120          //      IIC write address
 121          /****************************************************************************/
 122          void IICSW_Write(BYTE id,BYTE addr,BYTE *databuf,WORD number)
 123          {
 124   1              int i;
 125   1              BYTE count = 0;
 126   1              
 127   1      do
 128   1      {
 129   2              count++;
 130   2              
 131   2      // Stop
 132   2              IIC_Stop();
 133   2      Short_Delay(20);
 134   2      
 135   2      // Start
 136   2              IIC_Start();
 137   2      
 138   2      // Slave ID     
 139   2              IIC_Send1Byte(id); 
 140   2      
 141   2      if (bNoAck)
 142   2              continue;
 143   2      
 144   2      // Address
 145   2              IIC_Send1Byte(addr);
 146   2      
 147   2      if (bNoAck)
 148   2              continue;
 149   2      
 150   2      // data
 151   2              for(i = 0; i < number; i++)
 152   2              {
 153   3                      IIC_Send1Byte(databuf[i]);
 154   3                      if(bNoAck)
 155   3                              break;
 156   3              }
 157   2      
 158   2      if (bNoAck)
 159   2              continue;
 160   2      
 161   2      // Stop
 162   2              IIC_Stop();
 163   2      }
 164   1      while(bNoAck && count < 10);
 165   1      
 166   1      }
 167          
 168          /****************************************************************************/
 169          //      IIC Read address
 170          /****************************************************************************/
 171          void IICSW_Read(BYTE id,BYTE addr,BYTE *databuf,WORD number)
 172          {
 173   1              int i;
 174   1              BYTE count = 0;
 175   1              
 176   1      do
 177   1      {
 178   2              count++;
C51 COMPILER V7.09   IIC                                                                   09/06/2006 13:39:47 PAGE 4   

 179   2              
 180   2      // Stop
 181   2              IIC_Stop();
 182   2      Short_Delay(20);
 183   2      
 184   2      // Start
 185   2              IIC_Start();
 186   2      
 187   2      // Slave ID     
 188   2              IIC_Send1Byte(id); 
 189   2      
 190   2      if (bNoAck)
 191   2              continue;
 192   2      
 193   2      // Address
 194   2              IIC_Send1Byte(addr);
 195   2      
 196   2      if (bNoAck)
 197   2              continue;
 198   2      
 199   2         SetSDA;
 200   2         SetSCL;
 201   2         while(!GetSCL);
 202   2              IIC_Start();
 203   2      
 204   2      // Slave ID 
 205   2              IIC_Send1Byte(id | 0x01);
 206   2      
 207   2      if (bNoAck)
 208   2              continue;
 209   2      
 210   2      // data
 211   2              for(i = 0; i < number-1; i++)
 212   2              {
 213   3                      databuf[i] = IIC_Read1Byte(0);
 214   3              }
 215   2      
 216   2              databuf[i] = IIC_Read1Byte(1);
 217   2      
 218   2      // Stop
 219   2              IIC_Stop();
 220   2      }
 221   1      while(bNoAck && count < 10);
 222   1      
 223   1      }
 224          #endif  //  #ifdef _IICSW_
 225          
 226          
 227          /****************************************************************************/
 228          //                                  Hardware IIC
 229          /****************************************************************************/
 230          #ifdef _IICHW_
              //--------------------------------------------------------
              void Initial_I2C(void)
              {

⌨️ 快捷键说明

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