请问,为什么我向时钟芯片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号