计算机网络钟中PCF,请问,为什么我向时钟芯片PCF8563中写入初始化数据后,读出来...

请问,为什么我向时钟芯片PCF8563中写入初始化数据后,读出来

作者:oversea 栏目:单片机

请问,为什么我向时钟芯片PCF8563中写入初始化数据后,读出来

显示的全是255,这是什么问题?

* - 本贴最后修改时间:2007-3-23 9:25:55 修改者:oversea

作者:ayb_ice于 2007/3/23 9:24:00 发布:

随便说说

肯定是读错了。。。

作者:oversea于 2007/3/23 9:27:00 发布:

哪位老师可否给个例子让我参考一下?

作者:myway于 2007/3/23 10:45:00 发布:

我把用过的程式方在我的网站

我把用过的程式方在我的网站, 你有空自己去下载看看.在下载的页面!

作者:ayb_ice于 2007/3/23 13:38:00 发布:

随便说说

去 '24LC02连续读不成功'帖子看看...

作者:oversea于 2007/3/23 14:51:00 发布:

我不是立即读的,中间都有延时,可还是不行.

作者:ayb_ice于 2007/3/23 15:17:00 发布:

随便说说

上ZLG的网站上去下个吧...

作者:qjy_dali于 2007/3/23 19:40:00 发布:

是啊,255不就是全1

PCF8563有没应答我看都不一定

作者:zdjtcl1于 2007/3/24 8:35:00 发布:

回复

你读的东西没读出来,时序不对,或读写程序有错误

作者:zdjtcl1于 2007/3/24 8:40:00 发布:

IIC.c读写时序

#pragma db cd

#include

#include

#include

void sta()

{

SDA=1;

SCL=1;

while(SCL==0)

{

;

}

_nop_();

SDA=0;

_nop_();

_nop_();

SCL=0;

}

void stop()

{

SDA=0;

SCL=1;

while(SCL==0)

{

;

}

_nop_();

SDA=1;

_nop_();

_nop_();

SCL=0;

}

void mack()

{

SDA=0;

SCL=1;

_nop_();

_nop_();

SCL=0;

SDA=1;

}

void mnack()

{

SDA=1;

SCL=1;

_nop_();

_nop_();

SCL=0;

SDA=0;

}

void cack()

{

SDA=1;

SCL=1;

F0=0;

if(SDA==0)

{

SCL=0;

_nop_();

_nop_();

}

else

{

F0=1;

SCL=0;

_nop_();

_nop_();

}

}

void wrbyt(uchar shu)

{

uchar i;

if((shu&0x80)>0)

{

SDA=1;

}

else

{

SDA=0;

}

SCL=1;

while(SCL==0)

{;}

_nop_();

SCL=0;

SDA=0;

shu=_crol_(shu,1);

for(i=1;1<8;i++)

{if((shu&0x80)>0)

{wrbyt1();}

else

{wrbyt0();}

shu=_crol_(shu,1);

}

}

void wrbyt0()

{

SDA=0;

SCL=1;

_nop_();

_nop_();

SCL=0;

}

void wrbyt1()

{

SDA=1;

SCL=1;

_nop_();

_nop_();

SCL=0;

SDA=0;

}

uchar rdbyt()

{

uchar nn=0xff,mm=0x80,uu=0x7f;

uchar j;

uint q=0;

for(j=0;j<8;j++)

{

SDA=1;

SCL=1;

if(SDA==0)

{nn=(nn&uu);

nn=_crol_(nn,1);

SCL=0;

}

else

{

nn=(nn|mm);

nn=_crol_(nn,1);

SCL=0;

}

}

return(nn);

}

void wrnbyta(uchar slaw,uchar gg[],uchar n)

{

do{

sta();

wrbyt(slaw);

cack();

}while(F0==1);

wrbyt(gg[n]);

cack();

}

void wrnbyt(uchar slaw,uchar NUMBER,uchar ff[])

{

uchar idata k;

do{

sta();

wrbyt(slaw);

cack();

}while(F0==1);

for(k=0;k

{

wrbyt(ff[k]);

cack();

while(F0==1)

{

wrnbyta(slaw,ff,k);

}

}

stop();

}

void rdnbyt(NUMBER,slar,qq)

uchar NUMBER,slar,qq[];

{

uchar idata data0,l;

do{

sta();

wrbyt(slar);

cack();

}while(F0==1);

for(l=0;l

{

data0=rdbyt();

qq[l]=data0;

if(l

{mack();}

}

mnack();

stop();

}

void delay(uint x)

{

uchar j;

while(x--)

{

for(j=0;j<150;j++)

{;}

}

}

作者:zdjtcl1于 2007/3/24 8:41:00 发布:

IIC.H头文件

sbit SDA=P2_0;

sbit SCL=P2_1;

#define uCHAR unsigned CHAR

#define uint unsigned int

extern void delay(uint x);

extern void sta();

extern void stop();

extern void mack();

extern void mnack();

extern void cack();

extern void wrbyt(uCHAR shu);

extern void wrbyt0();

extern void wrbyt1();

extern uCHAR rdbyt();

extern void wrnbyt(uCHAR slaw,uCHAR NUMBER,uCHAR ff[]);

extern void rdnbyt(uCHAR NUMBER,uCHAR slar,uCHAR qq[]);

extern void wrnbyta(uCHAR slaw,uCHAR gg[],uCHAR n);

作者:zdjtcl1于 2007/3/24 8:50:00 发布:

8563

#include

#include

//include"iic.c"

#define uint unsigned int

#define uCHAR unsigned CHAR

sbit SDA=P3^1;

sbit SCL=P3^0;

uCHAR code shu1[]={0xfd,0x61,0xbb,0xeb,0x67,0xcf,0xdf,0xe1,0xff,0xef,0xa7,0xf5,0x97,0x03};

uCHAR data dingshi[]={0x00,0x03,0x00,0x02};

uCHAR data xian[]={0x00,0x00,0x00,0x00};

uCHAR k[]={0x00};

uCHAR a1=0x00,a3=0;

bit a2;

uCHAR idata rd[3]={0x01,0xa0,0xa1};

uCHAR idata wr[3]={0x01,0xa0,0xa1};

uCHAR TEMP[5]={0x00,0x00,0x00,0x00,0x00};

uCHAR n=0;

void delay(uint x);

void sta();

void stop();

void mack();

void mnack();

void cack();

void wrbyt(uCHAR shu);

void wrbyt0();

void wrbyt1();

uCHAR rdbyt();

void wrnbyt(uCHAR slaw,uCHAR NUMBER,uCHAR ff[]);

void rdnbyt(uCHAR NUMBER,uCHAR slar,uCHAR qq[]);

void wrnbyta(uCHAR slaw,uCHAR gg[],uCHAR n);

void xianshi();

void miaojian();

uCHAR panjian();

void fenjia();

void jianchuli();

uCHAR panjian()

{

P3_2=1;

P3_0=1;

if(P3_2==0)

{

n=n+1;

return 1;

}

else

{

P3_2=1;

P3_0=0;

if(P3_2==0)

{

P3_0=1;

return 2;

}

}

}

void fenjia()

{

uCHAR a8[]={0x00,0x00};

if(n==1)

{

a8[0]=dingshi[0];

a8[1]=dingshi[1];

}

else if(n==2)

{

a8[0]=dingshi[2];

a8[1]=dingshi[3];

}

if(a8[1]<9)

{

a8[1]=a8[1]+1;

}

else

{

if(a8[0]<9)

{

a8[0]=a8[0]+1;

a8[1]=0x00;

}

else

{

a8[1]=0x00;

a8[0]=0x00;

}

}

if(n==1)

{

dingshi[0]=a8[0];

dingshi[1]=a8[1];

}

else if(n==2)

{

dingshi[2]=a8[0];

dingshi[3]=a8[1];

}

}

void jianchuli()

{

uCHAR jk;

n=1;

while(n<3)

{

if(n==1)

{

xian[0]=0x0a;

xian[1]=0x0b;

xian[2]=dingshi[0];

xian[3]=dingshi[1];

}

else if(n==2)

{

xian[0]=0x0a;

xian[1]=0x0b;

xian[2]=dingshi[2];

xian[3]=dingshi[3];

}

for(jk=0;jk<100;jk++)

{

xianshi();

}

jk=panjian();

if(jk==1)

{

n=n+1;

}

else if(jk==2)

{

fenjia();

}

}

}

void sta()

{

SDA=1;

SCL=1;

while(SCL==0)

{

;

}

_nop_();

SDA=0;

_nop_();

_nop_();

SCL=0;

}

void stop()

{

SDA=0;

SCL=1;

while(SCL==0)

{

;

}

_nop_();

SDA=1;

_nop_();

_nop_();

SCL=0;

}

void mack()

{

SDA=0;

SCL=1;

_nop_();

_nop_();

SCL=0;

SDA=1;

}

void mnack()

{

SDA=1;

SCL=1;

_nop_();

_nop_();

SCL=0;

SDA=0;

}

void cack()

{

SDA=1;

SCL=1;

F0=0;

if(SDA==0)

{

SCL=0;

_nop_();

_nop_();

}

else

{

F0=1;

SCL=0;

_nop_();

_nop_();

}

}

void wrbyt(uCHAR shu)

{

uCHAR i;

if((shu&0x80)>0)

{

SDA=1;

}

else

{

SDA=0;

}

SCL=1;

while(SCL==0)

{;}

_nop_();

SCL=0;

SDA=0;

shu=_crol_(shu,1);

for(i=1;1<8;i++)

{if((shu&0x80)>0)

{wrbyt1();}

else

{wrbyt0();}

shu=_crol_(shu,1);

}

}

void int00() interrupt 0

{

uCHAR m,k;

uCHAR xian1[]={0x00,0x00,0x00,0x00};

TR0=0;

IE=0x00;

xianshi();

n=0;

P3_0=1;

P3_2=1;

m=panjian();

if(m==1)

{

for(k=0;k<4;k++)

{

xian1[k]=xian[k];

}

jianchuli();

TEMP[0]=0x01;

TEMP[1]=dingshi[0];

TEMP[2]=dingshi[1];

TEMP[3]=dingshi[2];

TEMP[4]=dingshi[3];

wrnbyt(0xa0,5,TEMP);

delay(300);

TEMP[0]=0x10;

TEMP[1]=0x01;

wrnbyt(0xa0,2,TEMP);

}

for(k=0;k<4;k++)

{

xian[k]=xian1[k];

}

P3_0=1;

P3_2=1;

IE=0x83;

TR0=1;

}

void wrbyt0()

{

SDA=0;

SCL=1;

_nop_();

_nop_();

SCL=0;

}

void wrbyt1()

{

SDA=1;

SCL=1;

_nop_();

_nop_();

SCL=0;

SDA=0;

}

uCHAR rdbyt()

{

uCHAR nn=0xff,mm=0x80,uu=0x7f;

uCHAR j;

uint q=0;

for(j=0;j<8;j++)

{

SDA=1;

SCL=1;

if(SDA==0)

{nn=(nn&uu);

nn=_crol_(nn,1);

SCL=0;

}

else

{

nn=(nn|mm);

nn=_crol_(nn,1);

SCL=0;

}

}

return(nn);

}

void wrnbyta(uCHAR slaw,uCHAR gg[],uCHAR n)

{

do{

sta();

wrbyt(slaw);

cack();

}while(F0==1);

wrbyt(gg[n]);

cack();

}

void wrnbyt(uCHAR slaw,uCHAR NUMBER,uCHAR ff[])

{

uCHAR idata k;

do{

sta();

wrbyt(slaw);

cack();

}while(F0==1);

for(k=0;k

{

wrbyt(ff[k]);

cack();

while(F0==1)

{

wrnbyta(slaw,ff,k);

}

}

stop();

}

void rdnbyt(NUMBER,slar,qq)

uCHAR NUMBER,slar,qq[];

{

uCHAR idata data0,l;

do{

sta();

wrbyt(slar);

cack();

}while(F0==1);

for(l=0;l

{

data0=rdbyt();

qq[l]=data0;

if(l

{mack();}

}

mnack();

stop();

}

void delay(uint x)

{

uCHAR j;

while(x--)

{

for(j=0;j<150;j++)

{;}

}

}

void main()

{

SP=0x60;

TCON=0x01;

IP=0x01;

TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

IE=0x83;

wrnbyt(0xa0,1,0x10); // 读0x10地址一字节

rdnbyt(1,0xa1,k);

if(k[0]!=1)

{

TEMP[0]=0x01;

TEMP[1]=dingshi[0];

TEMP[2]=dingshi[1];

TEMP[3]=dingshi[2];

TEMP[4]=dingshi[3];

wrnbyt(0xa0,5,TEMP);  //写TEMP数组(5字节)

delay(300);

}

wrnbyt(0xa0,1,0x01);

rdnbyt(4,0xa1,dingshi); //读0x01开始4字节

xian[0]=dingshi[0];

xian[1]=dingshi[1];

xian[2]=0x00;

xian[3]=0x00;

a2=0;

TR0=1;

while(1)

{

TR0=1;

P3_2=1;

xianshi();

P3_7=a2;

}

}

void xianshi()

{

uCHAR i=0x00;

for(i=0;i<4;i++)

{

P1=0x01;

P3_3=1;

P3_4=1;

P3_5=1;

P1_0=1;

P1=shu1[xian[i]];

SWITCH(i)

{

case 0:

{

P1_0=0;

}

break;

case 1:

{

P3_5=0;

}

break;

case 2:

{

P3_4=0;

}

break;

case 3:

作者:myway于 2007/3/24 15:20:00 发布:

有谁有空看你的程序呀!

应该还是要你自己搞定才行!

作者:mdhysq于 2007/3/25 11:30:00 发布:

自己搞吧

你按照芯片资料说的用仿真器试吧,没问题的,网上放的程序一般都有点小问题,你可以用它做参考,在它的基础上进行修改,很快可以搞出来的

作者:tong2gang于 2007/3/25 16:37:00 发布:

会不会没有设时间啊?

记得这个芯片初始化时要写入时间才能工作的,你在初始化的时候有没有先写入个时间给它?随便什么都行!

作者:ayb_ice于 2007/3/26 8:00:00 发布:

随便说说

多看看IIC原理吧...

Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值