當前位置:編程學習大全網 - 編程語言 - 請教:AT24C02程序問題!

請教:AT24C02程序問題!

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar f;

sbit sda=P3^4;

sbit scl=P3^3;

void delayus()//五微秒

{;;}

void delayms(uint z)//壹毫秒

{

uint x,y;

for(y=z;y>0;y--)

for(x=110;x>0;x--);

}

void init()//初始化

{

scl=1;

delayus();

sda=1;

delayus();

}

void start()//開始信號

{

sda=1;

delayus();

scl=1;

delayus();

sda=0;

delayus();

scl=0;

delayus();

}

void stop()//停止信號

{

sda=0;

delayus();

scl=1;

delayus();

sda=1;

delayus();

}

/*void response()//應答信號

{

delayus();

scl=1;

delayus();

}*/

void write_byte(uchar dat)//寫壹個字節

{ bit ack_bit;

uchar b,c;

scl=0;

delayus();

sda=1;

for(b=0;b<8;b++)

{

//c=dat&(0x80<<1);

c = (bit)(dat&0x80);

delayus();

sda=c;

delayus();

scl=1;

delayus();

scl=0;

delayus();

dat<<=1;

delayus();

}

/*下面是response();*/

sda=1;// scl=0;

delayus();

scl=1; //sda=1;

delayus();

ack_bit = sda; //接受設備(AT24Cxx)向SDA送低電平,表示已經接收到壹個字節 ,若送高電平,表示沒有接收到,傳送異常

scl = 0; //SCL為低電平時,SDA上數據才允許變化(即允許以後的數據傳遞)

}

uchar read_byte()//讀壹個字節

{

uchar d,e;

/* scl=0;//數據可以變化

delayus();

sda=1;

delayus();*/

for(d=0;d<8;d++)

{

scl=1;//數據穩定的時候可以進行對數據的操作,但是不可以改變數據狀態

e<<=1;

//e=sda|(0x01<<d);

e|=(unsigned char)sda;

delayus();

scl=0;//來個脈沖把數據發送出去(低電平時數據可變)

}

return e;

}

void write_24c02(uchar address,uchar dat)

{

start();

write_byte(0xa0);

//response();

write_byte(address);

// response();

write_byte(dat);

// response();

stop();

}

uchar read_24c02(uchar address)

{

start();

write_byte(0xa0);

// response();

write_byte(address);

// response();

start();

write_byte(0xa1);

// response();

f=read_byte();

stop();

return f;

}

void main()

{

delayus();

write_24c02(3,0x02);

delayms(10);

P1=read_24c02(3);

while(1);

}

  • 上一篇:環縣職業中等專業學校專業有哪些?專業介紹
  • 下一篇:多軸數控加工技術有什麽特點?
  • copyright 2024編程學習大全網