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

📄 pcf8563.lst

📁 单片机I2C协议代码
💻 LST
字号:
C51 COMPILER V7.02a   PCF8563                                                              04/22/2003 23:04:38 PAGE 1   


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

stmt level    source

   1          #include<reg51.h>
   2          #include<stdlib.h>
   3          #define byte unsigned char
   4          
   5          sbit scl=0x81;                                  //定义串行I/O口
   6          sbit sda=0x80;
   7          idata byte rom_sed[9];
   8          idata byte rom_rec[7];
   9          idata byte j,k;
  10          bit flag,flag1;
  11          
  12          void delay(void)                                                //延时子程序
  13          {
  14   1      data byte i;
  15   1      for(i=0;i<6;i++);
  16   1      }
  17          
  18          void I_start(void)                              //发送I2C总线起始条件子程序
  19          {
  20   1      sda=1;
  21   1      ;
  22   1      scl=1;
  23   1      delay();
  24   1      sda=0;
  25   1      delay();
  26   1      scl=0;
  27   1      ;
  28   1      }
  29          
  30          void I_stop(void)                               //I2C总线停止条件子程序
  31          {
  32   1      sda=0;
  33   1      ;
  34   1      scl=1;
  35   1      delay();
  36   1      sda=1;
  37   1      delay();
  38   1      }
  39          
  40          bit I_send(byte I_data)                         //字节数据传送子程序
  41          {
  42   1      data byte i;
  43   1      for(i=0;i<8;i++)
  44   1      {
  45   2      sda=(bit)(I_data&0x80);
  46   2      I_data=I_data<<1;
  47   2      ;
  48   2      scl=1;
  49   2      delay();
  50   2      scl=0;
  51   2      }
  52   1      ;
  53   1      ;
  54   1      sda=1;
  55   1      ;
C51 COMPILER V7.02a   PCF8563                                                              04/22/2003 23:04:38 PAGE 2   

  56   1      ;                                                       //准备接收ACK位
  57   1      scl=1;
  58   1      ;
  59   1      ;                                                       //开始接收ack位
  60   1      flag=0;
  61   1      if(sda==0)flag=0;
  62   1      else flag=1;                                    //返回(~I_clock());
  63   1      scl=0;
  64   1      return(flag);
  65   1      }
  66          
  67          byte I_receive(void)                            //字节数据接收子程序
  68          {
  69   1      data byte i;
  70   1      byte I_data=0;
  71   1      sda=1;
  72   1      for(i=0;i<8;i++)
  73   1      {
  74   2      I_data*=2;
  75   2      ;
  76   2      scl=0;
  77   2      delay();
  78   2      scl=1; 
  79   2      ;
  80   2      ;
  81   2      if(sda==1)I_data++;
  82   2      ;
  83   2      ;
  84   2      }
  85   1      scl=0; 
  86   1      ;
  87   1      ;
  88   1      ;
  89   1      sda=0;
  90   1      if(flag1==0)                                    //不是最后一个ACK
  91   1      {
  92   2      ;
  93   2      ;
  94   2      scl=1;
  95   2      delay();
  96   2      scl=0;
  97   2      }
  98   1      else                                            //是最后一个ACK
  99   1      {
 100   2      sda=1; 
 101   2      ;
 102   2      ;
 103   2      scl=1;
 104   2      delay();
 105   2      scl=0;
 106   2      flag1=0;
 107   2      }
 108   1      return(I_data);
 109   1      }
 110          
 111          void main()                                     //主程序
 112          {
 113   1      data byte i;
 114   1      rom_sed[0]=0x00; rom_sed[1]=0x00;
 115   1      rom_sed[2]=0x00; rom_sed[3]=0x55;
 116   1      rom_sed[4]=0x23; rom_sed[5]=0x31;
 117   1      rom_sed[6]=0x06; rom_sed[7]=0x92;
C51 COMPILER V7.02a   PCF8563                                                              04/22/2003 23:04:38 PAGE 3   

 118   1      rom_sed[8]=0x99;
 119   1      for(i=0;i<255;i++)delay();
 120   1      I_start();
 121   1      if(~I_send(0xa2))                               //pcf_write地址
 122   1      {
 123   2      if(~I_send(0x02))                       //pcf_status寄存器地址
 124   2      {
 125   3      for(i=0;i<9;i++)
 126   3      {
 127   4      if(~I_send(rom_sed[i]));
 128   4      else;
 129   4      }
 130   3      I_stop();
 131   3      }
 132   2      else;
 133   2      }
 134   1      else;
 135   1      
 136   1      start: I_start();
 137   1      if(~I_send(0xa2))                               // pcf_write地址
 138   1      {
 139   2      if(~I_send(0x02))                       // pcf_status寄存器地址
 140   2      {
 141   3      I_start();
 142   3      if(~I_send(0xa3))                       //写状态寄存器
 143   3      {
 144   4      for(i=0;i<7;i++)
 145   4      {
 146   5      if(i==6)
 147   5      flag1=1;
 148   5      else
 149   5      flag1=0;
 150   5      rom_rec[i]=I_receive();
 151   5      switch(i)
 152   5      {
 153   6      case 1:rom_rec[i]=rom_rec[i]&0x7f;break;
 154   6      case 2:
 155   6      case 3:rom_rec[i]=rom_rec[i]&0x3f;break;
 156   6      case 4:rom_rec[i]=rom_rec[i]&0x07;break;
 157   6      case 5:rom_rec[i]=rom_rec[i]&0x9f;break;
 158   6      default:break;
 159   6      }
 160   5      }
 161   4      I_stop();
 162   4      }
 163   3      }
 164   2      }
 165   1      goto start;
 166   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    319    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =     18    ----
   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 + -