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

📄 020.lst

📁 时钟芯片DS1302的设置、读取和测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 168           返 回 值:无
 169          ***********************************************************************/
 170          void BurstR1302T(uchar *pRClock)
 171          {
 172   1          uchar i;
 173   1          T_RST = 0;
 174   1          T_CLK = 0;
 175   1          T_RST = 1;
 176   1          RTInputByte(0xbf);             /* 0xbf:时钟多字节读命令 */
 177   1          for (i=8; i>0; i--) 
 178   1          {
 179   2             *pRClock = RTOutputByte();   /* 读1Byte数据 */
C51 COMPILER V7.09   020                                                                   09/03/2008 11:18:50 PAGE 4   

 180   2             pRClock++;
 181   2          }
 182   1          T_CLK = 1;
 183   1          T_RST = 0;
 184   1      }
 185          /******************************************************************** 
 186          
 187           函 数 名:BurstW1302R()
 188           功    能:往DS1302寄存器数写入数据(多字节方式)
 189           说    明:先写地址,后写数据(寄存器多字节方式)
 190           调    用:RTInputByte()
 191           入口参数:pWReg: 寄存器数据地址
 192           返 回 值:无
 193          ***********************************************************************/
 194          void BurstW1302R(uchar *pWReg)
 195          {
 196   1          uchar i;
 197   1          W1302(0x8e,0x00);         /* 控制命令,WP=0,写操作*/
 198   1          T_RST = 0;
 199   1          T_CLK = 0;
 200   1          T_RST = 1;
 201   1          RTInputByte(0xfe);         /* 0xbe:时钟多字节写命令 */
 202   1          for (i=31; i>0; i--)       /* 31Byte 寄存器数据 */
 203   1          {
 204   2              RTInputByte(*pWReg);    /* 写1Byte数据*/
 205   2              pWReg++;
 206   2          }
 207   1          T_CLK = 1;
 208   1          T_RST = 0;
 209   1      } 
 210          /******************************************************************** 
 211          
 212           函 数 名:BurstR1302R()
 213           功    能:读取DS1302寄存器数据
 214           说    明:先写地址,后读命令/数据(寄存器多字节方式)
 215           调    用:RTInputByte() , RTOutputByte()
 216           入口参数:pRReg: 寄存器数据地址
 217           返 回 值:无
 218          ***********************************************************************/
 219          void BurstR1302R(uchar *pRReg)
 220          {
 221   1          uchar i;
 222   1          T_RST = 0;
 223   1          T_CLK = 0;
 224   1          T_RST = 1;
 225   1          RTInputByte(0xff);            /* 0xff:时钟多字节读命令 */
 226   1          for (i=31; i>0; i--)          /*31Byte 寄存器数据 */
 227   1          {
 228   2              *pRReg = RTOutputByte();  /* 读1Byte数据 */
 229   2              pRReg++;
 230   2          }
 231   1          T_CLK = 1;
 232   1          T_RST = 0;
 233   1      }
 234          /******************************************************************** 
 235          
 236           函 数 名:Set1302()
 237           功    能:设置初始时间
 238           说    明:先写地址,后读命令/数据(寄存器多字节方式)
 239           调    用:W1302()
 240           入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 241                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
C51 COMPILER V7.09   020                                                                   09/03/2008 11:18:50 PAGE 5   

 242           返 回 值:无
 243          ***********************************************************************/
 244          void Set1302(uchar *pClock) 
 245          {
 246   1          uchar i;
 247   1          uchar ucAddr = 0x80; 
 248   1          W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
 249   1          for(i =7; i>0; i--)
 250   1          { 
 251   2              W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
 252   2              pClock++;
 253   2              ucAddr +=2;
 254   2          }
 255   1          W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
 256   1      }
 257          /******************************************************************** 
 258          
 259           函 数 名:Get1302()
 260           功    能:读取DS1302当前时间
 261           说    明:
 262           调    用:R1302() 
 263           入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
 264                                                  7Byte (BCD码)   1B 1B 1B 1B 1B  1B  1B
 265           返 回 值:无
 266          ***********************************************************************/
 267          void Get1302() 
 268          {
 269   1          uchar i;
 270   1          uchar ucAddr = 0x81;
 271   1          for (i=0; i<7; i++)
 272   1              {
 273   2          {
 274   3              ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 275   3              ucAddr += 2;
 276   3      
 277   3                      //return ucCurtime[i];
 278   3          }
 279   2              //send_char(ucCurtime[i]);
 280   2       P1=0x20;
 281   2       P2=table[ucCurtime[3]&0x0f];
 282   2       delay_ms(1);
 283   2      
 284   2       P1=0x10;
 285   2       P2=table[(0xf0&ucCurtime[3])>>4];
 286   2       delay_ms(1);
 287   2      
 288   2       P1=0x08;
 289   2       P2=table[(0x0f&ucCurtime[4])];
 290   2       delay_ms(1);
 291   2      
 292   2       P1=0x04;
 293   2       P2=table[(0xf0&ucCurtime[4])>>4];
 294   2       delay_ms(1);
 295   2       
 296   2       P1=0x02;
 297   2       P2=table[0x0f&ucCurtime[6]];
 298   2       delay_ms(1);
 299   2       
 300   2       P1=0x01;
 301   2       P2=table[(0xf0&ucCurtime[6])>>4];
 302   2       delay_ms(1);
 303   2      
C51 COMPILER V7.09   020                                                                   09/03/2008 11:18:50 PAGE 6   

 304   2              
 305   2              }
 306   1      }
 307          /*//////////////////////////////////////////////////////////////////////*/
 308          
 309          main()
 310          {       
 311   1      
 312   1              uchar *point;
 313   1              uchar w1[7]={0x58,0x59,0x23,0x29,0x07,0x07,0x07};
 314   1              point=&w1;
 315   1              
 316   1              //com_set();
 317   1          Set1302(point); 
 318   1         
 319   1              while(1)
 320   1              {
 321   2               Get1302();
 322   2              }
 323   1      }
 324          
 325          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    396    ----
   CONSTANT SIZE    =     23    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13       8
   IDATA SIZE       =   ----    ----
   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 + -