久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于51的IIC通訊原理及協議詳解(I2C)
[打印本頁]
作者:
51黑er
時間:
2015-11-10 02:10
標題:
基于51的IIC通訊原理及協議詳解(I2C)
IIC 的一些特征:
兩條總線:串行數據總線(SDA)和串行時鐘總線(SCL)
真正的多主機總線
連接到相同總線的ic數量只受到總線的最大電容400pF限制。
串行8位雙向數據在標準模式下可達100K bit/s
快速模式400K bit/s,高速模式下3.4Mbit/s.
數據有效性規定:
IIC總線在進行數據傳輸時,SCL在高電平區間,SDA上的電平必須保持穩定
SDA的數據的高或者低電平狀態只有在SCL線的時鐘信號是低電平時才能改變。
起始和停止條件:
起始:SCL高電平時,SDA由高電平向低電平切換。
停止:SCL高電平時,SDA由低電平向高電平切換。
模擬時序如下:
起始與終止:
應答與非應答:
總線上進行一次數據傳輸的通信格式:
相關模擬時序的驅動函數:包括(start,stop,respons,write_byte,read_byte)
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
//SCL高電平區間,SDA一個下降沿啟動信號
void Start()
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
//SCL在高電平區間,SDA一個上升沿停止信號
void Stop()
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
//SCL在高電平區間,SDA被從設備拉低表示應答,
//(SDA==1)&&(i<255)表示如果一段時間未收到從期間
//的應答則默認從期間已經收到而不再等待應答信號
void Respons()
{
uchari=0;
SCL=1;
delay();
while((SDA==1)&&(i<255))
i++;
SCL=0;
delay();
}
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
//CY 為PSW寄存器中的CY位
//先移位,然互使用SCL控制發出去
void Write_Byte(uchar date)
{
uchari,temp;
temp=tada;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
//定義臨時變量K,K左移一位后與SDA進行或運算,
//依次把8個獨立地位放入一個字節中來接受完成
void Read_Byte()
{
uchari,k;
SCL=0;
delay();
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;
SCL=0;
delay();
}
delay();
returnk;
}
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
底層驅動完成以后,我們需要對實際的芯片使用通訊協議來進行操作。
目前大多的情況下一般比較受歡迎的是AT24cxx 系列。
AT24Cxx系列主要有: 以下系列:
以下僅以AT24C02為例來進行說明:
AT24C02芯片地址為:1010,其控制字格式如下:
其中A2,A1,A0為可編程選擇地址,此處A2,A1,A0均接地,即000,
因此發送寫信號的尋址字節為:10100000,即0XA0,
因此發送讀信號的尋址字節為:10100001,即0XA1,
下圖為寫一個字節的數據格式,有圖可知道:向AT24C02中寫入一個字節的時候,需要:
先發一個起始信號,再發一個字節的控制字,
在發送一個字節的控制字地址,都得到應答信號后,
再發送要存入的數據,最后發一個停止信號!
So,一個字節的數據已經寫入AT24C02中,OK!下面是數據格式,如圖:
程序如下:
-----------------------------------------------------------------------------------------------------------------------
//任意地址,寫入數據
void Write_Add(uchar address,uchar date)
{
Start();
Write_Byte(0xA0);
Respons();
Write_Byte(address);
Respons();
Write_Byte(date);
Respons();
Stop
}
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
下圖為讀一個字節的數據格式,其讀取一個字節的數據和寫入時候差不多,此處不再累贅,讀一字節數據格式如圖:
程序如下:
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
//任意地址,讀出數據
void Read_Add(uchar address)
{
uchardate;
Start();
Write_Byte(0XA0);
Respons();
Write_Byte(address);
Respons();
Start();
Write_Byte(0XA1);
Respons();
date=Read_Byte();
Stop();
returnbyte;
}
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
以上幾位IIC的基本通訊時序的相關講解,可參與時序圖進行理解!!
作者:
zhy111
時間:
2019-12-3 22:15
收藏了,謝謝。但還是有些不知道SDA=CY是什么意思?
作者:
muzhi
時間:
2019-12-12 00:30
很清楚的解釋,多謝分享
作者:
大克汐
時間:
2019-12-12 07:25
寫字節函數中的第二行是date變量,程序筆誤了
作者:
BeliefBelief
時間:
2019-12-12 16:54
厲害,求指導
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久精品国产一区二区三区不卡
|
成人欧美日韩一区二区三区
|
一本久久a久久精品亚洲
|
噜啊噜在线
|
91精品国产欧美一区二区成人
|
欧美综合视频在线
|
国产91色在线 | 亚洲
|
天天色天天色
|
成人精品国产
|
日韩三区在线观看
|
在线观看黄免费
|
亚洲一区影院
|
草草视频在线免费观看
|
亚洲精品久久久久久久久久吃药
|
欧美激情免费在线
|
国产一级视频在线
|
久久国产亚洲
|
精品久久久久久久久久久久
|
国产精品免费看
|
亚洲国产一区视频
|
亚洲精品视频在线播放
|
日韩精品视频在线免费观看
|
国产亚洲一区二区三区在线
|
国产av毛片
|
国产精品亚洲第一
|
成人在线观看免费
|
日韩第一页
|
伊人av在线播放
|
蜜臀网
|
久久精品色视频
|
精品国产一区二区在线
|
国户精品久久久久久久久久久不卡
|
不卡的av在线
|
久久久国产一区二区三区四区小说
|
亚洲精品一区在线观看
|
欧美日韩中文字幕
|
黄色三级在线播放
|
毛片在线看片
|
日本精品视频一区二区三区四区
|
天堂va在线观看
|
日本黄色影片在线观看
|