No.61688 作者:lxpin 邮件:lxpin@263.net ID:11614 登陆:12次 文章数:19篇 最后登陆IP:220.202.55.199 最后登陆:2006/6/3 8:04:24 注册:2003/4/27 21:31:52 财富:201 发帖时间:2004/9/4 20:54:46 发贴者IP:220.202.55.189 标题:lxpin:我的DS1302死活读不出时钟数据来,请帮忙看一下? 摘要:No.61688我的DS1302死活读不出时钟数据来,请帮忙看一下? /********************************************************************* 模块名称:DS1302.c 功 能:实时时钟模块 时钟芯片型号:DS1302 *********************************************************************/ #include <reg51.h> #include <INTRINS.h> #define uchar unsigned char sbit T_CLK = P2^2; /*实时时钟时钟线引脚 */ sbit T_IO = P2^1; /*实时时钟数据线引脚 */ sbit T_RST = P2^0; /*实时时钟复位线引脚 */ sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; uchar buffer2[7]={0x45,0x45,0x15,0x13,0x3,0x2,0x01}; //初始数秒,分,时,日,月,星期,年 void RTInputByte(uchar d); /* 输入 1Byte */ uchar RTOutputByte(void); /* 输出?1Byte */ void W1302(uchar ucaddr, uchar ucda); uchar R1302(uchar ucaddr); void Burstw1302t(uchar *pwclock); void Burstr1302t(uchar *prclock); void Burstw1302r(uchar *pnreg); void burstr1302r(uchar *prreg); void set1302(uchar *pclock); /* 设置初始时间 */ void get1302(uchar uccurtime[]); /* 读取1302当前时间 */ /********************************************************************* **********************************************************************/ void main(void) { W1302(0x80,0x00); //启动ds102振荡 set1302(buffer2); //调用设置初始时间 while(1) { get1302(buffer2); }; } /******************************************************************** 函 数 名:RTInputByte() 功 能:实时时钟写入一字节 说 明:往DS1302写入1Byte数据 (内部函数) 入口参数:d 写入的数据 返 回 值:无 /***********************************************************************/ void RTInputByte(uchar d) { uchar i; ACC = d; for(i=8; i> 0; i--) { T_IO = ACC0; /*相当于汇编中的 RRC */ T_CLK = 1; _nop_(); T_CLK = 0; ACC = ACC > > 1; } } /******************************************************************** 函 数 名:RTOutputByte() 功 能:实时时钟读取一字节 说 明:从DS1302读取1Byte数据 (内部函数) 入口参数:无 *********************************************************************/ uchar RTOutputByte(void) { uchar i; for(i=8; i> 0; i--) { ACC = ACC > > 1; /*相当于汇编中的 RRC */ T_CLK = 0; _nop_(); ACC7 = T_IO; T_CLK = 1; _nop_(); } return(ACC); } /******************************************************************** 函 数 名:W1302() 功 能:往DS1302写入数据 说 明:先写地址,后写命令/数据 (内部函数) 调 用:RTInputByte() , RTOutputByte() 入口参数:ucAddr: DS1302地址, ucData: 要写的数据 返 回 值:无 *********************************************************************/ void W1302(uchar ucAddr, uchar ucda) { T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); /* 地址,命令 */ RTInputByte(ucda); /* 写1Byte数据*/ T_CLK = 1; T_RST = 0; } /******************************************************************** 函 数 名:R1302() 功 能:读取DS1302某地址的数据 说 明:先写地址,后读命令/数据 (内部函数) 调 用:RTInputByte() , RTOutputByte() 入口参数:ucAddr: DS1302地址 返 回 值:ucData :读取的数据 ********************************************************************/ uchar R1302(uchar ucAddr) { uchar ucData; T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); /* 地址,命令 */ ucData = RTOutputByte(); /* 读1Byte数据 */ T_CLK = 1; T_RST = 0; return(ucData); } /******************************************************************** 函 数 名:BurstW1302T() 功 能:往DS1302写入时钟数据(多字节方式) 说 明:先写地址,后写命令/数据 调 用:RTInputByte() 入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制 8Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 1B ************************************************* ......
>>返回讨论的主题
|