专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
求助:PCF8563无法读出数据
2020-01-13 18:27
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
3189
8
8
本帖最后由 墨逸、 于 2019-3-8 15:09 编辑
如题,读出的数据一直是 2045-25-45 45:45:45
板子上的参数和原理图完全一致
#include "mcu.h"
u8 Time_data[7]={0X00,0X44,0X13,0X08,0X05,0X03,0X19};//初始化数组
//===================================================
void iic_delay(unsigned int t)
{
unsigned int a;
for(a=1;a<=t;a++);
}
//===================================================
void iic_clock(void)
{
iic_scl=0;
iic_delay(3);
iic_scl=1;
iic_delay(3);
iic_scl=0;
iic_delay(3);
}
//===================================================
// void waitask()
// {
// iic_sda=1;
// iic_scl=1;
// iic_delay(3);
// wait:
// if(iic_sda==1)goto wait;
// iic_scl=0;
// }
//===================================================
// void noask()
// {
// iic_sda=1; //无应答产生
// iic_clock();
// }
//===================================================
//启动器件子程序
//*******************************************/
void start_iic()
{
iic_sda=1;
iic_scl=1;
iic_sda=0;
iic_delay(3);
iic_scl=0;
iic_delay(3);
}
///*******************************************
//停止器件子程序
//*******************************************/
void stop_iic()
{
iic_scl=0;
iic_sda=0;
iic_scl=1;
iic_delay(3);
iic_sda=1;
}
///*******************************************
//主机发送一个字节数据
//*******************************************/
void iic_SendByte(unsigned char bytedata)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(bytedata & 0x80) iic_sda=1;
else iic_sda=0;
iic_clock();
bytedata<<=1;
}
}
///**************************************************
//主机接收一个字节数据子程序
//***************************************************/
unsigned char iic_ReceiveByte(void)
{
char i,bytedata=0;
iic_sda=1;
for(i=0;i<8;i++)
{
bytedata<<=1;
if(iic_sda) bytedata |= 0x01;
iic_clock();
}
return bytedata;
}
//================================================================
void Wrbyte(unsigned char dat)//写一个字节
{
iic_SendByte(dat);
iic_sda=1; //写完一个字节后释放总线
iic_scl=1; //加上脉冲, 相当于应答信号
iic_scl=0;
}
//================================================================
unsigned char Rebyte(void) //读一个字节
{
unsigned char a;
a=iic_ReceiveByte();
iic_sda=1; //写完一个字节后释放总线
iic_scl=0; //加上脉冲, 相当于应答信号
return(a);
}
//==========读取时间==========
void Read_8563(uchar * Time_tmp)
{
uchar i;
for(i=0;i<7;i++)
{
start_iic();
Wrbyte(Wr_8563); //写操作器件地址
Wrbyte(i+0x02); //写入单元地址
start_iic();
Wrbyte(Re_8563); //读操作器件地址
switch(i)
{
case 0: Time_tmp[0]=(Rebyte())&0x7f;break;//获取秒数据
case 1: Time_tmp[1]=(Rebyte())&0x7f;break;//获取分钟
case 2: Time_tmp[2]=(Rebyte())&0x3f;break;//获取小时
case 3: Time_tmp[3]=(Rebyte())&0x3f;break;//获取日
case 4: Time_tmp[4]=(Rebyte())&0x07;if(Time_tmp[4]==0)Time_tmp[4]=7;break;//获取星期
case 5: Time_tmp[5]=(Rebyte())&0x1f;break;//获取月
case 6: Time_tmp[6]=(Rebyte())&0x7f;break;//获取年
default:break;
}
stop_iic();
}
for(i=0;i<7;i++)
Time_tmp[i]=Time_tmp[i]/16*10+Time_tmp[i]%16;//BCD码转换成16进制
}
//==================================================================
void set_8563(uchar * Time_tmp)
{
unsigned char i;
for(i=0;i<7;i++)
{
Time_tmp[i]=Time_tmp[i]/10*16+Time_tmp[i]%10;
start_iic();
Wrbyte(Wr_8563);//选择器件
Wrbyte(0x02+i);//选择单元地址
Wrbyte(Time_tmp[i]);//写入数据
stop_iic();
}
}
复制代码
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
go2deathward
1楼-- · 2020-01-14 13:06
墨逸、 发表于 2019-3-8 16:00
现在怀疑芯片问题了
刚刚又换了一块芯片,结果其读出的数据疑似是随机的
我觉得你还是该查下iic的时序
加载中...
上一页
1
2
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
东软载波ESF0654 PDS开发板串口USART0代码分享
1 个回答
普通32位单片机使用linux的应用代码
5 个回答
东软载波ESF0654 PDS开发板AT24C04的调试
9 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
我觉得你还是该查下iic的时序
一周热门 更多>