永发信息网

ds1302读数据偶数值出错 数据年月日时分秒只要是偶数都不正确,奇数就正常

答案:2  悬赏:30  手机版
解决时间 2021-03-24 05:12
最后发现只要接上显示器测CLK时钟引脚所有读写都正常,不接就不正常·
最佳答案
你好!把你程序和原理图发一下看看,找找原因
全部回答
void ds1302inputbyte(unsigned char d) //实时时钟写入一字节(内部函数) { unsigned char i; acc = d; for(i=8; i>0; i--) { ds1302_io = acc0; //相当于汇编中的 rrc ds1302_clk = 1; ds1302_clk = 0; acc = acc >> 1; } } unsigned char ds1302outputbyte(void) //实时时钟读取一字节(内部函数) { unsigned char i; for(i=8; i>0; i--) { acc = acc >>1; //相当于汇编中的 rrc acc7 = ds1302_io; ds1302_clk = 1; ds1302_clk = 0; } return(acc); } void write1302(unsigned char ucaddr, unsigned char ucda) //ucaddr: ds1302地址, ucdata: 要写的数据 { ds1302_rst = 0; ds1302_clk = 0; ds1302_rst = 1; ds1302inputbyte(ucaddr); // 地址,命令 ds1302inputbyte(ucda); // 写1byte数据 ds1302_clk = 1; ds1302_rst = 0; } unsigned char read1302(unsigned char ucaddr) //读取ds1302某地址的数据 { unsigned char ucdata; ds1302_rst = 0; ds1302_clk = 0; ds1302_rst = 1; ds1302inputbyte(ucaddr|0x01); // 地址,命令 ucdata = ds1302outputbyte(); // 读1byte数据 ds1302_clk = 1; ds1302_rst = 0; return(ucdata); } void ds1302_setprotect(bit flag) //是否写保护 { if(flag) write1302(0x8e,0x10); else write1302(0x8e,0x00); } void ds1302_settime(unsigned char address, unsigned char value) // 设置时间函数 { ds1302_setprotect(0); write1302(address, ((value/10)<<4 | (value%10))); } void ds1302_gettime(systemtime *time) { unsigned char readvalue; readvalue = read1302(ds1302_second); time->second = ((readvalue&0x70)>>4)*10 + (readvalue&0x0f); readvalue = read1302(ds1302_minute); time->minute = ((readvalue&0x70)>>4)*10 + (readvalue&0x0f); readvalue = read1302(ds1302_hour); time->hour = ((readvalue&0x70)>>4)*10 + (readvalue&0x0f); readvalue = read1302(ds1302_day); time->day = ((readvalue&0x70)>>4)*10 + (readvalue&0x0f); readvalue = read1302(ds1302_week); time->week = ((readvalue&0x70)>>4)*10 + (readvalue&0x0f); readvalue = read1302(ds1302_month); time->month = ((readvalue&0x70)>>4)*10 + (readvalue&0x0f); readvalue = read1302(ds1302_year); time->year = ((readvalue&0x70)>>4)*10 + (readvalue&0x0f); } void datetostr(systemtime *time) { time->datestring[0] = time->year/10 + '0'; time->datestring[1] = time->year%10 + '0'; time->datestring[2] = '-'; time->datestring[3] = time->month/10 + '0'; time->datestring[4] = time->month%10 + '0'; time->datestring[5] = '-'; time->datestring[6] = time->day/10 + '0'; time->datestring[7] = time->day%10 + '0'; time->datestring[8] = '\0'; } void timetostr(systemtime *time) { time->timestring[0] = time->hour/10 + '0'; time->timestring[1] = time->hour%10 + '0'; time->timestring[2] = ':'; time->timestring[3] = time->minute/10 + '0'; time->timestring[4] = time->minute%10 + '0'; time->timestring[5] = ':'; time->timestring[6] = time->second/10 + '0'; time->timestring[7] = time->second%10 + '0'; time->datestring[8] = '\0'; } void initial_ds1302(void) { unsigned char second=read1302(ds1302_second); if(second&0x80) ds1302_settime(ds1302_second,0); } 参考这个
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
不要带着情绪工作句子,赞美好雨下的及时的诗
填表血细胞名称形态结构功能红细胞呈________
万家湖社区B区这个地址在什么地方,我要处理
Creo2.0 m020安装一切正常,打补丁点start时
正宗遵义虾子羊肉粉的做法是怎么样的
夏天不易出汗,容易中暑怎么调理?
不是团员怎么办
iphone5进水以后可能出现的后遗症
梁宽240,底部一排能不能放4跟25的钢筋?谢谢
男人口中的第一个女人指的是谁?
分别能表现花、鸟、山、水的特点诗句
塔读小说封面有要求吗
你知道他们分别是哪个国家的人吗?对比上面4幅
浙江哪些古镇比较好玩?
成都市中道街邮政代办所地址在什么地方,想过
推荐资讯
武汉新港潘湾工业园在哪里啊,我有事要去这个
单选题下列各句没有语病的一项是A.我们深刻地
如何申请ucla研究生?
流行歌曲当中的舞蹈视频哪些比较简单易学?
二道淑圆酸菜汤多味饼NO.4地址有知道的么?有
以静开头俏字结束的一句七字诗
山东致远建材有限公司地址在哪,我要去那里办
肝不好每天吃两颗核桃四颗红枣行吗
南京软件系统培训哪个好
高桥河怎么去啊,有知道地址的么
让女儿养蚕宝宝,观察它的生长过程有什么意义
John was bored ,so he left his life in eng
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?