<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機讀寫(xiě)AT24C02源代碼(詳細注釋)

51單片機讀寫(xiě)AT24C02源代碼(詳細注釋)

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò ) 收藏
在P1口上接八個(gè)led燈,結果就顯示在這八個(gè)燈上面。AT24C02的接線(xiàn)方式見(jiàn)程序的頂部的定義。以下是源代碼:

#include //包含頭文件
typedef unsigned char uchar;
typedef unsigned int uint;
#define write_c02 0xa0
#define read_c02 0xa1
sbit sda = P2^0;
sbit scl = P2^1;
void delay()
{ //delay:5us
;;
}
//i2c:init
void i2c_init()
{
sda = 1;
delay();
scl = 1;
delay();
}
//delayms:
void delayms(uint xms)
{
uchar x, y;
for(x = xms; x > 0; x--)
for(y = 110; y > 0; y--);
}
//start:
void start() //啟動(dòng)i2c
{
sda = 1;
scl = 1;
delay();//延時(shí)必須大于4.7us,此約為五微秒
sda = 0; //在scl為高電平時(shí),sda一個(gè)下降沿為啟動(dòng)信號
delay();
}
//stop:
void stop() //停止i2c
{
sda = 0;
scl = 1;
delay();
sda = 1; //在scl為高電平時(shí),sdasda一個(gè)上升沿為停止信號
delay();
}
//ack:
void ack() //應答信號0
{
uchar i = 0; //等待變量
scl = 1;//在scl為高電平期間等待應答
delay();
while((sda == 1) && i < 250)//若為應答0即退出,從機向主機發(fā)送應答信號
i++;//等待一段時(shí)間
scl = 0; //應答之后將scl拉低
delay();
}
//nack:
void nack() //非應答
{
scl = 1;//在scl為高電平期間,由主機向從機發(fā)送一個(gè)1,非應答信號
delay();
sda = 1;
scl = 0; //應答之后將scl拉低
delay();
}
//send byte:
void send_byte(uchar date)//寫(xiě)一個(gè)字節
{
uchar i, temp;
temp = date; //存入要寫(xiě)入的數據,即要發(fā)送到sda上的數據
for(i = 0; i < 8; i++)
{ //發(fā)送8位
temp <<= 1; //to CY 將數據的最高位移入到PSW中的CY位中
scl = 0;//只有在scl為低電平時(shí),才允許sda上的數據變化
delay();
sda = CY; //將CY里的數據發(fā)送到sda數據線(xiàn)上
delay(); //可以延時(shí)
scl = 1; //在scl為高電平時(shí),不允許sda上的數據變化,使數據穩定
delay();
scl = 0;//允許sda數據線(xiàn)的數據變化,等待下一個(gè)數據的傳輸
delay();
}
//wait ack:發(fā)送完一個(gè)字節數據后要主機要等待從機的應答,第九位
scl = 0;//允許sda變化
delay();
sda = 1;//wait:ack,sda拉高等待應答,當sda=0時(shí),表示從機的應答
delay();
}
//read: byte
uchar read_byte() //讀一個(gè)字節數據
{
uchar i, j, k;
scl = 0; //讀之前先允許sda變化
delay(); //等待數據
for(i = 0; i < 8; i++)
{
scl = 1; //不允許sda變化
delay(); //使sda數據穩定后開(kāi)始讀數據
j = sda; //讀出sda上的數據
k = (k << 1)| j; //將數據通過(guò)|運算存入k中
scl = 0;//允許sda變化等待下一位數據的到來(lái)
delay();
}
//delay();//可不用延時(shí)
return k;//返回讀出的數據
}
//write:at24c02 在at24c02中的指定地址寫(xiě)入數據
void write_at24c02(uchar address, uchar date)
{
start(); //啟動(dòng)i2c
send_byte(write_c02);//寫(xiě)入期間地址和寫(xiě)操作
ack(); //從機應答0
send_byte(address); //寫(xiě)入寫(xiě)數據的單元地址
ack(); //ack0
send_byte(date); //在指定地址中寫(xiě)入數據
ack(); //從機應答0
stop(); //停止i2c
}
//read: at24c02 在at24c02的指定地址中讀出寫(xiě)入的數據
uchar read_at24c02(address)
{
uchar dat;//用來(lái)存儲讀出的數據
start(); //啟動(dòng)i2c
send_byte(write_c02); //寫(xiě)入at24c02器件地址和寫(xiě)操作
ack(); //從機應答0
send_byte(address); //寫(xiě)入要讀取AT24C02的數據的單元地址
ack(); //從機應答0
start(); //再次啟動(dòng)i2c
send_byte(read_c02); //寫(xiě)入AT24C02器件地址和讀操作
ack();//從機應答‘0’
dat = read_byte();//讀出指定地址中的數據
nack(); //主機發(fā)出非應答‘1’
stop(); //停止i2c
return dat; //返回讀出的數據
}
//main:
void main()
{
uchar i;
i2c_init();
start();
while(1)
{
for(i = 0x00; i < 0xff; i++)
{
write_at24c02(10, i);
delayms(10);//需等待十毫秒
P1 = read_at24c02(10);//1010 1010
delayms(2000);
}
}
}


關(guān)鍵詞: 51單片機AT24C02源代

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>