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

📄 pcf8574.lst

📁 PCF8574 Remote 8-bit I/O expander for I2C-bus IO扩展芯片测试程序
💻 LST
字号:
C51 COMPILER V7.50   PCF8574                                                               12/23/2008 16:42:24 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          
   3          #define SETBIT(VAR,Place)         (VAR|=(1<<Place))
   4          #define CLRBIT(VAR,Place)         (VAR&=((1<<Place)^255))
   5          
   6          #define UCHAR unsigned char
   7          #define UINT  unsigned int
   8          
   9          sbit IC_SCL=P3^7;
  10          sbit IC_SDA=P3^6;
  11          
  12          unsigned char IC_Re_Time;
  13          unsigned char IC_Err_Flag;
  14          
  15          void Delay(void)
  16          {
  17   1              unsigned char i;
  18   1              for(i=0;i<=10;i++)
  19   1                      ;
  20   1      }
  21          
  22          void delay1 (UINT ms)
  23          {
  24   1          UINT i,j;
  25   1          for(i=0;i<ms;i++)
  26   1          {   
  27   2             for(j=0;j<10000;j++)
  28   2                ;
  29   2          }
  30   1      }
  31          
  32          UCHAR VALBIT(UINT Val,UCHAR Bit)
  33          {
  34   1              UINT Buf;
  35   1              Buf=0x0001;
  36   1              if(Bit)
  37   1              Buf<<=Bit;
  38   1              Val&=Buf;
  39   1              if(Val)
  40   1                      return(0xff);
  41   1              else
  42   1                      return(0x00);
  43   1      }
  44          
  45          /**********************************************
  46                    下面是PCF8574的操作程序
  47          1.通信方式:I2C
  48          2.通信端口:IC_SCL(P3.6),IC_SDA(P3.7)
  49          3.通信地址:0x0101000x          
  50          ***********************************************/ 
  51          void IC_Start(void)   //启动IC通信
  52          { 
  53   1              IC_SDA=1;
  54   1              Delay();
  55   1              IC_SCL=1;
C51 COMPILER V7.50   PCF8574                                                               12/23/2008 16:42:24 PAGE 2   

  56   1              Delay();
  57   1              IC_SDA=0;
  58   1              Delay();
  59   1              IC_SCL=0;
  60   1              Delay(); 
  61   1      }
  62          
  63          void IC_Stop(void)   //停止IC通信
  64          { 
  65   1              IC_SDA=0;
  66   1              Delay();
  67   1              IC_SCL=1;
  68   1              Delay();
  69   1              IC_SDA=1;
  70   1              Delay();     
  71   1      }
  72          
  73          void IC_Receive_Ack(void)  //接受ACK
  74          {   
  75   1              IC_SDA=1;
  76   1              IC_SCL=1; 
  77   1              Delay();  
  78   1              IC_Re_Time=0; 
  79   1              while(IC_Re_Time<=30)
  80   1              {
  81   2                      if(IC_SDA==0)
  82   2                      {
  83   3                              IC_Err_Flag=0;
  84   3                              break;
  85   3                      } 
  86   2                      else
  87   2                      {
  88   3                              IC_Err_Flag=1;
  89   3                      }
  90   2              }
  91   1              IC_SCL=0;
  92   1              Delay();
  93   1      }
  94          
  95          void IC_Send_NAck(void)   //发送NACK
  96          {
  97   1              IC_SDA=1;
  98   1              Delay();
  99   1              IC_SCL=1;
 100   1              Delay();
 101   1              IC_SCL=0;
 102   1              Delay();
 103   1      }
 104          
 105          void IC_Write_Byte(unsigned char Data) //写数据到8574
 106          {
 107   1              UCHAR i; 
 108   1              for(i=0;i<=7;i++)
 109   1              {
 110   2                      if(VALBIT(Data,(7-i))) //data out msb
 111   2                              IC_SDA=1;
 112   2                      else
 113   2                              IC_SDA=0;
 114   2                      IC_SCL=1;
 115   2                      Delay();
 116   2                      IC_SCL=0;
 117   2                      Delay();  
C51 COMPILER V7.50   PCF8574                                                               12/23/2008 16:42:24 PAGE 3   

 118   2              } 
 119   1      }
 120          
 121          UCHAR IC_Read_Byte(void) //从8574读取一个数据
 122          {
 123   1              UCHAR i,Data;
 124   1              for(i=0;i<=7;i++)
 125   1              {
 126   2                      IC_SCL=1;
 127   2                      Delay();
 128   2                      IC_SDA=1;
 129   2                      Delay(); 
 130   2                      if(IC_SDA)
 131   2                              SETBIT(Data,(7-i)); //data in msb too
 132   2                      else
 133   2                              CLRBIT(Data,(7-i));
 134   2                      IC_SCL=0;
 135   2                      Delay();
 136   2              }
 137   1              return(Data);
 138   1      }
 139          
 140          void IC_Write_Data(UCHAR Data)
 141          {
 142   1              UCHAR write_time,write_data;
 143   1              write_data=Data;
 144   1              for(write_time=0;write_time<=2;write_time++)
 145   1              { 
 146   2                      IC_Start();
 147   2                      IC_Write_Byte(0x40);
 148   2                      IC_Receive_Ack();
 149   2                      IC_Write_Byte(write_data);
 150   2                      IC_Receive_Ack(); 
 151   2                      IC_Stop();
 152   2                      if(IC_Err_Flag==0)
 153   2                              break;
 154   2              }   
 155   1      }
 156          
 157          UCHAR IC_Read_Data(void)
 158          {
 159   1              UCHAR Return_Data,read_time;
 160   1              for(read_time=0;read_time<=2;read_time++)
 161   1              { 
 162   2                      IC_Start();
 163   2                      IC_Write_Byte(0x41); 
 164   2                      IC_Receive_Ack();       
 165   2                      Return_Data=IC_Read_Byte();  
 166   2                      IC_Send_NAck();
 167   2                      IC_Stop();      
 168   2                      if(IC_Err_Flag==0)
 169   2                      {
 170   3                              return(Return_Data);
 171   3                              break;
 172   3                      }
 173   2              }  
 174   1      }
 175          
 176          void PCF8574_Init(void)
 177          {
 178   1              IC_Write_Data(0xf0); //输入状态的必须开始的时候置为1,输出为0
 179   1      }
C51 COMPILER V7.50   PCF8574                                                               12/23/2008 16:42:24 PAGE 4   

 180          
 181          void main(void)
 182          {
 183   1              unsigned char temp3;
 184   1              //PCF8574_Init();
 185   1              /*      IC_Write_Data(0xF1);
 186   1                      delay1(10);
 187   1                      IC_Write_Data(0xF2);
 188   1                      delay1(10);
 189   1                      IC_Write_Data(0xF4);
 190   1                      delay1(10);
 191   1                      IC_Write_Data(0xF8);
 192   1                      delay1(20);
 193   1                      IC_Write_Data(0xF4);
 194   1                      delay1(10);
 195   1                      IC_Write_Data(0xF2);
 196   1                      delay1(10);
 197   1                      IC_Write_Data(0xF1);
 198   1                      delay1(10);
 199   1                      IC_Write_Data(0xFF);*/
 200   1              while(1)
 201   1              {
 202   2              //temp3=IC_Read_Data();
 203   2                      temp3=0x20;
 204   2                      temp3=temp3>>4;
 205   2              //IC_Write_Data(temp3&0x0F);
 206   2              delay1(10);
 207   2              }
 208   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    360    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       3
   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 + -