色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

I2C總線驅動的C語言源程序詳細說明

Wildesbeast ? 來源:單片機教程網 ? 作者:單片機教程網 ? 2020-09-26 11:07 ? 次閱讀

i2c 總線上單片機系統中常用到的總線技術這里給大家介紹一個I2C總線驅動的C51語言源程序。

//#pragma ot(6,SIZE)

#i nclude 《AT89X52.H》

#i nclude 《intrins.h》

#define ERRORCOUNT 10

#define readI2C 0xa1

#define writeI2C 0xa0

sbit SDA=P1^6;

sbit SCL=P1^5;

enum eepromtype {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};

enum eepromtype EepromType;

//DataBuff為讀寫數據輸入/輸出緩沖區的首址

//ByteQuantity 為要讀寫數據的字節數量

//Address 為EEPROM的片內地址

//ControlByte 為EEPROM的控制字節,具體形式為(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,

//表示讀操作,R/W=0為寫操作,A2,A1,A0為EEPROM的頁選或片選地址;

//EepromType為枚舉變量,需為M2401至M24256中的一種,分別對應24C01至24C256;

//函數返回值為一個位變量,若返回1表示此次操作失效,0表示操作成功;

//ERRORCOUNT為允許最大次數,若出現ERRORCOUNT次操作失效后,則函數中止操作,并返回1

//SDA和SCL由用戶自定義,這里暫定義為P0^0和P0^1;

//其余的用戶不用管,只要把只子程序放在你的程序中并調用它就可以了;

/*******************************I2C總線驅動(C51語言源程序)**********************************************/

bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,

unsigned char ControlByte,enum eepromtype EepromType)

{

void Delay(unsigned char DelayCount);

void I2CStart(void);

void I2CStop(void);

bit I2CRecAck(void);

void I2CNoAck(void);

void I2CAck(void);

unsigned char I2CReceiveByte(void);

void I2CSendByte(unsigned char sendbyte);

unsigned char data j,i=ERRORCOUNT;

bit errorflag=1;

while(i--)

{

I2CStart();

I2CSendByte(ControlByte&0xfe);

if(I2CRecAck())

continue;

if(EepromType》M2416)

{

I2CSendByte((unsigned char)(Address》》8));

if(I2CRecAck())

continue;

}

I2CSendByte((unsigned char)Address);

if(I2CRecAck())

continue;

if(!(ControlByte&0x01))

{

j=ByteQuantity;

errorflag=0; //********clr errorflag

while(j--)

{

I2CSendByte(*DataBuff++);

if(!I2CRecAck())

continue;

errorflag=1;

break;

}

if(errorflag==1)

continue;

break;

}

else

{

I2CStart();

I2CSendByte(ControlByte);

if(I2CRecAck())

continue;

while(--ByteQuantity)

{

*DataBuff++=I2CReceiveByte();

I2CAck();

}

*DataBuff=I2CReceiveByte(); //read last byte data

I2CNoAck();

errorflag=0;

break;

}

}

I2CStop();

if(!(ControlByte&0x01))

{

Delay(255);

Delay(255);

Delay(255);

Delay(255);

}

return(errorflag);

}

/*****************以下是對I2C總線的操作子程序***/

/*****************啟動總線**********************/

void I2CStart(void)

{

SCL=0; //

SDA=1;

SCL=1;

_nop_();

_nop_();

_nop_();

SDA=0;

_nop_();

_nop_();

_nop_();

_nop_();

SCL=0;

SDA=1; //

}

/*****************停止I2C總線****************/

void I2CStop(void)

{

SCL=0;

SDA=0;

SCL=1;

_nop_();

_nop_();

_nop_();

SDA=1;

_nop_();

_nop_();

_nop_();

SCL=0;

}

/**************檢查應答位*******************/

bit I2CRecAck(void)

{

SCL=0;

SDA=1;

SCL=1;

_nop_();

_nop_();

_nop_();

_nop_();

CY=SDA; //因為返回值總是放在CY中的

SCL=0;

return(CY);

}

/***************對I2C總線產生應答*******************/

void I2CACK(void)

{

SDA=0;

SCL=1;

_nop_();

_nop_();

_nop_();

_nop_();

SCL=0;

_nop_();

SDA=1;

}

/*****************不對I2C總線產生應答***************/

void I2CNoAck(void)

{

SDA=1;

SCL=1;

_nop_();

_nop_();

_nop_();

_nop_();

SCL=0;

}

/*******************向I2C總線寫數據*********************/

void I2CSendByte(unsigned char sendbyte)

{

unsigned char data j=8;

for(;j》0;j--)

{

SCL=0;

sendbyte《《=1; //無論C51怎樣實現這個操作,始終會使CY=sendbyte^7;

SDA=CY;

SCL=1;

}

SCL=0;

}

/**********************從I2C總線上讀數據子程序**********/

unsigned char I2CReceiveByte(void)

{

register receivebyte,i=8;

SCL=0;

while(i--)

{

SCL=1;

receivebyte=(receivebyte《《1)|SDA;

SCL=0;

}

return(receivebyte);

}

/***************一個簡單延時程序************************/

void Delay(unsigned char DelayCount)

{

while(DelayCount--);

}

void main()

{

// unsigned int i;

//unsigned char j[32];

unsigned char *pa,*pb,temp=0;

unsigned char a[8]={5,6,7,8,9,10,11,12};

unsigned char b[8]={0,0,0,0,0,0,0,0};

pa=&a[0];

pb=&b[0];

P2_7=0;

RW24XX(pa,8,0x0,writeI2C,M2401);

RW24XX(pa,8,0x20,writeI2C,M2401);

RW24XX(pb,8,0x20,readI2C,M2401);

RW24XX(pb,8,0x30,writeI2C,M2401);

// RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,

// unsigned char ControlByte,enum eepromtype EepromType)

while(1)

{

P2_7=1;

}

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7622

    瀏覽量

    139098
  • 總線
    +關注

    關注

    10

    文章

    2924

    瀏覽量

    88890
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1501

    瀏覽量

    125845
收藏 0人收藏

    評論

    相關推薦

    I2C總線驅動程序

    1 /**————————————————————2說明I2C總線驅動程序(用兩個普通IO模擬I2
    發表于 08-13 17:04 ?64次下載

    i2c總線ppt(I2C總線器件應用)

    I2C總線器件應用第一節 I2C總線器件應用概述I2C總線工作原理
    發表于 08-13 17:34 ?0次下載

    I2C總線器件的C51讀寫程序

    I2C總線規范與I2C器件C51讀寫程序 本文簡要介紹了I2C
    發表于 03-25 09:21 ?62次下載

    基于S3C44B0X的I2C總線設計

    文章介紹了S3C44B0X 的I2C 總線接口,與EEPROM 的連接方法。重點分析了I2C 總線的配置方法,主器件模式下發送數據和接收數據
    發表于 08-19 10:30 ?30次下載

    I2C總線規范與I2C器件C51讀寫程序

    I2C總線規范與I2C器件C51讀寫程序:本文簡要介紹了I2C
    發表于 08-22 17:51 ?93次下載

    基于I2C總線的EEPROM驅動程序

     I2C總線是由Philips公司開發的用于器件之間連接的2線式雙向同步串行總線。Linux內核中針對I2C
    發表于 12-07 13:58 ?55次下載

    I2C總線驅動程序的實現

    I2C總線驅動程序的實現 I2C 驅動程序的簡介本驅動程序為標準的51 系列CPU 編寫,讓C
    發表于 09-26 17:25 ?5828次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b><b class='flag-5'>驅動程序</b>的實現

    HOLTEK 主I2C源程序代碼

    HOLTEK 主I2C源程序代碼 調用的代碼             case C_READ+C_I2C
    發表于 01-14 23:37 ?1587次閱讀

    I2C總線的單片機C語言實現及其應用

    I2C總線的單片機C語言實現及其應用 本文介紹了I2C總線的概念、接口特性和傳輸時序,提出了一
    發表于 10-17 08:36 ?3041次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的單片機<b class='flag-5'>C</b><b class='flag-5'>語言</b>實現及其應用

    i2c總線規范

    1 序言 1.1 版本1.0-1992 1992 I2C 總線規范的這個版本有以下的修正 刪除了用軟件編程從機地址的內容因為實現這個功能相當復雜而且不被使用 刪除了低速模式實際上這個模式是整個I2C
    發表于 01-19 16:34 ?484次下載
    <b class='flag-5'>i2c</b><b class='flag-5'>總線</b>規范

    基于51的I2c總線

    I2c總線,基于51的I2c總線程序學習。快來下載學習吧
    發表于 01-13 11:49 ?34次下載

    I2C總線驅動程序

    I2C總線驅動程序
    發表于 05-20 11:16 ?15次下載

    詳細說明I2C庫文件的使用,對于理解I2C有幫助

    詳細說明I2C庫文件的使用,對于理解I2C有幫助
    發表于 10-13 10:02 ?28次下載

    使用C語言模擬51單片機的I2C總線的資料和程序免費下載

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

    I2C總線的規范詳細說明

    本文檔的主要內容詳細介紹的是I2C總線的規范詳細說明
    發表于 09-30 17:29 ?18次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的規范<b class='flag-5'>詳細說明</b>
    主站蜘蛛池模板: 国产AV精品一区二区三区漫画 | 99久久精品免费精品国产 | 妈妈的职业3完整版在线播放 | 国语大学生自产拍在线观看 | 精品国产成a人在线观看 | 国产午夜精品一区二区理论影院 | 最新高清无码专区 | 国产永久免费高清在线观看 | 国产成人亚洲精品午夜国产馆 | 樱花之恋动漫免费观看 | zxfuli午夜福利在线 | 日韩一区二区三区免费体验 | 再插深点嗯好大好爽 | 亚洲乱码中文字幕久久 | 微福利92合集 | 秀婷程仪公欲息肉婷在线观看 | 忘忧草研究院一二三 | 在线观看国产视频 | qvod伦理片| 久久性生大片免费观看性 | 亚洲无遮挡无码A片在线 | 日本视频一区二区免费观看 | 国产成人精品免费视频大全可播放的 | 敌伦小芳的第一次 | 在线 亚洲 日韩 欧洲视频 | 最近2019年日本中文免费字幕 | 毛片网站在线观看 | 成人国产亚洲精品A区天堂蜜臀 | 舔1V1高H糙汉 | 人妻中文字幕无码系列 | 亚洲综合香蕉在线视频 | 成人区在线观看免费视频 | 无敌在线视频观看免费 | 国产亚洲999精品AA片在线爽 | 在镜头里被CAO翻了H | 国产69精品久久久久妇女 | 皮皮色狼网 | 午夜天堂AV久久久噜噜噜 | 国模啪啪久久久久久久 | 久青草国产在视频在线观看 | 偷窥wc美女毛茸茸视频 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品