|
| 采购元器件好去处--维库电子市场网推荐 |
| 技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请问,为什么我向时钟芯片PCF8563中写入初始化数据后,读出来 |
| 来源:21ic 作者:oversea 栏目:单片机 |
| 请问,为什么我向时钟芯片PCF8563中写入初始化数据后,读出来 显示的全是255,这是什么问题? * - 本贴最后修改时间:2007-3-23 9:25:55 修改者:oversea |
| 1楼: | >>参与讨论 |
| 作者: ayb_ice 于 2007-3-23 9:24:00 发布:
随便说说 肯定是读错了。。。 |
|
| 2楼: | >>参与讨论 |
| 作者: oversea 于 2007-3-23 9:27:00 发布:
哪位老师可否给个例子让我参考一下? |
|
| 3楼: | >>参与讨论 |
| 作者: myway 于 2007-3-23 10:45:00 发布:
我把用过的程式方在我的网站 我把用过的程式方在我的网站, 你有空自己去下载看看.在下载的页面! |
|
| 4楼: | >>参与讨论 |
| 作者: ayb_ice 于 2007-3-23 13:38:00 发布:
随便说说 去 '24LC02连续读不成功'帖子看看... |
|
| 5楼: | >>参与讨论 |
| 作者: oversea 于 2007-3-23 14:51:00 发布:
我不是立即读的,中间都有延时,可还是不行. |
|
| 6楼: | >>参与讨论 |
| 作者: ayb_ice 于 2007-3-23 15:17:00 发布:
随便说说 上ZLG的网站上去下个吧... |
|
| 7楼: | >>参与讨论 |
| 作者: qjy_dali 于 2007-3-23 19:40:00 发布:
是啊,255不就是全1 PCF8563有没应答我看都不一定 |
|
| 8楼: | >>参与讨论 |
| 作者: zdjtcl1 于 2007-3-24 8:35:00 发布:
回复 你读的东西没读出来,时序不对,或读写程序有错误 |
|
| 9楼: | >>参与讨论 |
| 作者: zdjtcl1 于 2007-3-24 8:40:00 发布:
IIC.c读写时序 #pragma db cd #include<intrins.h> #include <reg51.h> #include<IIC.h> 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<NUMBER;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<NUMBER;l++) { data0=rdbyt(); qq[l]=data0; if(l<(NUMBER-1)) {mack();} } mnack(); stop(); } void delay(uint x) { uchar j; while(x--) { for(j=0;j<150;j++) {;} } } |
|
| 10楼: | >>参与讨论 |
| 作者: 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); |
|
| 11楼: | >>参与讨论 |
| 作者: zdjtcl1 于 2007-3-24 8:50:00 发布:
8563 #include<at89x52.h> #include<intrins.h> //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<NUMBER;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<NUMBER;l++) { data0=rdbyt(); qq[l]=data0; if(l<(NUMBER-1)) {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: |
|
| 12楼: | >>参与讨论 |
| 作者: myway 于 2007-3-24 15:20:00 发布:
有谁有空看你的程序呀! 应该还是要你自己搞定才行! PCF8563程序 |
|
| 13楼: | >>参与讨论 |
| 作者: mdhysq 于 2007-3-25 11:30:00 发布:
自己搞吧 你按照芯片资料说的用仿真器试吧,没问题的,网上放的程序一般都有点小问题,你可以用它做参考,在它的基础上进行修改,很快可以搞出来的 |
|
| 14楼: | >>参与讨论 |
| 作者: tong2gang 于 2007-3-25 16:37:00 发布:
会不会没有设时间啊? 记得这个芯片初始化时要写入时间才能工作的,你在初始化的时候有没有先写入个时间给它?随便什么都行! |
|
| 15楼: | >>参与讨论 |
| 作者: ayb_ice 于 2007-3-26 8:00:00 发布:
随便说说 多看看IIC原理吧... |
|
|
|
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |