求助24C02,写不进,读不出,不知问题出在哪?请指点一下
#include <at89x51.h> #include <regx51.h> #include <intrins.h> #define unchar unsigned char #define unint unsigned int #define nop _nop_();_nop_();
unchar dispbuf[9]; sbit SDA=P3^5;//定义数据线 sbit SCL=P3^4;//定义时钟线 sbit clk=P2^0 ; sbit din=P2^1 ; sbit en=P2^2 ; void ack(); void noack(); void delay(unint value) { while(value!=0) value--; }
/********************************************************* **名称:I2C_Start **功能:启动I2C **输入:无 **返回:无 *********************************************************/ void start() { SDA=1; SCL=1; nop;nop; SDA=0; nop;nop; SCL=0;//钳位I2C总线,准备发送数据 } /********************************************************** **名称:I2C_Stop **功能:停止I2C **输入:无 **返回:无 **********************************************************/ void stop() { SDA=0; SCL=1; nop;nop; SDA=1; nop;nop; SCL=0; } /********************************************************** **名称:Ack **功能:应答信号 **输入:无 **返回:无 **********************************************************/ void ack() { SDA=0; SCL=1; nop;nop; SCL=0; SDA=1; } /******************************************************** **名称:NoAck **功能:发送非应答信号 **输入:无 **返回:无 ********************************************************/ void noack() { SDA=1; SCL=1; SCL=0; } /******************************************************** **名称:Test_Ack() **功能:检测应答位 *********************************************************/ bit testack() { bit errorbit; SCL=1; SDA=1;//读入数据 errorbit=SDA; SCL=0; return(errorbit); } /******************************************************** **名称:SendData() **功能:发送一字节数据 **输入:buffer **返回: *******************************************************/ write8bit(unchar input) { unchar temp; for (temp=8;temp!=0;temp--) { SDA=(bit)(input&0x80); SCL=1; SCL=0; input=input<<1; } } /************************************************************** **名称:uint ReceiveData() **功能:接收一字节数据 **输入: **返回:ucReceData **说明:将接收的数据存放在ucReceData中 **************************************************************/ void write24c02(unchar value,unchar address) { start(); write8bit(0xa0); testack(); write8bit(address); testack(); write8bit(value); testack(); stop(); nop;nop; } //读8位 unchar read8bit() { unchar temp,byte=0; for(temp=8;temp<0;temp--) { SCL=1; byte=byte<<1; byte=byte|((unchar)(SDA)); SCL=0; } return(byte); }
//读一个字节 unchar read24c02(unchar address) { unchar ch; start(); write8bit(0xa0); testack(); write8bit(address); testack(); start(); write8bit(0xa1); testack(); ch=read8bit(); noack(); stop(); return(ch); } /*************************************************************** **名称:main() **功能: **输入: **返回: **说明: ****************************************************************/ void tsled(void) { unchar ts0,i,j; clk=0; en=0; delay(10); for(j=0;j<9;j++) { ts0=dispbuf[j]; for(i=0;i<4;i++) { clk=1; ts0=ts0<<1; if(AC==1) din=1; else din=0; clk=0; nop; delay(3); } } en=1;
}
void main() { unchar c1,c2; while(1) { dispbuf[8]=0x0; dispbuf[7]=0x01; dispbuf[6]=0x0; dispbuf[5]=0x0; dispbuf[0]=0x1; write24c02(0x58,0x02); c1=read24c02(0x02); dispbuf[1]=c1%10; dispbuf[2]=c1/105; delay(100); write24c02(0x39,0x03); c2=read24c02(0x03); dispbuf[4]=c2%10; dispbuf[3]=c2/10; tsled(); } }
|