大家帮我看看这个24c08程序哪里不对
5v供电,我把所有地址管脚都拉低了,怎么在串口收到的是0x01?#include<reg51.h>
#include<intrins.h>
#include<USART.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL=P2^1;
sbit SDA=P2^0;
uchar code displaycode[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
uchar code displaybit[]={0xfe,0xfd,0xfb,0xf7};
uchar displaybuf;
void delayX2us(uchar x) //????
{
while(--x);
}
void delayXms(uchar x) //????
{
uchar i;
while(x--)
{
for(i=250;i>0;i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void start ()
{
SDA=1;
delayX2us(2);
SCL=1;
delayX2us(2);
SDA=0;
delayX2us(2);
}
void stop ()
{
SDA=0;
delayX2us(2);
SCL=1;
delayX2us(2);
SDA=1;
delayX2us(2);
}
void init()
{
SCL=1;
delayX2us(2);
SDA=1;
delayX2us(2);
}
void responds()
{
uchar i;
i=0;
SCL=1;
delayX2us(2);
while(SDA==1&&i<200)
i++;
SCL=0;
delayX2us(2);
}
void write_dat (uchar dat) //?????
{
uchar i;
for(i=0;i<8;i++)
{
SCL=0;
delayX2us(2);
SDA=(bit)(dat&0x80);
delayX2us(2);
SCL=1;
delayX2us(2);
SCL=0;
delayX2us(2);
dat<<=1;
}
SDA=1;
delayX2us(2);
}
void write(uchar dat,uchar add) // ?????dat???add
{
start();
write_dat(0xa0);
responds();
write_dat(add);
responds();
write_dat(dat);
responds();
stop();
}
uchar read_dat () //?????
{
uchar i;
uchar dat;
bit j;
for (i=0;i<8;i++)
{
dat<<=1;
SCL=0;
j=SDA;
delayX2us(2);
SCL=1;
if(j==1)
{
dat|=0x01;
}
SCL=0;
}
return dat;
}
uchar read (uchar add) //???add???????
{
uchar dat;
start();
write_dat(0xa0);
responds();
write_dat(add);
responds();
start();
write_dat(0xa1);
responds();
dat=read_dat();
delayX2us(2);
stop();
return dat;
}
void display(uchar dat) //????
{
uchar bai,shi,ge,i;
bai=dat/100;
shi=dat%100/10;
ge=dat%10;
displaybuf=bai;
displaybuf=shi;
displaybuf=ge;
for(i=0;i<3;i++)
{
P0=displaycode];
P1=displaybit;
delayX2us(5);
P1=0xff;
}
}
void main ()
{int i=0;
uchar dat,add,k;
dat=212;
add=2;
USART_Init();
init();
start();
write_dat(0xa0);
delayX2us(2);
SCL=1;
while(SDA==1&&i<200)
i++;
SBUF=SDA;
while(1);
}
看文档吧 通用器件 gongxd 发表于 2014-4-1 09:26
看文档吧 通用器件
没看到哪里不对啊 没人回答,再顶一个
页:
[1]