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

📄 pcf8574.lst

📁 KEILC51下的PCF8754芯片的驱动程序,已经通过调试
💻 LST
字号:
C51 COMPILER V8.01   PCF8574                                                               10/16/2007 15:30:38 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE PCF8574
OBJECT MODULE PLACED IN Pcf8574.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Pcf8574.c BROWSE DEBUG OBJECTEXTEND TABS(8)

line level    source

   1          //......................................
   2          //名称: PCF8574(A).c I2C扩展8位I/O芯片的接口程序
   3          //编程: 机灵小老鼠(QQ: 879381753)
   4          //日期: 20071016
   5          //
   6          //发现问题请指点,谢谢!
   7          //......................................
   8          //CPU:  89C52   11.0592MHz
   9          //环境: Keil C51 V8.01
  10          //引脚定义:
  11          //      CPU_P2.0        ---     PCF8574X_SCL    时钟
  12          //      CPU_P2.1        ---     PCF8574X_SDA    数据
  13          //      CPU_P2.2        ---     PCF8574X_INT    中断
  14          //......................................
  15          #include <Public.h>
  16          #include <Intrins.h>
  17          #include "delay_s.h"
  18          #include "pcf8574.h"
  19          
  20          
  21          //内部函数
  22          static void i2c_start_cond(void);
  23          static void i2c_stop_cond(void);
  24          static uchar i2c_read_byte(void);
  25          static uchar i2c_read_byte_nack(void);
  26          static void i2c_write_byte(uchar da);
  27          
  28          //=============================================================================
  29          //接口调用函数部分
  30          //*******************************************************
  31          //序号:
  32          //              HD_PCF8574X_S01
  33          //功能: 
  34          //              读出芯片的复位状态
  35          //输入: 
  36          //              is_pcf8574a     =1 是A芯片      
  37          //              add_of_part     器件的子地址 0~3
  38          //输出: 
  39          //              端口的数据
  40          //********************************************************
  41          uchar   PCF8574X_read_io(uchar is_pcf8574a, uchar add_of_part)
  42          {
  43   1      uchar i;
  44   1              i2c_start_cond();
  45   1              if(is_pcf8574a !=0)
  46   1              {
  47   2                      i2c_write_byte(PCF8574A_READ |((add_of_part <<1) &0x0E));//器件地址=0111 A2 A1 A0 r/w
  48   2              }
  49   1              else
  50   1              {       
  51   2                      i2c_write_byte(PCF8574_READ |((add_of_part <<1) &0x0E));//器件地址=0100 A2 A1 A0 r/w
  52   2              }
  53   1              i =i2c_read_byte_nack();                        //顺序读的方式读出一个字节
  54   1              i2c_stop_cond();
  55   1              return(i);
C51 COMPILER V8.01   PCF8574                                                               10/16/2007 15:30:38 PAGE 2   

  56   1      }
  57          
  58          //*******************************************************
  59          //序号:
  60          //              HD_PCF8574X_S02
  61          //功能: 
  62          //              写数据到I/O端口
  63          //输入: 
  64          //              is_pcf8574a =1 是A芯片  
  65          //              add_of_part:            器件的子地址 0~7
  66          //              dat:            写入的字节
  67          //输出: 
  68          //              无
  69          //********************************************************
  70          void PCF8574X_write_io(uchar is_pcf8574a, uchar add_of_part, uchar dat)
  71          {
  72   1              i2c_start_cond();
  73   1              if(is_pcf8574a !=0)
  74   1              {
  75   2                      i2c_write_byte(PCF8574A_WRITE |((add_of_part <<1) &0x0E));      //器件地址=0111 A2 A1 A0 r/w    
  76   2              }
  77   1              else
  78   1              {
  79   2                      i2c_write_byte(PCF8574_WRITE |((add_of_part <<1) &0x0E));       //器件地址=0100 A2 A1 A0 r/w    
  80   2              }
  81   1              i2c_write_byte(dat);    
  82   1              i2c_stop_cond();
  83   1      }
  84          
  85          //==============
  86          //内部调用函数部分
  87          //==============
  88          
  89          //----------------------------------------------
  90          //I2C 发启始条件:时钟线为高时数据线发生下降沿跳变
  91          //----------------------------------------------
  92          static void i2c_start_cond(void)
  93          {
  94   1              CODE_SCL_LOW;
  95   1              _DELAY_NOP3;
  96   1              CODE_SDA_HIGH;
  97   1              _DELAY_NOP3;
  98   1              CODE_SCL_HIGH;
  99   1              _DELAY_NOP3;
 100   1              CODE_SDA_LOW;
 101   1              _DELAY_NOP3;
 102   1      }
 103          
 104          //----------------------------------------
 105          //I2C 发结束条件:时钟线为高时数据线发生上升沿跳变
 106          //----------------------------------------
 107          static void i2c_stop_cond(void)
 108          {
 109   1              CODE_SCL_LOW;
 110   1              _DELAY_NOP3;
 111   1              CODE_SDA_LOW;
 112   1              _DELAY_NOP3;
 113   1              CODE_SCL_HIGH;
 114   1              _DELAY_NOP3;
 115   1              CODE_SDA_HIGH;
 116   1              _DELAY_NOP3;
 117   1      }
C51 COMPILER V8.01   PCF8574                                                               10/16/2007 15:30:38 PAGE 3   

 118          
 119          //----------------------------------------
 120          //      I2C 读取一个中间字节的数据
 121          //----------------------------------------
 122          /*
 123          static uchar i2c_read_byte(void)
 124          {
 125                  uchar i;
 126                  uchar da=0;
 127                  for(i =0; i<8; i++)
 128                  {
 129                          da <<=1;                //传输的数据高位在前
 130                          CODE_SCL_LOW;
 131                          _DELAY_NOP3;
 132                          CODE_SCL_HIGH;          //时钟为高时读数据
 133                                                  //NOP3;
 134                          if (JUDGE_PCF8574X_SDA) da++;
 135                  }
 136                  CODE_SCL_LOW;
 137                  _DELAY_NOP3;
 138                  CODE_SDA_LOW;                   //发送应答位
 139                  _DELAY_NOP3;
 140                  CODE_SCL_HIGH;
 141                  _DELAY_NOP3;
 142                  CODE_SCL_LOW;
 143                  _DELAY_NOP3;
 144                  CODE_SDA_HIGH;
 145                  return(da);
 146          }
 147          */
 148          //----------------------------------------
 149          //      I2C 读取一个结尾字节的数据
 150          //----------------------------------------
 151          static uchar i2c_read_byte_nack(void)
 152          {
 153   1              uchar   i;
 154   1              uchar   da =0;
 155   1              for (i =0; i<8; i++)
 156   1              {
 157   2                      da <<=1;
 158   2                      CODE_SCL_LOW;
 159   2                      _DELAY_NOP3;
 160   2                      CODE_SCL_HIGH;
 161   2                                              //NOP3;
 162   2                      if(JUDGE_PCF8574X_SDA) da++;
 163   2              }
 164   1              CODE_SCL_LOW;
 165   1              _DELAY_NOP3;
 166   1              CODE_SDA_HIGH;
 167   1              _DELAY_NOP3;
 168   1              CODE_SCL_HIGH;
 169   1              _DELAY_NOP3;
 170   1              CODE_SCL_LOW;
 171   1              return( da );
 172   1      }
 173          
 174          //----------------------------------------
 175          //      I2C 写入一个字节的数据
 176          //----------------------------------------
 177          static void i2c_write_byte(uchar da )
 178          {
 179   1              uchar   i;
C51 COMPILER V8.01   PCF8574                                                               10/16/2007 15:30:38 PAGE 4   

 180   1              for(i =0; i<8; i++)
 181   1              {
 182   2                      CODE_SCL_LOW;
 183   2                      if(da&0x80)
 184   2                      {
 185   3                              CODE_SDA_HIGH;
 186   3                      }
 187   2                      else
 188   2                      {
 189   3                              CODE_SDA_LOW;
 190   3                      }
 191   2                      CODE_SCL_HIGH;
 192   2                      da <<=1;
 193   2              }
 194   1              CODE_SCL_LOW;           //第8个SCL下降沿,写入8位数据
 195   1              _DELAY_NOP3;
 196   1              CODE_SDA_HIGH;
 197   1              _DELAY_NOP3;
 198   1              CODE_SCL_HIGH;
 199   1      }
 200          
 201          //=============================================================================
 202          
 203          //End Of File


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    206    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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