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

📄 pcf8563-01.lst

📁 ... .. 单片机接口技术实用子程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 146   1              { 
 147   2                      SystemError = 1;
 148   2                      return;    // 若非应答表明器件错误或已坏,置错误标志位SystemError
 149   2              }
 150   1              IICSendByte(CFG_add);       // 发送寄存器地址
 151   1              check_ACK();                // 检查应答位
 152   1          if(F0 == 1)
 153   1              { 
 154   2                      SystemError = 1;
 155   2                      return;    // 若非应答表明器件错误或已坏,置错误标志位SystemError
 156   2              }
 157   1          IICSendByte(CFG_data);       // 发送寄存器数据
 158   1              check_ACK();                // 检查应答位
 159   1          if(F0 == 1)
 160   1              { 
 161   2                      SystemError = 1;
 162   2                      return;    // 若非应答表明器件错误或已坏,置错误标志位SystemError
 163   2              }
 164   1              iic_stop();         // 全部发完则停止
 165   1      }
 166          //--------------------------------------------------------------------------------------------------
 167          // 用户调用子程序
 168          // 函数名称: receiveNbyte
 169          // 入口参数: CFG_add寄存器地址地址
 170          // 出口参数: receive_da
 171          // 函数功能: 接收某个寄存器数据子程序
 172          //--------------------------------------------------------------------------------------------------
 173          unsigned char receive_CFGbyte(unsigned char idata CFG_add)
 174          { 
 175   1              unsigned char idata receive_da;
 176   1              iic_start();
 177   1          IICSendByte(write_ADD);  //器件写地址
 178   1              check_ACK();
 179   1              if(F0 == 1)
C51 COMPILER V7.06   PCF8563_01                                                            05/05/2005 00:25:59 PAGE 4   

 180   1              {
 181   2                      SystemError = 1;
 182   2                      return(0);
 183   2              }
 184   1              IICSendByte(CFG_add);  //寄存器地址
 185   1              check_ACK();
 186   1              if(F0 == 1)
 187   1              {
 188   2                      SystemError = 1;
 189   2                      return(0);
 190   2              }
 191   1           iic_start();
 192   1          IICSendByte(read_ADD);  //器件读地址
 193   1                      if(F0 == 1)
 194   1              {
 195   2                      SystemError = 1;
 196   2                      return(0);
 197   2              }
 198   1          receive_da=IICreceiveByte();
 199   1              slave_NOACK();       // 收到最后一个字节后发送一个非应答位
 200   1              iic_stop();
 201   1              return(receive_da);
 202   1      }
 203          //--------------------------------------------------------------------------------------------------
 204          // 用户调用函数
 205          // 函数名称: receive_CFGNbyte
 206          // 入口参数: CFG_add寄存器地址地址,n连续读数位,* buff存储区地址
 207          // 函数功能: 接收n个寄存器数据子程序
 208          //--------------------------------------------------------------------------------------------------
 209          void receive_CFGNbyte(unsigned char CFG_add, unsigned char n,unsigned char * buff)
 210          { 
 211   1              unsigned char  receive_da,i=0;
 212   1              iic_start();
 213   1          IICSendByte(write_ADD);  //器件写地址
 214   1              check_ACK();
 215   1              if(F0 == 1)
 216   1              {
 217   2                      SystemError = 1;
 218   2                      return;
 219   2              }
 220   1              IICSendByte(CFG_add);  //寄存器地址
 221   1              check_ACK();
 222   1              if(F0 == 1)
 223   1              {
 224   2                      SystemError = 1;
 225   2                      return;
 226   2              }
 227   1         iic_start();
 228   1          IICSendByte(read_ADD);  //器件读地址
 229   1                      if(F0 == 1)
 230   1              {
 231   2                      SystemError = 1;
 232   2                      return;
 233   2              }
 234   1              while(n--)
 235   1              { 
 236   2                      receive_da=IICreceiveByte();
 237   2                      buff[i++]=receive_da;
 238   2                      slave_ACK();    // 收到一个字节后发送一个应答位
 239   2              }
 240   1              slave_NOACK();    // 收到最后一个字节后发送一个非应答位
 241   1              iic_stop();
C51 COMPILER V7.06   PCF8563_01                                                            05/05/2005 00:25:59 PAGE 5   

 242   1      }
 243          //--------------------------------------------------------------------------------------------------
 244          // 用户调用函数
 245          // 函数名称: P8563_Readtime
 246          // 函数功能: 读出时间信息
 247          //--------------------------------------------------------------------------------------------------
 248          void P8563_Readtime()
 249          {   unsigned char time[7];
 250   1          receive_CFGNbyte(MIN,0x07,time);
 251   1          g8563_Store[0]=time[0]&0x7f; /*秒*/
 252   1          g8563_Store[1]=time[1]&0x7f; /*分*/
 253   1          g8563_Store[2]=time[2]&0x3f; /*小时*/
 254   1          g8563_Store[3]=time[4]&0x07; /*星期*/
 255   1      }
 256          //--------------------------------------------------------------------------------------------------
 257          // 用户调用函数
 258          // 函数名称: P8563_settime
 259          // 函数功能: 写时间修改值
 260          //--------------------------------------------------------------------------------------------------
 261          void P8563_settime()
 262          {
 263   1           unsigned char i;
 264   1           for(i=2;i<=4;i++) { write_CFGbyte(i,g8563_Store[i-2]); }
 265   1           write_CFGbyte(6,g8563_Store[3]);
 266   1      }
 267          /********************************************
 268          P8563的初始化-----外部调用
 269          ********************************************/
 270          void P8563_init()
 271          {
 272   1          unsigned char i;
 273   1          if((receive_CFGbyte(0x0a))!=0x8) /*检查是否第一次启动,是则初始化时间*/
 274   1          {
 275   2              for(i=0;i<=3;i++) 
 276   2                      g8563_Store[i]=c8563_Store[i]; /*初始化时间*/
 277   2              P8563_settime();
 278   2              write_CFGbyte(0x0,0x00);
 279   2              write_CFGbyte(0xa,0x8);  /*8:00报警*/
 280   2              write_CFGbyte(0x01,0x12); /*报警有效*/
 281   2              write_CFGbyte(0xd,0xf0);
 282   2          }
 283   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    476    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      10
   IDATA SIZE       =   ----       3
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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