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

📄 iic_pca8574.lst

📁 基于AT89S51的简易数字逻辑分析仪
💻 LST
字号:
C51 COMPILER V7.09   IIC_PCA8574                                                           08/24/2007 09:37:35 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE IIC_PCA8574
OBJECT MODULE PLACED IN IIC_PCA8574.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE IIC_PCA8574.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include"Config.h"
   3          #include"IOCfg.c"
   4          #include"TimeDLY.h"
   5          #include"IIC_PCA8574.h"
   6          
   7          //IC起始信号:
   8          void StartIIC(void)
   9          {
  10   1              IIC_SDA = 1;
  11   1              nNop(20);
  12   1              IIC_SCL = 1;
  13   1              nNop(20);
  14   1              IIC_SDA = 0;
  15   1              nNop(20);
  16   1              IIC_SCL = 0;
  17   1              //nNop(50);
  18   1              }
  19          
  20          //IIC停止信号:
  21          void StopIIC(void)
  22          {
  23   1              IIC_SDA = 0;
  24   1              nNop(20);
  25   1              IIC_SCL = 1;
  26   1              nNop(20);
  27   1              IIC_SDA = 1;
  28   1              nNop(50);
  29   1              }
  30          
  31          //读取从机应答信号函数:
  32          bit GetACK(void)
  33          {
  34   1              bit ack;
  35   1              IIC_SDA = 1;
  36   1              IIC_SCL = 1;
  37   1              nNop(50);
  38   1              ack = IIC_SDA;
  39   1              IIC_SCL = 0;
  40   1              nNop(50);
  41   1              return(ack);
  42   1              }
  43          
  44          //向IIC总线发出应答信号函数:
  45          void PutACK(bit ack)
  46          {
  47   1              IIC_SDA = ack;
  48   1              IIC_SCL = 1;
  49   1              nNop(50);
  50   1              IIC_SCL = 0;
  51   1              nNop(50);
  52   1              }
  53          
  54          //初始化IIC总线函数:
  55          void InitIIC(void)
C51 COMPILER V7.09   IIC_PCA8574                                                           08/24/2007 09:37:35 PAGE 2   

  56          {
  57   1              IIC_SCL = 1;
  58   1              nNop(10);
  59   1              IIC_SDA = 1;
  60   1              nNop(50);
  61   1              }
  62          
  63          //功能向IIC总线写一字节数据函数:
  64          void IIC_WriteByte(INT8U temp)
  65          {
  66   1              INT8U i;
  67   1              for(i=0;i<8;i++)
  68   1              {
  69   2                      IIC_SDA = (bit)(temp & 0x80);
  70   2                      temp = temp << 1;
  71   2                      nNop(20);
  72   2                      IIC_SCL = 1;
  73   2                      nNop(20);
  74   2                      IIC_SCL = 0;
  75   2                      //nNop(50);
  76   2                      }
  77   1              }
  78          
  79          //从IIC总线读一字节数据函数:
  80          INT8U IIC_ReadByte(void)
  81          {
  82   1              INT8U i;
  83   1              INT8U temp;
  84   1              IIC_SDA = 1;
  85   1              for(i=0;i<8;i++)
  86   1              {
  87   2                      temp = temp << 1;
  88   2                      IIC_SCL = 1;
  89   2                      while(IIC_SDA) temp++;
  90   2                      IIC_SCL = 0;
  91   2                      nNop(20);
  92   2                      }
  93   1              return(temp);
  94   1              }
  95          
  96          //向PCA8574写一字节数据函数:
  97          bit PCA8574_PutOne(INT8U SlaveAddr,INT8U dat)
  98          {
  99   1              //确保从机地址最低位是0
 100   1              SlaveAddr &= 0xfe;
 101   1              
 102   1              //启动I2C总线
 103   1              StartIIC();
 104   1              
 105   1              //发送数据
 106   1              IIC_WriteByte(dat);
 107   1              if ( GetACK() )
 108   1              {
 109   2                      StopIIC();
 110   2                      return 1;
 111   2                      }
 112   1      
 113   1              //发送完毕,停止I2C总线,返回
 114   1              StopIIC();
 115   1              return 0;
 116   1              }
 117                  
C51 COMPILER V7.09   IIC_PCA8574                                                           08/24/2007 09:37:35 PAGE 3   

 118          //从PCA8574读一字节数据函数:
 119          bit PCA8574_GetOne(INT8U SlaveAddr,INT8U dat)
 120          {
 121   1              while(IIC_INT!=0);
 122   1              SlaveAddr |= 0x01;
 123   1              
 124   1              //启动I2C总线
 125   1              StartIIC();
 126   1              
 127   1              //发送从机地址
 128   1              IIC_WriteByte(SlaveAddr);
 129   1              if ( GetACK() )
 130   1              {
 131   2                      StopIIC();
 132   2                      return 1;
 133   2                      }
 134   1              
 135   1              //接收数据
 136   1              dat = IIC_ReadByte();
 137   1              PutACK(1);
 138   1              
 139   1              //接收完毕,停止I2C总线,返回
 140   1              StopIIC();
 141   1              return 0;
 142   1              }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    250    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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