No.30012 作者:laiweiguo 邮件:laiweiguo@163.com ID:10924 登陆:11次 文章数:8篇 最后登陆IP:124.114.33.89 最后登陆:2008/5/5 18:02:11 注册:2003/4/5 18:48:34 财富:161 发帖时间:2003/5/13 20:26:18 发贴者IP:211.163.69.129 标题:laiweiguo:大家好,我想请教高手有关串行IIC总线存储器AT24C256芯片的读写程序问题! 摘要:No.30012大家好,我想请教高手有关串行IIC总线存储器AT24C256芯片的读写程序问题! 大家好,我想请教各位高手有关串行总线IIC存储器的读写问题,我用的这个芯片是AT24C256,我是通过修过我已经调通的AT24C02来做的,只是加了发送第二个字节地址的语句后就不能工作了,所以现在摸不着头绪,请各位大侠帮忙,小弟在此谢了!下面是我的程序:回复请发到我的邮箱:laiweiguo@163.com #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define unit unsigned int sbit ISCL=P1^1; sbit ISDA=P1^0; uchar sdata,rece[64],slvdevice; void I2cWait(void)/*I2CBUS等待*/ { _nop_(); _nop_(); } void DelayX1ms(unit count)/*延时XmS子程序*/ { unit i; uchar j; for(i=0;i <count;i++) for(j=0;j <110;j++); } void I2cStart(void)/*I2CBUS起始信号*/ { ISDA=1; ISCL=1; _nop_(); ISDA=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ISCL=0; } void I2cStop(void) /*I2CBUS停止信号*/ { ISDA=0; _nop_(); _nop_(); ISCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ISDA=1; } void I2cInit(void)/*I2CBUS初始化*/ { ISDA=1; ISCL=1; } bit slave_ack(void)/*I2CBUS应答信号*/ { bit ack; ISDA=1; _nop_(); _nop_(); ISCL=1; _nop_(); _nop_(); _nop_(); _nop_(); ack=ISDA; ISCL=0; return ack; } bit I2cSendByte(uchar bytedata)/*传送一个字节到slave*/ { uchar i; bit ack; for (i=0;i <8;i++) { if (bytedata&0x80)ISDA=1; else ISDA=0; bytedata < <=1; ISCL=1; I2cWait(); I2cWait(); ISCL=0; I2cWait(); } ack=slave_ack(); return ack; } void IICACK(void) { ISDA=0; _nop_(); _nop_(); ISCL=1; _nop_(); _nop_(); _nop_(); _nop_(); ISCL=0; } /*****************不对IIC总线产生应答***************/ void IICNoAck(void) { ISDA=1; _nop_(); _nop_(); ISCL=1; _nop_(); _nop_(); _nop_(); _nop_(); ISCL=0; } void I2cSendAckmowledge(bit ack)/*传送确认信号至slave*/ { ISDA=ack; ISCL=1; I2cWait(); ISCL=0; } uchar I2cReceiveByte(void) /*从slave接收一个字节*/ { uchar i,bytedata=0; ISDA=1; for (i=0;i <8;i++) { _nop_(); _nop_(); _nop_(); ISCL=1; I2cWait(); bytedata < <=1; if (ISDA) bytedata|=0x01; ISCL=0; } return bytedata; } void I2cByteWrite(uchar device,uchar address1,uchar address2,uchar bytedata)/*主机将一字节数据写入指定slave地址中*/ { bit ack; I2cStart(); resent1:I2cSendByte(device); if (ack==1) goto resent1; resent2:I2cSendByte(address1); if ......
>>返回讨论的主题
|