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

📄 pcf8563.lst

📁 philip RTC 芯片的驱动程序 8563
💻 LST
字号:
C51 COMPILER V7.50   PCF8563                                                               10/18/2005 14:13:31 PAGE 1   


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

line level    source

   1          #include        <reg52.h>
   2          #include        <intrins.h>
   3          #include        "globedef.h"
   4          #include        "pcf8563.h"
   5          #include        "delay.h"
   6          
   7          /**--------------------------------------------------------------------------------
   8           调用方式:void I2CStart(void) ﹫2001/07/0 4
   9           函数说明:私有函数,I2C专用
  10           ---------------------------------------------------------------------------------*/
  11           void pcf8563_start(void)
  12           {
  13   1       //     EA=0;
  14   1              pcf8563_scl=1; 
  15   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  16   1              pcf8563_sda=1;  
  17   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  18   1              pcf8563_sda=0; 
  19   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  20   1              pcf8563_scl=0; 
  21   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  22   1       }
  23          
  24          /**--------------------------------------------------------------------------------
  25           调用方式:void I2CStop(void) ﹫2001/07/0 4
  26           函数说明:私有函数,I2C专用
  27           ---------------------------------------------------------------------------------*/
  28          void pcf8563_stop(void)
  29          {
  30   1              pcf8563_scl=1; 
  31   1          _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  32   1              pcf8563_sda=0; 
  33   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  34   1              pcf8563_sda=1; 
  35   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  36   1              pcf8563_scl=0; 
  37   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  38   1       //     EA=1;
  39   1       }
  40          
  41          /**--------------------------------------------------------------------------------
  42           调用方式:bit I2CAck(void) ﹫2001/07/0 4
  43           函数说明:私有函数,I2C专用,等待从器件接收方的应答
  44           ---------------------------------------------------------------------------------*/
  45          void WaitAck(void)
  46          {
  47   1      //      unsigned char errtime=255;//因故障接收方无ACK,超时值为255。
  48   1      //      pcf8563_sda = 1;        //写1准备读
  49   1      //      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  50   1              pcf8563_scl = 1;
  51   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  52   1      //      while(pcf8563_sda) 
  53   1      //      {
  54   1      //              errtime--; 
  55   1      //              if (!errtime) 
C51 COMPILER V7.50   PCF8563                                                               10/18/2005 14:13:31 PAGE 2   

  56   1      //              {
  57   1      //                      pcf8563_stop();
  58   1      //              //      pcf8563Error=0xaa;                      
  59   1      //              }
  60   1      //      }
  61   1              pcf8563_scl=0;  
  62   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  63   1      }
  64          
  65          /**--------------------------------------------------------------------------------
  66           调用方式:void SendAck(void) ﹫2001/07/0 4
  67           函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。
  68           ---------------------------------------------------------------------------------*/
  69          void SendAck(void)
  70          {
  71   1              pcf8563_sda = 0; _nop_();_nop_();_nop_();// send ack
  72   1              //第9位clk
  73   1              pcf8563_scl = 1;
  74   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();        
  75   1              pcf8563_scl = 0;
  76   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  77   1      
  78   1      }
  79          
  80          /**--------------------------------------------------------------------------------
  81           调用方式:void I2CSend(uchar ch) ﹫2001/07/0 5
  82           函数说明:私有函数,I2C专用
  83           ---------------------------------------------------------------------------------*/
  84          void pcf8563_sendbyte(unsigned char ch)
  85          {
  86   1              unsigned char i = 8;
  87   1              while (i--)
  88   1              {
  89   2                      pcf8563_scl=0;
  90   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  91   2                      pcf8563_sda=(bit)((ch&0x80) >> 7); 
  92   2                      ch<<=1; 
  93   2                      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  94   2                      pcf8563_scl=1; 
  95   2                      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  96   2              }
  97   1              pcf8563_scl=0;
  98   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  99   1      
 100   1              WaitAck();
 101   1      }
 102          
 103          /**--------------------------------------------------------------------------------
 104           调用方式:uchar I2CReceive(void) ﹫2001/07/0 5
 105           函数说明:私有函数,I2C专用
 106           ---------------------------------------------------------------------------------*/
 107          unsigned char pcf8563_receivebyte(void)
 108          {
 109   1              unsigned char i=8;
 110   1              unsigned char ddata=0;
 111   1      
 112   1              pcf8563_sda = 1;        //写1为读做准备
 113   1      
 114   1              while (i--)
 115   1              {       
 116   2                      ddata <<= 1;
 117   2                      pcf8563_scl = 0;
C51 COMPILER V7.50   PCF8563                                                               10/18/2005 14:13:31 PAGE 3   

 118   2                      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 119   2                      pcf8563_scl = 1;
 120   2                      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 121   2                      ddata |= (unsigned char)pcf8563_sda;                            
 122   2              }
 123   1              pcf8563_scl = 0;
 124   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 125   1              SendAck();
 126   1              return ddata;
 127   1      }
 128          
 129          /**--------------------------------------------------------------------------------
 130          调用方式:void GetPCF8563(uchar firsttype,uchar count,uchar *buff) ﹫2001/08/0 7
 131          函数说明:读取时钟芯片PCF8563的时间,设置要读的第一个时间类型firsttype,并设置读取
 132          的字节数,则会一次把时间读取到buff中。顺序是:
 133          0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年
 134          ---------------------------------------------------------------------------------*/
 135          void set_pcf8563(unsigned char time_type,unsigned char time_value)
 136          {       
 137   1              pcf8563_start();
 138   1      
 139   1              pcf8563_sendbyte(0xa2);                         //器件地址,写   
 140   1              pcf8563_sendbyte(time_type);            //发送数据-时间类型
 141   1              pcf8563_sendbyte(time_value);       //发送设置时间值    
 142   1              pcf8563_stop(); 
 143   1      }
 144          
 145          unsigned char get_pcf8563(unsigned char time_type)
 146          {       
 147   1              unsigned char time_value;
 148   1              
 149   1              pcf8563_start();
 150   1      
 151   1              pcf8563_sendbyte(0xa2);         
 152   1              pcf8563_sendbyte(time_type);    
 153   1      
 154   1              pcf8563_start();
 155   1              pcf8563_sendbyte(0xa3);                         //器件地址,读
 156   1              time_value = pcf8563_receivebyte();     
 157   1              
 158   1              pcf8563_stop();
 159   1      
 160   1              return time_value;
 161   1      }
 162          
 163          void init_pcf8563(void)
 164          {
 165   1              pcf8563_start();
 166   1              pcf8563_sendbyte(0xa2);                         //器件地址,写
 167   1              pcf8563_sendbyte(0x00);                         //地址0为控制状态寄存器
 168   1              pcf8563_sendbyte(0x00);                         //发送数据-普通模式,开启时钟  
 169   1              pcf8563_stop();
 170   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    324    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.50   PCF8563                                                               10/18/2005 14:13:31 PAGE 4   

   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 + -