RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用C語(yǔ)言實(shí)現(xiàn)51單片機(jī)模擬I2C總線

Wildesbeast ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2020-05-05 15:32 ? 次閱讀

電路原理

EEPROMATMEL公司的AT24C01A。單片機(jī)為ATMEL公司的AT89C51。

軟件說(shuō)明

C語(yǔ)言為Franklin C V3.2。將源程序另存為testi2c.c,用命令

C51 testi2c.c

L51 TESTI2C.OBJ

OHS51 TESTI2C

編譯,連接,得到TESTI2C.HEX文件,即可由編程器讀入并進(jìn)行寫片,實(shí)驗(yàn)。

3.源程序

#include 《reg51.h》

#include 《intrins.h》

#define uchar unsigned char

#define uint unsigned int

#define AddWr 0xa0 /*器件地址選擇及寫標(biāo)志*/

#define AddRd 0xa1 /*器件地址選擇及讀標(biāo)志*/

#define Hidden 0x0e /*顯示器的消隱碼*/

/*有關(guān)全局變量*/

sbit Sda= P3^7; /*串行數(shù)據(jù)*/

sbit Scl= P3^6; /*串行時(shí)鐘*/

sbit WP= P3^5; /*硬件寫保護(hù)*/

void mDelay(uchar j)

{ uint i;

for(;j》0;j--)

{ for(i=0;i《125;i--)

{;}

}

}

/*發(fā)送起始條件*/

void Start(void) /*起始條件*/

{

Sda=1;

Scl=1;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

Sda=0;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

}

void Stop(void) /*停止條件*/

{

Sda=0;

Scl=1;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

Sda=1;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

}

void Ack(void) /*應(yīng)答位*/

{

Sda=0;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

Scl=1;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

Scl=0;

}

void NoAck(void) /*反向應(yīng)答位*/

{

Sda=1;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

Scl=1;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

Scl=0;

}

void Send(uchar Data) /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/

{

uchar BitCounter=8; /*位數(shù)控制*/

uchar temp; /*中間變量控制*/

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;

}

uchar Read(void) /*讀一個(gè)字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/

{

uchar temp=0;

uchar temp1=0;

uchar BitCounter=8;

Sda=1;

do{

Scl=0;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

Scl=1;

_nop_ ();

_nop_ ();

_nop_ ();

_nop_ ();

if(Sda) /*如果Sda=1;*/

temp=temp|0x01; /*temp的最低位置1*/

else

temp=temp&0xfe; /*否則temp的最低位清0*/

if(BitCounter-1)

{ temp1=temp《《1;

temp=temp1;

}

BitCounter--;

}while(BitCounter);

return(temp);

}

void WrToROM(uchar Data[],uchar Address,uchar Num)

{

uchar i;

uchar *PData;

PData=Data;

for(i=0;i《Num;i++)

{

Start(); /*發(fā)送啟動(dòng)信號(hào)*/

Send(0xa0); /*發(fā)送SLA+W*/

Ack();

Send(Address+i); /*發(fā)送地址*/

Ack();

Send(*(PData+i));

Ack();

Stop();

mDelay(20);

}

}

void RdFromROM(uchar Data[],uchar Address,uchar Num)

{

uchar i;

uchar *PData;

PData=Data;

for(i=0;i《Num;i++)

{

Start();

Send(0xa0);

Ack();

Send(Address+i);

Ack();

Start();

Send(0xa1);

Ack();

*(PData+i)=Read();

Scl=0;

NoAck();

Stop();

}

}

void main()

{

uchar Number[4]={1,2,3,4};

WP= 1;

WrToROM(Number,4,4); /*將初始化后的數(shù)值寫入EEPROM*/

mDelay(20);

Number[0]=0;

Number[1]=0;

Number[2]=0;

Number[3]=0; /*將數(shù)組中的值清掉,以驗(yàn)證讀出的數(shù)是否正確*/

RdFromROM(Number,4,4);

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    274

    文章

    5702

    瀏覽量

    123490
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136685
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1484

    瀏覽量

    123619
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C51單片機(jī)模擬I2C總線C語(yǔ)言實(shí)現(xiàn)

    EEPROM為ATMEL公司的AT24C01A。單片機(jī)為ATMEL公司的AT89C51。2. 軟件說(shuō)明 C
    發(fā)表于 08-13 13:55 ?88次下載

    億恒C166 系列單片機(jī)I2C 總線的軟件模擬

    億恒C166 系列單片機(jī)I2C 總線的軟件模擬
    發(fā)表于 05-14 16:11 ?6次下載

    基于I2C總線單片機(jī)暖水鍋爐測(cè)溫系統(tǒng)實(shí)現(xiàn)

    基于I2C總線單片機(jī)暖水鍋爐測(cè)溫系統(tǒng)實(shí)現(xiàn):摘要:溫度測(cè)量是工程控制領(lǐng)域常見的一種情況,本文介紹了一種基于I2C
    發(fā)表于 06-21 22:40 ?23次下載

    I2C總線單片機(jī)C語(yǔ)言實(shí)現(xiàn)及其應(yīng)用

    I2C總線單片機(jī)C語(yǔ)言實(shí)現(xiàn)及其應(yīng)用 本文介紹了I2C總線
    發(fā)表于 10-17 08:36 ?2968次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的<b class='flag-5'>單片機(jī)</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言實(shí)現(xiàn)</b>及其應(yīng)用

    51系列單片機(jī)模擬串行口的C語(yǔ)言實(shí)現(xiàn)_栗小寬

    5 1 系列單片機(jī)模擬串行口的C 語(yǔ)言實(shí)現(xiàn).pdf
    發(fā)表于 10-29 11:34 ?4次下載

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)
    發(fā)表于 05-17 11:09 ?35次下載

    80C51單片機(jī)模擬I2C總線的主機(jī)程序分享

    I2C總線協(xié)議程序 在使用的過(guò)程中一定要注意時(shí)序、時(shí)間的問題。 i2c.c /* I2C.c 標(biāo)準(zhǔn)80C51
    發(fā)表于 12-05 15:39 ?3432次閱讀
    80<b class='flag-5'>C51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>模擬</b><b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的主機(jī)程序分享

    使用51單片機(jī)模擬I2C總線的驅(qū)動(dòng)程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)模擬I2C總線的驅(qū)動(dòng)程序免費(fèi)下載。
    發(fā)表于 04-17 17:27 ?0次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>模擬</b><b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的驅(qū)動(dòng)程序免費(fèi)下載

    使用C語(yǔ)言模擬51單片機(jī)I2C總線的資料和程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用C語(yǔ)言模擬51單片機(jī)I2C
    發(fā)表于 08-06 17:34 ?11次下載
    使用<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>模擬</b><b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的資料和程序免費(fèi)下載

    使用51單片機(jī)模擬I2C總線的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)模擬I2C總線的程序免費(fèi)下載我見過(guò)最好的,與大家共享。
    發(fā)表于 06-18 17:44 ?3次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>模擬</b><b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的程序免費(fèi)下載

    基于MCS-51單片機(jī)I2C總線接口電路的設(shè)計(jì)

    單片機(jī)控制系統(tǒng)中,廣泛使用I2C器件。如果單片機(jī)自帶I2C總線接口,則所有I2C器件對(duì)應(yīng)連接到
    發(fā)表于 10-15 16:13 ?3399次閱讀
    基于MCS-<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>I2C</b><b class='flag-5'>總線</b>接口電路的設(shè)計(jì)

    I2C總線驅(qū)動(dòng)的C語(yǔ)言源程序詳細(xì)說(shuō)明

     i2c 總線單片機(jī)系統(tǒng)中常用到的總線技術(shù)這里給大家介紹一個(gè)I2C總線驅(qū)動(dòng)的
    的頭像 發(fā)表于 09-26 11:07 ?5227次閱讀

    使用單片機(jī)實(shí)現(xiàn)I2C接口存儲(chǔ)器AT24C04的讀寫與顯示的C語(yǔ)言實(shí)

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)I2C接口存儲(chǔ)器AT24C04的讀寫與顯示的C語(yǔ)言實(shí)
    發(fā)表于 03-31 11:20 ?16次下載

    使用單片機(jī)實(shí)現(xiàn)I2C存儲(chǔ)器設(shè)計(jì)的中文硬件字庫(kù)應(yīng)用的C語(yǔ)言實(shí)

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)I2C存儲(chǔ)器設(shè)計(jì)的中文硬件字庫(kù)應(yīng)用的C語(yǔ)言實(shí)例。
    發(fā)表于 03-31 14:45 ?2次下載

    使用單片機(jī)實(shí)現(xiàn)I2C接口數(shù)字電位器AD5242應(yīng)用的C語(yǔ)言實(shí)例免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)I2C接口數(shù)字電位器AD5242應(yīng)用的C語(yǔ)言實(shí)例免費(fèi)下載。
    發(fā)表于 03-31 16:31 ?56次下載
    RM新时代网站-首页