|
#include"reg52.h"
sbit scl=P3^7;
sbit sda=P3^6;
#define unch unsigned char
//延时
void delay()
{
unch j;
for(j=0;j<200;j++)
{;}
}
//开启24C02
void start()
{
sda=1;
scl=1;
delay();
sda=0;
}
//停止24C02
void stop()
{
sda=0;
scl=1;
delay();
sda=1;
}
//应答
void ack()
{
sda=1;
scl=1;
delay();
while(sda);
scl=0;
}
//非应答
void nack()
{
sda=1;
scl=1;
delay();
scl=0;
}
//写一字节
void wb(unch temp)
{
unch i;
for(i=0;i<8;i++)
{
temp=temp&0x80;
scl=1;
temp=temp<<1;
delay();
scl=0;
}
ack();
}
//读一字节
unch read()
{
unch j,rb=0;
for(j=8;j>0;j--)
{
scl=1;
rb=rb<<1;
scl=0;
rb=rb|((unch)(sda));
}
return(rb);
}
//在归定地址中写一数据
void writeadd(unch date,unch add)
{
start();
wb(0xa0);//写主地址
wb(add);//写芯片地址
wb(date);//写数据
stop();
delay();
}
//在规定地址中读一数据
unch readadd(unch a)
{
unch d; //读操作得到的数据
start();
wb(0xa0);//写入指令0xa0
wb(a); //写入地址a
start();
wb(0xa1);
d=read(); //从地址a中读出数据
nack();
stop();
return(d); // 返回得到的数据
}
//主函数
main()
{
writeadd(0xf0,0x05);
delay();
P0=readadd(0x05); //P0接有发光二极管
while(1);
}
_____________________________
程序下载后,一直是全部亮的,也就是P0=0xff;肯请高手帮我看看错在哪里?谢谢
|
|