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

📄 pcf8563-01.lst

📁 ... .. 单片机接口技术实用子程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   PCF8563_01                                                            05/05/2005 00:25:59 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE PCF8563_01
OBJECT MODULE PLACED IN PCF8563-01.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil20\C51\BIN\C51.EXE PCF8563-01.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          sbit SDA=P1^0;                          // 将p1.0口模拟数据口
   4          sbit SCL=P1^1;                          // 将p1.1口模拟时钟口
   5          #define MIN    0x02 //秒寄存器
   6          #define SEC    0x03 //分寄存器
   7          #define HOUR   0x04 //时寄存器
   8          #define DAY    0x05 //日寄存器
   9          #define WEEK   0x06 //周寄存器
  10          #define MONTH  0x07 //月寄存器
  11          #define YEAR   0x08 //年寄存器
  12          #define read_ADD  0xA3 //写器件地址
  13          #define write_ADD 0xA2 //读器件地址
  14          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};                  
  15          unsigned char g8563_Store[4]; /*时间交换区,全局变量声明*/
  16          unsigned char code c8563_Store[4]={0x00,0x59,0x07,0x01}; /*写入时间初值:星期一 07:59:00*/
  17          
  18          bit   bdata SystemError;                // 从机错误标志位
  19          //--------------------------------------------------------------------------------------------------
  20          // 函数名称: iic_start()
  21          // 函数功能: 启动I2C总线子程序
  22          //--------------------------------------------------------------------------------------------------
  23          void iic_start(void)
  24          {       EA=0;            //时钟保持高,数据线从高到低一次跳变,I2C通信开始
  25   1              SDA = 1;         
  26   1              SCL = 1;
  27   1              delayNOP();      // 延时5us 
  28   1              SDA = 0;
  29   1              delayNOP();
  30   1              SCL = 0;
  31   1      }
  32          //--------------------------------------------------------------------------------------------------
  33          // 函数名称: iic_stop()
  34          // 函数功能: 停止I2C总线数据传送子程序
  35          //--------------------------------------------------------------------------------------------------
  36          void iic_stop(void)
  37          { 
  38   1              SDA = 0;           //时钟保持高,数据线从低到高一次跳变,I2C通信停止
  39   1              SCL = 1;
  40   1              delayNOP();
  41   1              SDA = 1;
  42   1              delayNOP();
  43   1              SCL = 0;
  44   1      }
  45          //--------------------------------------------------------------------------------------------------
  46          // 函数名称: slave_ACK
  47          // 函数功能: 从机发送应答位子程序
  48          //--------------------------------------------------------------------------------------------------
  49          void slave_ACK(void)
  50          {
  51   1              SDA = 0;    
  52   1              SCL = 1;
  53   1              delayNOP();                     
  54   1              SDA = 1;
  55   1              SCL = 0;
C51 COMPILER V7.06   PCF8563_01                                                            05/05/2005 00:25:59 PAGE 2   

  56   1      }
  57          //--------------------------------------------------------------------------------------------------
  58          // 函数名称: slave_NOACK
  59          // 函数功能: 从机发送非应答位子程序,迫使数据传输过程结束
  60          //--------------------------------------------------------------------------------------------------
  61          void slave_NOACK(void)
  62          { 
  63   1              SDA = 1;   
  64   1              SCL = 1;
  65   1              delayNOP();
  66   1              SDA = 0;
  67   1              SCL = 0;
  68   1      }
  69          //--------------------------------------------------------------------------------------------------
  70          // 函数名称: check_ACK
  71          // 函数功能: 主机应答位检查子程序,迫使数据传输过程结束
  72          //--------------------------------------------------------------------------------------------------
  73          void check_ACK(void)
  74          { 
  75   1              SDA = 1;      // 将p1.0设置成输入,必须先向端口写1
  76   1              SCL = 1;
  77   1              F0 = 0;
  78   1              if(SDA == 1)    // 若SDA=1表明非应答,置位非应答标志F0
  79   1                      F0 = 1;
  80   1              SCL = 0;
  81   1      }
  82          
  83          //--------------------------------------------------------------------------------------------------
  84          // 函数名称: IICSendByte
  85          // 入口参数: ch
  86          // 函数功能: 发送一个字节
  87          //--------------------------------------------------------------------------------------------------
  88          void IICSendByte(unsigned char ch)
  89          { 
  90   1              unsigned char idata n=8;     // 向SDA上发送一位数据字节,共八位
  91   1              while(n--)
  92   1              { 
  93   2                      if((ch&0x80) == 0x80)    // 若要发送的数据最高位为1则发送位1
  94   2                      {
  95   3                              SDA = 1;    // 传送位1
  96   3                              SCL = 1;
  97   3                              delayNOP();
  98   3                              SDA = 0;
  99   3                              SCL = 0;    
 100   3                      }
 101   2                      else
 102   2                      {  
 103   3                              SDA = 0;    // 否则传送位0
 104   3                              SCL = 1;
 105   3                              delayNOP();
 106   3                              SCL = 0;  
 107   3                      }
 108   2                      ch = ch<<1;    // 数据左移一位
 109   2              }
 110   1      }
 111          //--------------------------------------------------------------------------------------------------
 112          // 函数名称: IICreceiveByte
 113          // 返回接收的数据
 114          // 函数功能: 接收一字节子程序
 115          //--------------------------------------------------------------------------------------------------
 116          unsigned char IICreceiveByte(void)
 117          {
C51 COMPILER V7.06   PCF8563_01                                                            05/05/2005 00:25:59 PAGE 3   

 118   1              unsigned char idata n=8;    // 从SDA线上读取一上数据字节,共八位
 119   1              unsigned char tdata;
 120   1              while(n--)
 121   1              {
 122   2                      SDA = 1;
 123   2                      SCL = 1;
 124   2                      tdata = tdata<<1;    // 左移一位,或_crol_(temp,1)
 125   2                      if(SDA == 1)
 126   2                              tdata = tdata|0x01;    // 若接收到的位为1,则数据的最后一位置1
 127   2                      else 
 128   2                              tdata = tdata&0xfe;    // 否则数据的最后一位置0
 129   2                      SCL=0;
 130   2              }
 131   1              return(tdata);
 132   1      }
 133          //--------------------------------------------------------------------------------------------------
 134          // 用户调用子程序
 135          // 函数名称: write_CFGbyte
 136          // 入口参数: CFG_add寄存器地址,CFG_data要写入寄存器的数值
 137          // 函数功能: 发送n位数据子程序
 138          //--------------------------------------------------------------------------------------------------
 139          void write_CFGbyte(unsigned char CFG_add,unsigned char CFG_data)
 140          {          
 141   1              //unsigned char idata send_da,i=0;
 142   1              iic_start();                // 启动I2C
 143   1              IICSendByte(write_ADD);     // 发送器件写地址
 144   1              check_ACK();                // 检查应答位
 145   1          if(F0 == 1)

⌨️ 快捷键说明

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