当前位置:首页 > 单片机 > 单片机
[导读]电路原理图 EEPROM为ATMEL公司的AT24C01A。单片机为ATMEL公司的AT89C51。软件说明C语言为Franklin C V3.2。将源程序另存为testi2c.c,用命令C51 testi2c.cL51 TESTI2C.OBJOHS51 TESTI2C编译,连接,得到TESTI2C.HEX

电路原理图

 


EEPROM为ATMEL公司的AT24C01A。单片机为ATMEL公司的AT89C51。


软件说明

C语言为Franklin C V3.2。将源程序另存为testi2c.c,用命令

C51 testi2c.c

L51 TESTI2C.OBJ

OHS51 TESTI2C

编译,连接,得到TESTI2C.HEX文件,即可由编程器读入并进行写片,实验。

3.源程序

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineAddWr0xa0/*器件地址选择及写标志*/

#defineAddRd0xa1/*器件地址选择及读标志*/

#defineHidden0x0e/*显示器的消隐码*/

/*有关全局变量*/

sbitSda=P3^7;/*串行数据*/

sbitScl=P3^6;/*串行时钟*/

sbitWP=P3^5;/*硬件写保护*/

voidmDelay(ucharj)

{

uinti;

for(;j>0;j--)

{

for(i=0;i<125;i--)

{

;

}

}

}

/*发送起始条件*/

voidStart(void)/*起始条件*/

{

Sda=1;

Scl=1;

_nop_();

_nop_();

_nop_();

_nop_();

Sda=0;

_nop_();

_nop_();

_nop_();

_nop_();

}

voidStop(void)/*停止条件*/

{

Sda=0;

Scl=1;

_nop_();

_nop_();

_nop_();

_nop_();

Sda=1;

_nop_();

_nop_();

_nop_();

_nop_();

}

voidAck(void)/*应答位*/

{

Sda=0;

_nop_();

_nop_();

_nop_();

_nop_();

Scl=1;

_nop_();

_nop_();

_nop_();

_nop_();

Scl=0;

}

voidNoAck(void)/*反向应答位*/

{

Sda=1;

_nop_();

_nop_();

_nop_();

_nop_();

Scl=1;

_nop_();

_nop_();

_nop_();

_nop_();

Scl=0;

}

voidSend(ucharData)/*发送数据子程序,Data为要求发送的数据*/

{

ucharBitCounter=8;/*位数控制*/

uchartemp;/*中间变量控制*/

do

{

temp=Data;

Scl=0;

_nop_();

_nop_();

_nop_();

_nop_();

if((temp&0x80)==0x80)/*如果最高位是1*/

Sda=1;

else

Sda=0;

Scl=1;

temp=Data<<1;/*RLC*/

Data=temp;

BitCounter--;

}while(BitCounter);

Scl=0;

}

ucharRead(void)/*读一个字节的数据,并返回该字节值*/

{

uchartemp=0;

uchartemp1=0;

ucharBitCounter=8;

Sda=1;

do{

Scl=0;

_

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭