新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)模擬I2C總線讀寫(xiě)EEPROM(24CXX)程序一

單片機(jī)模擬I2C總線讀寫(xiě)EEPROM(24CXX)程序一

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
下面是一個(gè)最簡(jiǎn)單的讀寫(xiě)程序,可以用來(lái)檢測(cè)線路狀況。先附上程序和電路,后面附有說(shuō)明。

電路:

本文引用地址:http://2s4d.com/article/201611/316791.htm

說(shuō)明:P2口的LED都是我用來(lái)檢測(cè)電路執(zhí)行到哪一步的,個(gè)人覺(jué)得一目了然。

程序:

#include
#define unit unsigned int
#define uchar unsigned char
int ok;
sbit scl=P0^0;
sbit sda=P0^1;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;

delay(void) //delay
{
int i;
led1=1;
for(i=0;i<1;i++) led1=0;
}

start(void) //start
{
sda=1;
scl=1;
delay();
sda=0;
delay();
scl=0;
led0=0;
}

stop(void) //stop
{
sda=0;
scl=1;
delay();
sda=1;
delay();
scl=0;
}

checkanswer(void) //check answer
{
sda=1;
scl=1;
if(sda==1)
{
F0=1;
led7=0;
}
scl=0;
led3=0;
}

sendabyte(int temps) //send a byte
{
uchar n=8;
while(n--)
{
led2=1;
if((temps&0x80)==0x80)
{
sda=1;
scl=1;
delay();
scl=0;
}
else
{
sda=0;
scl=1;
delay();
scl=0;
}
temps=temps<<1;
led2=0;
}
}

reciveabyte() //recive a byte
{
uchar n=8,tempr;
while(n--)
{//uchar idata *abyte
scl=1;
tempr=tempr<<1;
if(sda==1)
tempr=tempr|0x01;
else
tempr=tempr&0xfe;
scl=0;
}
ok=tempr;
return(ok);
}

main(void) //MAIN
{
start();

sendabyte(0xa0);
checkanswer();
if(F0==1) return;

sendabyte(0x00);
checkanswer();
if(F0==1) return;

sendabyte(0x11);
checkanswer();
if(F0==1) return;
/*-----------------------*/
start();

sendabyte(0xa0);
checkanswer();
if(F0==1) return;

sendabyte(0x00);
checkanswer();
if(F0==1) return;

start();

sendabyte(0xa1);
checkanswer();
if(F0==1) return;

reciveabyte();
if(ok==0x11) led6=0;
stop();
}

說(shuō)明:

1、寫(xiě)驅(qū)動(dòng)程序之前建議了解清楚24CXX系列芯片的讀寫(xiě)時(shí)序,中文資料可以到我的網(wǎng)盤下載,免注冊(cè)下載鏈接:http://wdpvip.qupan.com/6293600.html

2、程序功能:先在地址0x00寫(xiě)入一個(gè)數(shù)據(jù)0x11,然后再讀出來(lái),若寫(xiě)入的數(shù)據(jù)和讀出的數(shù)據(jù)一樣就點(diǎn)亮led6。



評(píng)論


技術(shù)專區(qū)

關(guān)閉