導航:首頁 > 操作系統 > i2c51單片機

i2c51單片機

發布時間:2022-09-01 10:05:29

A. 51單片機i2c匯流排讀寫操作問題

帶有 I2C 功能的設備之間通信很方便,51單片機沒有 I2C 介面,只能在編程時遵守 I2C 協議,下面的資料很詳細。
http://wenku..com/link?url=_J0cu6a-W8yDznvCJWE9_6axIlyNpbV-_R-x2s8R4x5o-qIJ9m-tfMjANr4St5GeZi
你必須懂硬體,會看時序圖,才能用 51單片機完成 I2C 通信。在這里三言兩語說不清楚的。

B. 51單片機如何模擬I2C匯流排中從機接收ID,發送數據的程序

希望能給你解答:
1、時鍾信號都是主機產生的,從機只有一種情況下才能控制時鍾線,即在忙的時候,主機還在發送數據,從機會主動把時鍾拉低,表示我正在忙,不能收數據。
2、兩個主機的話,在發送的時候一定會有一個從屬關系,這個需要自己設置。
3、響應:i2c上每傳輸一個位元組,都必須要有響應,方向是從機到主機。

C. 51單片機之間能用i2c協議通信嗎

可以,兩個51單片機之間可以用I2C通信,有同步和非同步兩種,郭天祥的51書里有具體的講解,你可以去看看

D. 兩個51單片機如何通過i2c通訊

一般情況下,要進行I2C通訊,你最起碼其中有一個晶元要本身就帶有I2C通訊介面,用這個帶有I2C介面的晶元來作從器件,這樣就相對好處理一點。你要是兩個都不帶這個介面,來模擬的話,很有難度。除非你對I2C協議很清楚,不過從樓主的提問來看,估計就不怎麼熟悉這種協議。
所以建議還是用別的通訊方式吧,比如用SPI,相對會好處理一點,用其中一個晶元的INTx來模擬CS介面,作為從器件在中斷中來處理,另外一個就模擬主器件來控制從器件,這樣或許會好弄點。如果樓主確實需要通訊,還是趕快換個思路吧,要是卡在一個地方動不了,會耽誤你的進程的,祝你好運!

E. 51單片機I2C通訊的地址是怎麼回事

一個I2C匯流排上可以掛多個器件,為區分不同的器件,所以有器件地址的概念
有些器件的地址是固定的,有些器件的地址是可變的

F. 有關於I2C 51單片機的問題,實在搞不懂,請大家幫幫忙,先謝謝了

uchar 肯定不能大於255,大於255,有可能丟棄高8位或丟失低8位,分大端模式或小端模式如果想把數據寫入到第2000個位元組地址時候,不可以把address直接寫為2000,要分高8位和低8位
低8位就是 addresswrite_I2C_byte(address);
高8位就是你的下面語句的a0或a1
write_I2C_byte(0xa0);
但真正高8位=器件地址(1010占高4位)十 要寫入的地址高8位(3位有效,佔D3D2D1 )+讀寫命令位(D0位)

高8位低8位分離如下:
uint address;
uchar addressL,addressH
addressL=address%256; 有時可省去這一步,高8位自動丟棄
addressH=0XA0|(address>>8)|com讀命令com=1寫命令 com=0

我試驗過的子程序,有點拖沓
////////從24c16的地址address中讀取一個位元組數據/////
unsigned char x24c16_read(uint address)
{
uchar i;
uchar addr_h,addr_h1,addr_l;
addr_h=address/256;
addr_h1=addr_h*2;
addr_l=address%256;
start();
writex(0xa0+addr_h1);
clock(); writex(addr_l);
clock(); start();
writex((0xa1+addr_h1)); clock();
i=readx(); stop();
delay1(10);
return(i);
}

G. 51單片機I2C通信如何讀一位元組

當串列數據線上數據為1時,一個8位二進制變數dat和0x01求或,則最低位被置1,如果數據線上為0電平,則不進行這個或操作,最低位保持原狀0,因此即讀得一位串列數據保存在dat的最低位,然後把dat這個數據左移一次,最低位被推向次低位,空出最低位(變為0),下一個時鍾里,再進行第二次這樣的讀操作,得兩位二進制數,經過8次即讀得到串囗發送的一個位元組,最先發的那位數據移到了最高位 注意是讀8次,左移7次
如果發送時先發送低位(spI串口發數據有時高位在前,有時低位在前)就要將其讀入最高位(和0x80進行"或"操作),然後右移,同樣是8次可以讀得一個位元組數據

H. 51單片機通過I2C匯流排操作EEPROM

把Display();用大括弧括住試一試
另外要確定從EEPROM讀取的數值dat是否在0-16范圍內,因表格內只有17個代碼,超過此范圍是顯示不出來的
還有LSD=LEDDATA[DisplayData[i]];//發送段碼
你獲得的數據只有DisplayData[0],那麼DisplayData[i]其它數據從何而來,是0嗎?也許只是想先試一試能否點亮一個數碼管

I. 51單片機的I2C通訊問題.w

這個講的是I2C協議的具體SDA與SCL高低電平時序,就假如你用51單片機兩個I/O口 一個I/O模擬SDA 一個I/O模擬SCL時 你可以按照以上圖片裡面的時序來編輯兩個I/O高低電平時序。假如你有I2C通訊硬體模塊的話 你就不需要以上圖片直接用模塊就行。上面圖片講的東西 大部分在I/O口模擬I2C 傳輸數據時才會用到,比較底層。不知道我的回答你能理解么。

閱讀全文

與i2c51單片機相關的資料

熱點內容
手機訪問阿里伺服器地址 瀏覽:678
程序員可以干什麼 瀏覽:70
績效考核權重分配演算法 瀏覽:524
android應用logo 瀏覽:898
光遇安卓服墓土商店什麼時候開 瀏覽:566
月收益翻倍的源碼 瀏覽:638
asop源碼放在哪裡 瀏覽:989
電腦伺服器密碼怎麼找 瀏覽:574
jdp轉換pdf 瀏覽:749
把pdf導入iphone 瀏覽:508
米哈游租賃的雲伺服器是哪個 瀏覽:524
android直接打電話 瀏覽:1016
ubuntu停止命令 瀏覽:284
cnc攻絲編程 瀏覽:869
換個手機號碼app怎麼注冊 瀏覽:320
怎麼下載小猴口算app 瀏覽:116
輕鏈app的貨怎麼樣 瀏覽:625
電腦里的u盤如何加密 瀏覽:372
我的世界全部版本伺服器下載地址 瀏覽:50
交換原理pdf 瀏覽:230