導航:首頁 > 操作系統 > 單片機之間i2c通信

單片機之間i2c通信

發布時間:2022-08-29 20:27:23

1. i2c單片機里什麼意思

i2c是一種同步串列數字信號匯流排介面,用於實現多個器件或設備之間的通信。它包含有一根時鍾線和數據線,最高通信速度可達400Kb/s.一些高檔單片機帶有該介面,但普通單片機可以用通用IO口模擬 i2c時序。

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

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

3. 單片機i2c匯流排通信

讀或者寫入一個位元組後,,一般要加一段延時,,最小要是2Ms。

4. 單片機I2C匯流排通信問題,高手進

IIC匯流排工作原理 I2C匯流排進行數據傳送時,時鍾信號為高電平期間,數據線上的數據必須保持穩定,只有在時鍾線上的信號為低電平期間,數據線上的高電平或低電平狀態才允許變化。 起始和終止信號 :SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。數據傳送格式(1)位元組傳送與應答每一個位元組必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的位元組後面都必須跟隨一位應答位(即一幀共有9位)。如果一段時間內沒有收到從機的應答信號,則自動認為從機已正確接收到數據。 AT24C02的晶元地址如下圖,1010為固定,A0,A1,A2正好與晶元的1,2,3引角對應,為當前電路中的地址選擇線,三根線可選擇8個晶元同時連接在電路中,當要與哪個晶元通信時傳送相應的地址即可與該晶元建立連接,TX-1B實驗板上三根地址線都為0。最後一位R/W為告訴從機下一位元組數據是要讀還是寫,0為寫入,1為讀出。 AT24C02的晶元地址(0xa0為寫,0xa1為讀)任一地址寫入數據格式 Void write_add(uchar address,uchar info)//指定地址寫一個位元組數據{ start(); writebyte(0xa0); respons(); writebyte(address); respons(); writebyte(info); respons(); stop();}
任一地址讀取數據格式void init() //初始化{ SCL=1; delay(); SDA=1; delay();}void start() //啟動信號{ SDA=1; delay(); SCL=1; delay(); SDA=0; delay();}void stop() //停止信號{ SDA=0; delay(); SCL=1; delay(); SDA=1; delay();}void respons() //回應信號{ uchar i=0;SCL=1;delay();while((SDA==1)&&(i<255))i++; SCL=0;delay();}void writebyte(uchar date)// 寫一個位元組{ uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; SCL=0; delay(); SDA=CY; delay(); SCL=1; delay(); } SCL=0; delay(); SDA=1; delay();}uchar readbyte()//讀一個位元組{ uchar i,j,k; SCL=0; delay(); SDA=1; for(i=0;i<8;i++) { SCL=1; delay(); if(SDA==1) j=1; else j=0; k=(k<<1)|j; SCL=0; delay(); } delay(); return k;}uchar read_add(uchar address)//指定地址讀一個位元組數據{ uchar dd; start(); writebyte(0xa0); respons(); writebyte(address); respons(); start(); writebyte(0xa1); respons(); dd=readbyte(); stop(); return dd;}

5. 多個單片機間I2C數據傳輸

不行!I2C是片上匯流排,用於板上晶元的通信,這么遠肯定不行!估計連232都不行了,要用485通信!這個可以做到幾千米!

6. 哪位大神知道RC522與MSP430單片機之間使用I2C通信的程序

I2C通信是,一個單片機設成從機模式,另一個設成主機模式(MSP430有四種模式:主機發送、主機接收、從機發送、從機接收);通信時寄存器設成相應模式,嚴格按照時序寫代碼就OK了。 RAM區的數據需要從機收到請求後控制發送哪一個部分。

7. 51單片機串口通信,和I2C串口通信協議有什麼區別和相同

串口通信准確的說叫RS232通信,串口通信和I2C都是串列通信,但串口通信是RS232協議,I2C通信是遵循I2C協議,舉個簡單例子,從A到B有條路,一個人走路過去,一個人坐車過去。串列通信就是相當於路,RS232和I2C協議相當於走路和坐車兩種不同的方式
贊同

8. 如何用IO口模擬I2C來實現兩個STC單片機之間的通訊,求C語言寫法

這是我寫的模擬程序,只有一個發送函數和一個接收函數,EP為接收標志位,發送沒有標志位,通過外部中斷來發送起始信號,無應答與非應答,無結束信號,實測可以正常收發數據
#ifndef _IOPORTSEND_H__
#define _IOPORTSEND_H__
#include<reg52.h>
unsigned char DAT,EP=0;//可以把DAT當作串口中的SBUF,主機發送完後接收機從DAT提取數據
sbit flag = P3^3;//外部中斷口
sbit ok = P2^7;//起始信號發送口
sbit PCL = P2^6;//時鍾線
sbit PDA = P2^5;//數據線
void delay() //延時函數控制波特率
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=13;a>0;a--);
}
void PortInit()//中斷配置
{
EA=1;
EX1=1;
IT1=1;
}
void SendPort(unsigned char dat)//發送函數
{
unsigned char i;
PCL=0;
ok=1;//通過ok來啟動接收機的中斷
ok=0;
for(i=0;i<8;i++)//開始發送數據
{
PCL=0;
delay();
if(dat&0x80)
PDA=1;
else
PDA=0;
PCL=1;
delay();
dat<<=1;
}
PCL=0;
delay();
ok=1;//ok置1以便下次發送時啟動中斷
PCL=1;//發送完畢釋放時鍾線與數據線
PDA=1;
}
void ReadPort()interrupt 2//接收函數,在中斷函數中接收數據
{
unsigned char i;
static unsigned int b;
PCL=1;
PDA=1;//防止接收機的PCL口和PDA口影響數據的接收
for(i=0;i<8;i++)//開始接收數據
{
DAT<<=1;
while(PCL==0);
b=0;
while(PCL==1)
{
b++;
if(b==1)
if(PDA)
DAT|=0x01;
}
}
EP=1;//接收完畢後置EP為1,需要在其他函數中清零
}
#endif

閱讀全文

與單片機之間i2c通信相關的資料

熱點內容
天津市伺服器供應商雲伺服器 瀏覽:107
數控車床子程序編程 瀏覽:103
floydwarshall演算法 瀏覽:713
丟失微信app怎麼找 瀏覽:248
php能寫前端嗎 瀏覽:5
伺服器如何更改raid模式 瀏覽:90
方舟伺服器怎麼導出來 瀏覽:608
手機顯示伺服器異常什麼鬼 瀏覽:379
新聞伺服器的網址是什麼 瀏覽:669
程序員年底招人 瀏覽:319
廣發app怎麼查房貸 瀏覽:860
安卓手機怎麼下土豆 瀏覽:921
只有一個app顯示網路異常怎麼回事 瀏覽:988
解壓玩具是水寶寶 瀏覽:817
壓縮機保護怎麼解決 瀏覽:944
單片機簡易電子時鍾 瀏覽:402
pdf影印版 瀏覽:689
單片機的中斷技術 瀏覽:626
表格加密才能打開 瀏覽:39
多態可以提高編譯可靠性嗎 瀏覽:599