专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
搞了几天的PCF8563时钟芯片。。求助。。
2019-07-21 07:07
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
5221
18
1422
I2C有应答,但是不管写什么数据进去,读出来都是为0。有应答,应该可以说时序没有问题吧?、不知道为什么??晶振起振了。。换了几片的8563都不行。。写数据是按手册来写的。。望搞过的大侠求求助。。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
mvip
2019-07-21 19:08
给你一直在用的代码
#include "
CF8563.h"
// 读取时间
uchar ReadDateTime(DATETIME *dt)
{
uchar xdata i, buf[7];
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0; // 写地址 0x02
if(!IIC_SendByte(0x02)) return 0;
IIC_BitStart(); // 写读控制字
if(!IIC_SendByte(PCF8563_RD)) return 0;
for(i=0; i<7; i++)
{
buf
= IIC_RcvByte();
if(i<7)
{
SDA = 0;
IIC_Clock();
}
else
{
SDA = 1;
IIC_Clock();
IIC_BitStop();
}
}
dt->year = ((buf[6]>>4)*10) + (buf[6] & 0x0F);
dt->month = (((buf[5]>>4) & 0x01)*10) + (buf[5] & 0x0F);
dt->day = (((buf[3]>>4) & 0x03)*10) + (buf[3] & 0x0F);
dt->hour = (((buf[2]>>4) & 0x03)*10) + (buf[2] & 0x0F);
dt->minute = (((buf[1]>>4) & 0x07)*10) + (buf[1] & 0x0F);
dt->second = (((buf[0]>>4) & 0x07)*10) + (buf[0] & 0x0F);
return 1;
}
// 启动时钟
uchar StartDateTime(void)
{
uchar xdata i, buf[2];
buf[0] = 0;
buf[1] = 0;
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0;
if(!IIC_SendByte(0x00)) return 0; //address
for(i=0; i<2; i++)
{
if(!IIC_SendByte(buf
)) return 0;
}
IIC_BitStop();
return 1;
}
// 设置时间
uchar SetDateTime(DATETIME *dt)
{
uchar xdata i, buf[7];
buf[0] = ((dt->second/10) << 4) + (dt->second%10);
buf[1] = ((dt->minute/10) << 4) + (dt->minute%10);
buf[2] = ((dt->hour/10) << 4) + (dt->hour%10);
buf[3] = ((dt->day/10) << 4) + (dt->day%10);
buf[4] = 1;
buf[5] = ((dt->month/10) << 4) + (dt->month%10);
buf[6] = ((dt->year/10) << 4) + (dt->year%10);
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0;
if(!IIC_SendByte(0x02)) return 0; //address
for(i=0; i<7; i++)
{
if(!IIC_SendByte(buf
)) return 0;
}
IIC_BitStop();
return 1;
}
// 判断时间
bit IsDateTime(void)
{
DATETIME xdata dt;
ReadDateTime(&dt);
if((dt.year > 99) || (dt.year < 0)) return 0;
if((dt.month > 12) || (dt.month <= 0)) return 0;
if((dt.day > 31) || (dt.day <= 0)) return 0;
if((dt.hour > 23) || (dt.hour < 0)) return 0;
if((dt.minute > 59) || (dt.minute < 0)) return 0;
if((dt.second > 59) || (dt.second < 0)) return 0;
return 1;
}
加载中...
查看其它18个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include "CF8563.h"
// 读取时间
uchar ReadDateTime(DATETIME *dt)
{
uchar xdata i, buf[7];
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0; // 写地址 0x02
if(!IIC_SendByte(0x02)) return 0;
IIC_BitStart(); // 写读控制字
if(!IIC_SendByte(PCF8563_RD)) return 0;
for(i=0; i<7; i++)
{
buf = IIC_RcvByte();
if(i<7)
{
SDA = 0;
IIC_Clock();
}
else
{
SDA = 1;
IIC_Clock();
IIC_BitStop();
}
}
dt->year = ((buf[6]>>4)*10) + (buf[6] & 0x0F);
dt->month = (((buf[5]>>4) & 0x01)*10) + (buf[5] & 0x0F);
dt->day = (((buf[3]>>4) & 0x03)*10) + (buf[3] & 0x0F);
dt->hour = (((buf[2]>>4) & 0x03)*10) + (buf[2] & 0x0F);
dt->minute = (((buf[1]>>4) & 0x07)*10) + (buf[1] & 0x0F);
dt->second = (((buf[0]>>4) & 0x07)*10) + (buf[0] & 0x0F);
return 1;
}
// 启动时钟
uchar StartDateTime(void)
{
uchar xdata i, buf[2];
buf[0] = 0;
buf[1] = 0;
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0;
if(!IIC_SendByte(0x00)) return 0; //address
for(i=0; i<2; i++)
{
if(!IIC_SendByte(buf)) return 0;
}
IIC_BitStop();
return 1;
}
// 设置时间
uchar SetDateTime(DATETIME *dt)
{
uchar xdata i, buf[7];
buf[0] = ((dt->second/10) << 4) + (dt->second%10);
buf[1] = ((dt->minute/10) << 4) + (dt->minute%10);
buf[2] = ((dt->hour/10) << 4) + (dt->hour%10);
buf[3] = ((dt->day/10) << 4) + (dt->day%10);
buf[4] = 1;
buf[5] = ((dt->month/10) << 4) + (dt->month%10);
buf[6] = ((dt->year/10) << 4) + (dt->year%10);
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0;
if(!IIC_SendByte(0x02)) return 0; //address
for(i=0; i<7; i++)
{
if(!IIC_SendByte(buf)) return 0;
}
IIC_BitStop();
return 1;
}
// 判断时间
bit IsDateTime(void)
{
DATETIME xdata dt;
ReadDateTime(&dt);
if((dt.year > 99) || (dt.year < 0)) return 0;
if((dt.month > 12) || (dt.month <= 0)) return 0;
if((dt.day > 31) || (dt.day <= 0)) return 0;
if((dt.hour > 23) || (dt.hour < 0)) return 0;
if((dt.minute > 59) || (dt.minute < 0)) return 0;
if((dt.second > 59) || (dt.second < 0)) return 0;
return 1;
}
一周热门 更多>