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

📄 ptf8563.lst

📁 51开发板的源程序
💻 LST
字号:
C51 COMPILER V7.06   PTF8563                                                               12/18/2007 11:18:08 PAGE 1   


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

stmt level    source

   1          
   2          #include "c51base.h" 
   3          
   4          
   5          
   6          static void SomeNOP()
   7          {
   8   1              uchar idata i=3;
   9   1              while(i)
  10   1                      i--;
  11   1      }
  12          
  13          /**--------------------------------------------------------------------------------
  14          调用方式:void I2CStart(void) ﹫2001/07/0 4
  15          函数说明:私有函数,I2C专用
  16          --------------------------------------------------------------------------------*/
  17          static void I2CStart(void)
  18          {
  19   1          EA=0;
  20   1          SDA=1; SCL=1; SomeNOP();//INI
  21   1          SDA=0; SomeNOP(); //START
  22   1          SCL=0;
  23   1      }
  24          
  25          /**--------------------------------------------------------------------------------
  26          调用方式:void I2CStop(void) ﹫2001/07/0 4
  27          函数说明:私有函数,I2C专用
  28          ---------------------------------------------------------------------------------*/
  29          static void I2CStop(void)
  30          {
  31   1          SCL=0; SDA=0; SomeNOP(); //INI
  32   1          SCL=1; SomeNOP(); SDA=1; //STOP
  33   1          EA=1;
  34   1      }
  35          
  36          /**--------------------------------------------------------------------------------
  37          53 调用方式:bit I2CAck(void) ﹫2001/07/0 4
  38          54 函数说明:私有函数,I2C专用,等待从器件接收方的应答
  39          55 ---------------------------------------------------------------------------------*/
  40          static bit WaitAck(void)
  41          {
  42   1          uchar idata errtime=255;//因故障接收方无ACK,超时值为255。
  43   1          SDA=1;SomeNOP();
  44   1          SCL=1;SomeNOP();
  45   1          while(SDA) 
  46   1          {
  47   2              errtime--; 
  48   2              if (!errtime) 
  49   2              {
  50   3                  I2CStop();
  51   3                  return false;
  52   3              }
  53   2          }
  54   1          SCL=0;
  55   1          return true;
C51 COMPILER V7.06   PTF8563                                                               12/18/2007 11:18:08 PAGE 2   

  56   1      }
  57          
  58          /**--------------------------------------------------------------------------------
  59          调用方式:void SendAck(void) ﹫2001/07/0 4
  60          函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。
  61          ---------------------------------------------------------------------------------*/
  62          static void SendAck(void)
  63          {
  64   1          SDA=0; SomeNOP();
  65   1          SCL=1; SomeNOP();
  66   1          SCL=0;
  67   1      }
  68          
  69          /**--------------------------------------------------------------------------------
  70          调用方式:void SendAck(void) ﹫2001/07/0 4
  71          函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。
  72          -------------------------------------------------------------------------------*/
  73          static void SendNotAck(void)
  74          {
  75   1          SDA=1; SomeNOP();
  76   1          SCL=1; SomeNOP();
  77   1          SCL=0;
  78   1      }
  79          
  80          /**--------------------------------------------------------------------------------
  81          调用方式:void I2CSend(uchar ch) ﹫2001/07/0 5
  82          函数说明:私有函数,I2C专用
  83          ---------------------------------------------------------------------------------*/
  84          static void I2CSendByte(uchar ch)
  85          {
  86   1          uchar idata i=8;
  87   1          while (i--)
  88   1          {
  89   2              SCL=0;
  90   2                              ;
  91   2              SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
  92   2              SCL=1; SomeNOP();
  93   2          }
  94   1          SCL=0;
  95   1      }
  96          
  97          /**--------------------------------------------------------------------------------
  98          调用方式:uchar I2CReceive(void) ﹫2001/07/0 5
  99          函数说明:私有函数,I2C专用
 100          ---------------------------------------------------------------------------------*/
 101          static uchar I2CReceiveByte(void)
 102          {
 103   1          uchar idata i=8;
 104   1          uchar idata ddata=0;
 105   1          SDA=1;
 106   1          while (i--)
 107   1          {
 108   2              ddata<<=1;
 109   2              SCL=0;SomeNOP();
 110   2              SCL=1;SomeNOP();
 111   2              ddata|=SDA;
 112   2          }
 113   1          SCL=0;
 114   1          return ddata;
 115   1      }
 116          
 117          //---------------------------------------------------------------------------
C51 COMPILER V7.06   PTF8563                                                               12/18/2007 11:18:08 PAGE 3   

 118          //开始PCF8563T驱动程序
 119          /**--------------------------------------------------------------------------------
 120          调用方式:void GetPCF8563(uchar firsttype,uchar count,uchar *buff) ﹫2001/08/0 7
 121          函数说明:读取时钟芯片PCF8563的时间,设置要读的第一个时间类型firsttype,并设置读取
 122          的字节数,则会一次把时间读取到buff中。顺序是:
 123          0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年
 124          ---------------------------------------------------------------------------------*/
 125          static void GetPCF8563(uchar firsttype,uchar count,uchar *buff)
 126          {
 127   1          uchar idata i;
 128   1          I2CStart();
 129   1          I2CSendByte(0xA2);
 130   1          WaitAck();
 131   1          I2CSendByte(firsttype);
 132   1          WaitAck();
 133   1          I2CStart();
 134   1          I2CSendByte(0xA3);
 135   1          WaitAck();
 136   1       
 137   1          for (i=0;i<count;i++)
 138   1          {
 139   2              buff[i]=I2CReceiveByte();
 140   2              if (i!=count-1) 
 141   2                  SendAck();//除最后一个字节外,其他都要从MASTER发应答。
 142   2          }
 143   1          
 144   1          SendNotAck();
 145   1          I2CStop();
 146   1      }
 147          
 148          /**--------------------------------------------------------------------------------
 149          调用方式:void SetPCF8563(uchar timetype,uchar value) ﹫2001/08/0 7
 150          函数说明:调整时钟。timetype是要改的时间类型,value是新设置的时间值(BCD格式)。
 151          0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年
 152          ---------------------------------------------------------------------------------*/
 153          static void SetPCF8563(uchar firsttype,uchar count,uchar *buff)
 154          {
 155   1              uchar idata i;
 156   1          I2CStart();
 157   1          I2CSendByte(0xA2);
 158   1          WaitAck();
 159   1          I2CSendByte(firsttype);
 160   1          WaitAck();
 161   1              for (i=0;i<count;i++)
 162   1          {
 163   2              I2CSendByte(buff[i]);
 164   2              if (i!=count-1) 
 165   2                  SendAck();//除最后一个字节外,其他都要从MASTER发应答。
 166   2          }  
 167   1          WaitAck();
 168   1          I2CStop();
 169   1      }
 170          
 171          
 172          /*******************************************
 173          时间格式转换:
 174                  由于pcf8563取出来的时间是BCD码,
 175          因此为了在程序中操作方便,把时间转换成HEX格式。
 176                  同时为了在设置时间时以BCD码写入pcf8563,所
 177          以还需要HEX转换成BCD码再写入pcf8563。
 178          *******************************************/
 179          void GetTime(uchar len,uchar *temp)
C51 COMPILER V7.06   PTF8563                                                               12/18/2007 11:18:08 PAGE 4   

 180          {
 181   1              uchar idata time[7];
 182   1              uchar idata i; 
 183   1              uchar idata temp_value;
 184   1              GetPCF8563(0x02,7,temp);
 185   1              temp[0] &= 0x7f;
 186   1              temp[1] &= 0x7f;
 187   1              temp[2] &= 0x3f;
 188   1              temp[3] &= 0x3f;
 189   1              temp[4] &= 0x07;
 190   1              temp[5] &= 0x1f;
 191   1              for(i=0;i<len;i++)
 192   1              {
 193   2                      temp_value = temp[i]>>4;
 194   2                      time[i] = (temp_value*10)+(temp[i]&0x0f);
 195   2              }
 196   1              temp[0] = time[6];
 197   1              temp[1] = time[5];
 198   1              temp[2] = time[3];
 199   1              temp[3] = time[4];
 200   1              temp[4] = time[2];
 201   1              temp[5] = time[1];
 202   1              temp[6] = time[0];
 203   1      }
 204          
 205          
 206          void SetTime(uchar len,uchar *time)
 207          {
 208   1              uchar idata temp[7];
 209   1              uchar idata i;
 210   1              uchar idata temp_value;
 211   1              temp[6] = time[0];
 212   1              temp[5] = time[1];
 213   1              temp[3] = time[2];
 214   1              temp[4] = time[3];
 215   1              temp[2] = time[4];
 216   1              temp[1] = time[5];
 217   1              temp[0] = time[6];
 218   1              for(i=0;i<len;i++)
 219   1              {
 220   2                      temp_value = (temp[i]%100)/10;
 221   2                      time[i] = (temp_value*16)+temp[i]%10;
 222   2              }
 223   1              SetPCF8563(0x02,7,time);
 224   1      }
 225          


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