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

📄 testtime.lst

📁 这是我测试pcf8563的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   TESTTIME                                                              11/27/2008 22:32:57 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE TESTTIME
OBJECT MODULE PLACED IN C:\DOCUME~1\ADMINI~1\桌面\我时间\TESTTIME.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\DOCUME~1\ADMINI~1\桌面\我时间\TESTTIME.C DB SB OE

line level    source

   1          #include <reg52.H>
   2          #include <absacc.h>
   3          #include <string.h>
   4          #include <intrins.h>
   5          #include <math.h>
   6          #define uint            unsigned int
   7          #define uchar           unsigned char
   8          #define ulong           unsigned long
   9          
  10          #define ulong unsigned long
  11          
  12          //I2C定义位
  13          sbit SDA=P2^1;            //模拟I2C数据传送位
  14          sbit SCL=P2^0;            //模拟I2C时钟控制位
  15          bit ack;                      //应答标志位
  16          
  17          uchar P8563_Store[5]; /*时间交换区,全局变量声明*/
  18          uchar code CP8563_Store[5]={0x21,0x09,0x28,0x11,0x08}; /*写入时间初值:08-11-20 00:00*/
  19          /********************************************************************************
  20                                               I2C总线协议
  21          ********************************************************************************/
  22          
  23          
  24          /*******************************************************************
  25                              (1) 起动总线函数
  26          函数原型: void  Start_I2c();
  27          功能:       启动I2C总线,即发送I2C起始条件.
  28          
  29          ********************************************************************/
  30          void Start_I2c()
  31          {
  32   1        SDA=1;             //发送起始条件的数据信号
  33   1        _nop_();
  34   1        SCL=1;
  35   1        _nop_();         //起始条件建立时间大于4.7us,延时
  36   1        _nop_();
  37   1        _nop_();
  38   1        _nop_();
  39   1        _nop_();
  40   1        SDA=0;           //发送起始信号
  41   1        _nop_();        // 起始条件锁定时间大于4μs
  42   1        _nop_();
  43   1        _nop_();
  44   1        _nop_();
  45   1        _nop_();
  46   1        SCL=0;             //钳住I2C总线,准备发送或接收数据
  47   1        _nop_();
  48   1        _nop_();
  49   1      }
  50          /*******************************************************************
  51                               (2)结束总线函数
  52          函数原型: void  Stop_I2c();
  53          功能:       结束I2C总线,即发送I2C结束条件.
  54           ********************************************************************/
  55          void Stop_I2c()
C51 COMPILER V8.08   TESTTIME                                                              11/27/2008 22:32:57 PAGE 2   

  56          {
  57   1        SDA=0;              //发送结束条件的数据信号
  58   1        _nop_();           //发送结束条件的时钟信号
  59   1        SCL=1;             //结束条件建立时间大于4μs
  60   1        _nop_();
  61   1        _nop_();
  62   1        _nop_();
  63   1        _nop_();
  64   1        _nop_();
  65   1        SDA=1;            //发送I2C总线结束信号
  66   1        _nop_();
  67   1        _nop_();
  68   1        _nop_();
  69   1        _nop_();
  70   1      }
  71          /*******************************************************************
  72                          (3)字节数据发送函数
  73          函数原型: void  SendByte(uchar c);
  74          功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
  75               此状态位进行操作.(不应答或非应答都使ack=0 假)
  76               发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
  77          ********************************************************************/
  78          void  SendByte(uchar c)
  79          {
  80   1       uchar BitCnt;
  81   1        for(BitCnt=0;BitCnt<8;BitCnt++)  //要传送的数据长度为8位
  82   1          {
  83   2           if((c<<BitCnt)&0x80)SDA=1;   //判断发送位
  84   2             else  SDA=0;
  85   2           _nop_();
  86   2           SCL=1;               //置时钟线为高,通知被控器开始接收数据位
  87   2            _nop_();
  88   2            _nop_();               //保证时钟高电平周期大于4μs
  89   2            _nop_();
  90   2            _nop_();
  91   2            _nop_();
  92   2           SCL=0;
  93   2          }
  94   1          _nop_();
  95   1          _nop_();
  96   1          SDA=1;               //8位发送完后释放数据线,准备接收应答位
  97   1          _nop_();
  98   1          _nop_();
  99   1          SCL=1;
 100   1          _nop_();
 101   1          _nop_();
 102   1          _nop_();
 103   1          if(SDA==1)ack=0;
 104   1             else ack=1;        //判断是否接收到应答信号
 105   1          SCL=0;
 106   1          _nop_();
 107   1          _nop_();
 108   1      }
 109          /*******************************************************************
 110                           (4)字节数据接收函数
 111          函数原型: uchar  RcvByte();
 112          功能:  用来接收从器件传来的数据,并判断总线错误(不发应答信号),
 113               发完后请用应答函数。
 114          ********************************************************************/
 115          uchar  RcvByte()
 116          {
 117   1        uchar retc;
C51 COMPILER V8.08   TESTTIME                                                              11/27/2008 22:32:57 PAGE 3   

 118   1        uchar BitCnt;
 119   1      
 120   1        retc=0;
 121   1        SDA=1;             //置数据线为输入方式
 122   1        for(BitCnt=0;BitCnt<8;BitCnt++)
 123   1            {
 124   2              _nop_();
 125   2              SCL=0;          //置时钟线为低,准备接收数据位
 126   2              _nop_();
 127   2              _nop_();         //时钟低电平周期大于4.7μs
 128   2              _nop_();
 129   2              _nop_();
 130   2              _nop_();
 131   2              SCL=1;       //置时钟线为高使数据线上数据有效
 132   2              _nop_();
 133   2              _nop_();
 134   2              retc=retc<<1;
 135   2              if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中
 136   2              _nop_();
 137   2              _nop_();
 138   2            }
 139   1        SCL=0;
 140   1        _nop_();
 141   1        _nop_();
 142   1        return(retc);
 143   1      }
 144          /********************************************************************
 145                               (5)应答子函数
 146          原型:  void Ack_I2c(bit a);
 147          
 148          功能:主控器进行应答信号,(可以是应答或非应答信号)
 149          ********************************************************************/
 150          void Ack_I2c(bit a)
 151          {
 152   1      
 153   1        if(a==0)SDA=0;     //在此发出应答或非应答信号
 154   1              else SDA=1;
 155   1        _nop_();
 156   1        _nop_();
 157   1        _nop_();
 158   1        SCL=1;
 159   1          _nop_();
 160   1          _nop_();             //时钟低电平周期大于4μs
 161   1          _nop_();
 162   1          _nop_();
 163   1          _nop_();
 164   1       SCL=0;                //清时钟线,钳住I2C总线以便继续接收
 165   1          _nop_();
 166   1          _nop_();
 167   1      }
 168          /*******************************************************************
 169                              (6)向无子地址器件发送字节数据函数
 170          函数原型: bit  ISendByte(uchar sla,ucahr c);
 171          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 172                     如果返回1表示操作成功,否则操作有误。
 173          注意:    使用前必须已结束总线。
 174          ********************************************************************/
 175          bit ISendByte(uchar sla,uchar c)
 176          {
 177   1         Start_I2c();               //启动总线
 178   1         SendByte(sla);            //发送器件地址
 179   1           if(ack==0)return(0);
C51 COMPILER V8.08   TESTTIME                                                              11/27/2008 22:32:57 PAGE 4   

 180   1         SendByte(c);               //发送数据
 181   1           if(ack==0)return(0);
 182   1        Stop_I2c();                 //结束总线
 183   1        return(1);
 184   1      }
 185          /*******************************************************************
 186                              (7)向有子地址器件发送多字节数据函数
 187          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
 188          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 189                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 190                     如果返回1表示操作成功,否则操作有误。
 191          注意:    使用前必须已结束总线。
 192          ********************************************************************/
 193          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
 194          {
 195   1         uchar i;
 196   1      
 197   1         Start_I2c();               //启动总线
 198   1         SendByte(sla);            //发送器件地址
 199   1           if(ack==0)return(0);
 200   1         SendByte(suba);            //发送器件子地址
 201   1           if(ack==0)return(0);
 202   1      
 203   1         for(i=0;i<no;i++)
 204   1          {
 205   2           SendByte(*s);               //发送数据
 206   2             if(ack==0)return(0);
 207   2           s++;
 208   2          }
 209   1       Stop_I2c();                 //结束总线
 210   1        return(1);

⌨️ 快捷键说明

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