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

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>接口技術>I2C總線規范與I2C器件C51讀寫程序

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

2009-08-22 | rar | 433 | 次下載 | 10積分

資料介紹

I2C總線規范與I2C器件C51讀寫程序:本文簡要介紹了I2C總線,并給出了I2C器件的C51讀寫程序,極大的方便了大家對I2C總線的學習和設計應用。程序設計采用模塊化設計,方便向目標板的移值。
關鍵字:I2C總線,C51,模塊化設計
1、I2C總線簡介:
I2C 總線是一雙線串行總線,它提供一小型網絡系統,為總線上的電路共享公共的總線。總線上的器件有單片機、LCD 驅動器以及上E2PROM 器等等。自從菲利普公司提出I2C總線規范以來,I2C器件得到了廣泛的應用。I2C器件的應用大大減少了電路間連線,減小了電路板尺寸,降低了硬件成本,并提高了系統可靠性。
2、I2C規范:
I2C總線規范可以參考有關資料,本文僅給出有關硬件操作的基本概念。
2.1、I2C 總線名詞解釋:
發送器:發送數據到總線上的器件
接收器:從總線上接收數據的器件
主器件:啟動數據傳送并產生時鐘信號的器件
從器件:被主器件尋址的器件
2.2、I2C總線時序定義:
起始位:SCL=1時,在SDA上有下降延
停止位:SCL=1時,在SDA上有上升延
*主器件發停止信號給從器件,作用在于使從器件處為準備狀態(或是已知的狀態)
從應答:SDA=0
*寫數據時,應答的器件在第九個時鐘周期將SDA線拉低,表示已收到一個8位數據,并表示可繼續接收。主機在向從機寫一字節后接收從應答,再進行后續操作(一般不考慮從應答位的具體值,僅在應答檢測時用于判斷從器件是否完成其內部寫周期)
主應答:SDA=0(用)
*讀數據時,主機每接收從機一個字節數據(不是最后一個),返回主應答ACK(SDA=0)
是最后一個字節時返回無需應答NO_ACK(SDA=1)
當從機工作于讀模式時,在向主機發送一個8位數據后釋放SDA線并監視一個應答信號,一旦接收到主機的應答信號,從機繼續發送數據;如主器件沒有發送應答信號,從機停止傳送數據并等待一個停止信號,主器件必須發一個停止信號給從機使其進入備用電源模式并使器件處于已知的狀態
應答檢測:采用應答檢測讀命令測試從機是否<頁寫>結束(通過從應答來識別)
*當從器件完成內部寫周期后將發送一個應答信號(從應答)給主器件,以便可以繼續進行下一次讀操作
3、I2C器件C51讀寫程序
3.1、數據定義說明:
sbit sda=P0^0; //I2C器件SDA數據線
sbit scl=P0^1; //I2C器件SCL時鐘線
#define nops() {_nop_();_nop_();_nop_();_nop_();_nop_();} //nop指令個數定義
uchar i2c_ad_main; //器件從地址
uchar i2c_ad_sub; //器件子地址
uchar *i2c_buf; //發送/接收數據緩沖區
uchar i2c_num; //發送/接收數據個數
說明:可以在你的應用程序中修改上述值,使其適應你的demo設計
3.2、子函數說明:(私有函數,不能調用)
void i2c_start(void) //送起始位
void i2c_stop(void) //送停止位
void i2c_ack_main(bit ack_main) //主應答
說明:ack_main=1:ack主應答;ack_main=0:no_ack無需應答
void send_byte(uchar c) //發送單個字節
uchar read_byte(void) //接收單個字節
說明:此函數需要配合主應答來用
3.3、模塊函數說明:(I2C外部接口函數,可被應用程序調用)
void send_to_byte(uchar ad_main,uchar c) //向無子地址器件發送單字節數據
void send_to_nbyte(uchar ad_main,uchar ad_sub,uchar *buf,uchar num)
//向有子地址器件發送多字節數據
void read_from_byte(uchar ad_main,uchar *buf) //從無子地址器件讀單字節數據
void read_from_nbyte(uchar ad_main,uchar ad_sub,uchar *buf,uchar num)
//從有子地址器件讀多個字節數據
3.4、C51讀寫程序源代碼:
3.4.1頭文件定義:
#define uchar unsigned char
#define uint unsigned int
//nop指令個數定義
#define nops() {_nop_();_nop_();_nop_();_nop_();_nop_();}
//端口位定義,可修改
sbit sda=P0^0;
sbit scl=P0^1;
//內部數據定義
uchar i2c_ad_main; //器件從地址
uchar i2c_ad_sub; //器件子地址
uchar *i2c_buf; //發送|接收數據緩沖區
uchar i2c_num; //發送|接收數據個數
#define ack 1 //主應答
#define no_ack 0 //從應答
3.4.2C51程序代碼:
#include
#include
#include
//**********************************************
//送起始位 sda=1->0
void i2c_start(void){
scl=0;
sda=1;
_nop_();
scl=1;
nops();
sda=0;
nops();
scl=0;
}
//************************************************
//送停止位 sda=0->1
void i2c_stop(void){
scl=0;
_nop_();
sda=0;
_nop_();
scl=1;
nops();
sda=1;
nops();
scl=0;
}
//************************************************
//主應答(包含ack:sda=0和no_ack:sda=0)
void i2c_ack_main(bit ack_main){
scl=0;
if(ack_main)sda=0; //ack主應答
else sda=1; //no_ack無需應答
nops();
scl=1;
nops();
scl=0;
}
//*************************************************
//字節發送程序
//發送c(可以是數據也可是地址),送完后接收從應答
//不考慮從應答位
void send_byte(uchar c){
uchar i;
for(i=0;i<8;i++){
scl=0;
if((c<else sda=0;
_nop_();
scl=1;
nops();
scl=0;
}
nops();
sda=1; //發送完8bit,釋放總線準備接收應答位
_nop_();
scl=1;
nops(); //sda上數據即是從應答位
scl=0; //不考慮從應答位|但要控制好時序
}
//**************************************************
//字節接收程序
//接收器件傳來的數據,此程序應配合|主應答函數|i2c_ack_main()使用
//return: uchar型1字節
uchar read_byte(void){
uchar i;
uchar c;
c=0;
scl=0;
_nop_();
sda=1; //置數據線為輸入方式
for(i=0;i<8;i++){
_nop_();
scl=0; //置時鐘線為低,準備接收數據位
nops();
scl=1; //置時鐘線為高,使數據線上數據有效
_nop_();
c<<=1;
if(sda)c+=1; //讀數據位,將接收的數據存c
}
scl=0;
return c;
}
//***************************************************
//向無子地址器件發送單字節數據
void send_to_byte(uchar ad_main,uchar c){
i2c_start();
send_byte(ad_main); //發送器件地址
send_byte(c); //發送數據c
i2c_stop();
}
//***************************************************
//向有子地址器件發送多字節數據
void send_to_nbyte(uchar ad_main,uchar ad_sub,uchar *buf,uchar num){
uchar i;
i2c_start();
send_byte(ad_main); //發送器件地址
send_byte(ad_sub); //發送器件子地址
for(i=0;isend_byte(*buf); //發送數據*buf
buf++;
}
i2c_stop();
}
//***************************************************
//從無子地址器件讀單字節數據
//function:器件地址,所讀數據存在接收緩沖區當前字節
void read_from_byte(uchar ad_main,uchar *buf){
i2c_start();
send_byte(ad_main); //發送器件地址
*buf=read_byte();
i2c_ack_main(no_ack); //無需應答
i2c_stop();
}
//***************************************************
//從有子地址器件讀多個字節數據
//function:
void read_from_nbyte(uchar ad_main,uchar ad_sub,uchar *buf,uchar num){
uchar i;
i2c_start();
send_byte(ad_main);
send_byte(ad_sub);
for(i=0;i*buf=read_byte();
i2c_ack_main(ack); //主應答
buf++;
}
*buf=read_byte;
buf++; //本次指針調整無意義,目的是操作后buf指向下一地址
i2c_ack_main(no_ack); //無需應答
i2c_stop();
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

请按住滑块,拖动到最右边
了解新功能

查看更多

广告

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費下載
  2. 0.00 MB  |  1497次下載  |  免費
  3. 2TC358743XBG評估板參考手冊
  4. 1.36 MB  |  330次下載  |  免費
  5. 3單片機典型實例介紹
  6. 18.19 MB  |  99次下載  |  1 積分
  7. 4S7-200PLC編程實例詳細資料
  8. 1.17 MB  |  28次下載  |  1 積分
  9. 5筆記本電腦主板的元件識別和講解說明
  10. 4.28 MB  |  18次下載  |  4 積分
  11. 6開關電源原理及各功能電路詳解
  12. 0.38 MB  |  14次下載  |  免費
  13. 79天練會電子電路識圖
  14. 5.91 MB  |  6次下載  |  免費
  15. 8100W短波放大電路圖
  16. 0.05 MB  |  4次下載  |  3 積分

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費
  7. 4LabView 8.0 專業版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費
  9. 5555集成電路應用800例(新編版)
  10. 0.00 MB  |  33564次下載  |  免費
  11. 6接口電路圖大全
  12. 未知  |  30321次下載  |  免費
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費
  15. 8開關電源設計實例指南
  16. 未知  |  21540次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537794次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191183次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138039次下載  |  免費
主站蜘蛛池模板: 久久综合给会久久狠狠狠 | 久草色在线 | 国产精品一久久香蕉国产线看 | 国产不卡免费 | 无遮掩H黄纯肉动漫在线观看星 | 国产一区亚洲 | 亚洲AV无码乱码国产精品品麻豆 | 暖暖视频免费高清在线观看 视频 | 国产婷婷午夜精品无码A片 国产婷婷色综合AV蜜臀AV | 国产又粗又猛又爽又黄的免费视频 | 国产精品久久久久久免费播放 | 欧美 亚洲 日韩 在线综合 | 久久国产亚洲电影天堂 | 5G年龄确认我已满18免费 | 亚洲宅男天堂a在线 | 日日做夜夜欢狠狠免费软件 | 青青久久网| 亚洲欧美一区二区成人片 | 青青热久精品国产亚洲AV无码 | 嘟嘟嘟WWW在线观看视频高清 | 国产精品一区二区四区 | 99精品视频在线 | 一边亲着一面膜下的免费过程 | 法国剧丝袜情版h级在线电影 | 亚洲一级特黄 | 免费在线观看a视频 | 午夜aaaa | 日本邪恶全彩工囗囗番海贼王 | 最近2018年手机中文字幕 | 99热婷婷国产精品综合 | 视频在线免费观看 | 日本六九视频 | 在线综合 亚洲 欧美 | 中文有码中文字幕免费视频 | 国内精品七七久久影院 | 李丽莎与土豪50分钟在线观看 | 嘟嘟嘟WWW免费高清在线中文 | 免费看到湿的小黄文软件APP | 最近中文字幕高清中文字幕MV | 亚洲午夜久久久久中文字幕 | 99婷婷久久精品国产一区二区 |